1С Предприятие. Практика программирования на платформе v7

  73c64bed     

Режим


В режиме Итогов выводится информация текущего периода или любого произвольного периода. В последнем случае БИ надо рассчитать на нужный период с помощью метода Рассчитать(ДатаНачала, ДатаКонца)

БИ.Рассчитать(<НачалоПериода>,<КонецПериода>,<ФильтрПоСчетам>,<ТолькоСинтетика>,

<ПланСчетов>,<РазделительУчета>);

<ФильтрПоСчетам> - необязательный параметр. Счета, для которых будет выполняться временный расчет

итогов. Задается значением типа "Счет" или объектом типа ''СписокЗначений", содержащим значения

типа "Счет", либо строкой, содержащей список кодов счетов, разделенных символом "," или ";"

("АМ.ПР;АМ.СП") .

<ТолькоСинтетика> - необязательный параметр: 1 - рассчитывать сальдо только по счетам; 0 - или не

указан - рассчитывать сальдо по счетам и по субконто.

Метод БИ. ОсновныеИтоги() переводит БИ в режим работы с итогами текущего периода

(основными итогами). Вызов этого метода имеет смысл тогда, когда ранее был выполнен расчет

временных итогов или запрос, и нужно вернуть объект к работе с основными итогами. При этом

результаты запроса или расчета временных итогов теряются.

X. Основы построения «Бухгалтерского учёта» в системе 1С:Предприятие________ 159

БИ.СНД(<Счет>,<ТипСуммы>,<Валюта>,<Субконто1...>)



Возвращает дебетовое сальдо по счету на начало периода.

<Счет> - значение типа "Счет" или строка - код счета.

<ТипСуммы> - необязательный параметр.

Значения: 1 ("С") - сумма(по умолчанию);

2 ("В") - валютная сумма;

3("К") - количество.

<Валюта> - необязательный параметр.

<Субконто1...> - необязательные параметры. Значения субконто. Если параметры не указаны, то итоги

выдаются без учета аналитики.

Список параметров остальных бухгалтерских функций в режиме итогов такой же, кроме оборотов между счетами:

БИ.ОБ(<СчетДеб>,<СчетКр>,<ТипСуммы>,<Валюта>). Возвращает число - оборот с дебета счета <СчетДеб> в кредит счета <СчетКред>

Упражнение 30. В Форме списка справочника «Оборудование» вывести текущее конечное дебетовое сальдо по сумме конкретного оборудования (элемента справочника), по счету «Приход оборудования».




В режиме запроса с помощью метода БИ.ВыполнитьЗапрос(ДатаН,ДатаК) можно «построить» в оперативной памяти таблицу выборки и затем выбирать из нее необходимые данные.

БИ.ВыполнитьЗапрос(<НачалоПериода>,<КонецПериода>,<Счет>,<КоррСчет>,

<Валюта>,<ТипИтогов>,<Периодичность>,<ТипСуммы>)

<ТипИтогов> - число - тип отбираемых итогов. Значения: 1 - остатки и обороты по счету в цепом; 2 -

обороты между счетами; 3 - первое и второе вместе. По умолчанию: 1.

<Периодичность> - число или символьная строка (см. документацию).Позволяет получить

Дополнительный разрез итогов по периодам. По умолчанию периодичность не задана. Значения:

1("Период"); 2("Операция"); З("Проводка");  4 ("День"); 5 ("'Неделя'); 6 ("Декада"); 7 ("Месяц");

8 ("Квартал"); 9 ("Год").

<ТипСуммы> - число или строка - тип рассчитываемых итогов. Значения: 1("С") рассчитывать суммы;2

("В") рассчитывать валютные суммы; 4 ("К") рассчитывать количество. Если требуется одновременно

Рассчитывать разные суммы, значение параметра получается путем сложения допустимых значений,

например: 5 (1+4) - рассчитывать суммы и количество.

Перед вызовом этого метода можно установить признак отбора по субсчетам, определить фильтры по субконто и опции запроса.

БИ.Опции(<ВклЗабалансовСуммы>,<ВклОборСубкСуммы>)

160______________________ 1С:Предприятие. Практика программирования на платформе \/7

Значения: 0 - суммы не включаются;

1 - суммы включаются.

БИ.ВключатьСу6счета(<ФлагСчета>,<ФлагКоррСчета>)_Устанавливает режим отбора итогов

методом "ВыполнитьЗапрос" по субсчетам.

<ФлагСчета> - необязательный параметр. Признак развертывания сальдо по субсчетам основного счета

Значение:О - не разворачить по субсчетам (по умолчанию); 1 - разворачивать по субсчетам; -1 (минус

единица) - не выдавать итоги по счетам-группам.




При установке признака отбора по субсчетам следует иметь в виду, что при установленном флажке «Количественный учет» «Только по аналитике» в свойствах Счетов при выборке субсчетов Вы не получите сальдо и обороты по количеству.

БИ.ИспользоватьСубконто(<ВидСубконто>,<Субконто>, <ТипФильтра>,<ПоГруппам>)

<ВидСубконто> - значение типа "ВидСубконто" (ВидСубконто.<ВидСубконто>)- расчет итогов будет

выполнен только для субконто указанного вида.

<Субконто> - значение Субконто, по которому будут отобраны итоги по аналитике. Если параметр не

задан - то считается пустым значением субконто.

<ТипФильтра> - Значения: 1 - разворачивать по данному субконто (по умолчанию), 2 - отбирать по

данному субконто, 3 - не учитывать это субконто вообще. <ПоГруппам> - число - группировка итогов по

субконто. Значения: 0 - не показывать итоги по группам справочника (по умолчанию);

1 - показывать итоги по группам справочника.

При установке фильтров по субконто надо обратить внимание на порядок их установки. Вложенность циклов выборки по субконто должна соответствовать порядку фильтров.

Тип фильтра 2 - отбор по субконто, имеет смысл использовать только для видов субконто с установленным флагом отбора (закладка «Дополнительные» свойств вида субконто).



X. Основы построения «Бухгалтерского учёта» в системе 1С:Предприятие________ 161

Порядок вложенности циклов выборки



Обращение к результатам запроса



Данные из бухгалтерского запроса выбираются в циклах выборки. На рисунке ниже показаны правила вложенности циклов выборки бухгалтерских итогов из запроса.

При обращении к атрибутам выборки, в отличие от методов, не надо ставить скобки - ().

162 _____________________ 1С:Предприятив. Практика программирования на платформе V7

При обращении в запросе к остаткам, оборотам и развернутому сальдо указывается только один параметр - ТипСуммы:

1 ("С") - сумма;

2 ("В") - валютная сумма;

3 ("К") - количество.



Если параметр не указан, метод возвращает сумму.

Создание таблицы партий с помощью бухгалтерского запроса

Сформируем в модуле документа «Амортизация» бухгалтерский запрос и заполним таблицу бухгалтерских партий.

Обратите внимание на порядок вызова методов ИспользоватьСубконто() -он должен соответствовать иерархии субконто на счетах указанных в методе ВыполнитьЗапрос(). Порядок вложенности циклов выборки бухгалтерских итогов методами ВыбратьСубконто() и ПолучитьСубконто() должен соответствовать последовательности установки фильтров по субконто методом ИспользоватьСубконто().

В процедуре Партии(ЗначениеОборудования) мы сформируем таблицу партий оборудования, по которым конечное сальдо больше нуля. При вызове процедуры в параметр надо передать значение оборудования, по которому необходимо получить партии.



Перем ТаблицаБухгПартий, Ит;

Процедура Партии(ЗначениеОборудования)

Если ПустоеЗначение(ТаблицаБухгПартий)=0 Тогда

ТаблицаБухгПартий.УдалитьСтроки();

КонецЕсли;

Ит = СоздатьОбъект("БухгалтерскиеИтоги");

Ит.ИспользоватьСубконто(ВидыСубконто.Оборудование, ЗначениеОборудования, 2);// Отбор

Ит.ИспользоватьСубконто(ВидыСубконто.Партия,, 1);

Ит.ВыполнитьЗапрос(НачКвартала(ДатаДок),ДатаДок,"ОБ.ПР",,,1,,"СК");

X. Основы построения «Бухгалтерского учёта» в системе 1С:Предприятие________ 163

// Цикл по субконто 1 (Оборудование) не делаем,

// т.к. указан отбор по субконто

Ит.ВыбратьСубконто(2);

Пока Ит.ПолучитьСубконто(2) = 1 Цикл

ТаблицаБухгПартий.НоваяСтрока();

ТаблицаБухгПартий.Партия=Ит.Субконто(2);

// Сальдо конечное дебетовое;

ТаблицаБухгПартий.СКДСум = Ит.СКД();

ТаблицаБухгПартий.СКДКол = Ит.СКД(З);

КонецЦикла;

КонецПроцедуры

Ит=СоздатьОбъект("БухгалтерскиеИтоги»); Ит.ИспользоватьПланСчетов(ПланыСчетов.Учебный); ТаблицаБухгПартий=Создать0бъект("ТаблицаЗначений"); ТаблицаБухгПартий.НоваяКолонка("Партия"); ТаблицаБухгПартий.НоваяКолонка("СКДСум"); ТаблицаБухгПартий.НоваяКолонка("СКДКол");



164______________________ 1С:Предприятие. Практика программирования не платформе V7

Упражнение 31. Создадим алгоритм формирования операции по документу «Амортизация» с учетом списания оборудования по партиям.

Отредактируем процедуру ОбработкаПроведения() в документе «Амортизация». В цикле выборки строк документа, для списания по бухгалтерским партиям, будем вызывать процедуру Партии(), в цикле выбирать партии из таблицы значений и списывать их по соответствующим счетам.



Так как Оборудование списывается и по оперативному и по бухгалтерскому учету, запрет на списание, если имеется дефицит, надо снять.

Процедура ОбработкаПроведения()

Перем Сообщение1;

Рег=Создать0бъект ( "Регистр. Амортизация" ) ;

ТаблицаПартий=Создать0бъект ( "ТаблицаЗначений" ) ;

Если ИтогиАктуальны()=0 Тогда

Peг.ВременныйРасчет() ;

РассчитатьРегистрыНа(ТекущийДокумент());

КонецЕсли;

ВыбратьСтроки();

Пока ПолучитьСтроку() = 1 Цикл

// Списание по Оперативному учету

// определим списываемое значение

ВсегоСписать=Результат;

X. Основы построения «Бухгалтерского учёта» в системе 1С:Предприятие________ 165

Дефицит=Рег.СводныйОстаток(Оборудование,,"Стоимость")-ВсегоСписать;

Если Дефицит<0 Тогда

Сообщение1="Дефицит по остаткам "+Оборудование+" = "+Дефицит+"!";

Предупреждение(Сообщение1);

Перейти ~БухгалтерскийУчет; // Переход по метке

// Отмена проведения документа //

СтатусВозврата(0);

//Возврат;

КонецЕсли;

Регистр.Амортизация.Оборудование = Оборудование; Регистр.Амортизация.ПривязыватьСтроку(НомерСтроки); Peг.УстановитьФильтр(Оборудование,);

Рег.ВыгрузитьИтоги(ТаблицаПартий,1,1);//Создали партии оборудования   

//ТаблицаПартий.ВыбратьСтроку(); //отладка

Если ТипСписания=Перечисление.ТипыСписания.F1FО Тогда

ТаблицаПартий.Сортировать("Партия",1) ;

ИначеЕсли ТипСписания=Перечисление.ТипыСписания.LIFO Тогда

ТаблицаПартий.Сортировать("Партия -") ;

Иначе // по средней себестоимости

//Алгоритм списания по средней себестоимости Регистр.Амортизация.Количество =



Результат*Рег.СводныйОстаток(Оборудование,,"Количество")/ Peг.СводныйОстаток(Оборудование,,"Стоимость") ;

Регистр.Амортизация.Стоимость= Результат;

Регистр.Амортизация.ДвижениеРасходВыполнить();

Продолжить;

КонецЕсли;

// Списание по партиям оперативного учета

ТаблицаПартий.ВыбратьСтроки();

Пока ТаблицаПартий.ПолучитьСтроку()=1 Цикл

Регистр.Амортизация.Партия = ТаблицаПартий.Партия;

Если ТаблицаПартий.Стоимость<=ВсегоСписать Тогда

//Партию списываем целиком и уменьшим списываемое значение

Регистр.Амортизация.Количество = ТаблицаПартий.Количество;

Регистр.Амортизация.Стоимость= ТаблицаПартий.Стоимость; ВсегоСписать=ВсегоСписать-ТаблицаПартий.Стоимость;

166______________________ 1С:Предприятие. Практика программирования на платформе V7

Иначе

//С партии списываем списываемое значение целиком и обнуляем его

Регистр.Амортизация.Количество = ВсегоСписать* ТаблицаПартий.Количество/ТаблицаПартий.Стоимость; Регистр.Амортизация.Стоимость = ВсегоСписать;

ВсегоСписать=0;

КонецЕсли;

Регистр.Амортизация.ДвижениеРасходВыполнить();

//Проверим: всё ли списали?

Если ВсегоСписать <=0 Тогда

Прервать;

КонецЕсли;

КонецЦикла;

// Списание по Бухгалтерскому учету

// определим списываемое значение

// Установим метку безусловного перехода

ухгалтерскийУчет: Списать=Результат;

Партии(Оборудование);

// Проверим Сальдо по сумме

Дефицит=ТаблицаБухгПартий.Итог("СКДСум")-Списать;

Если Дефицит<0 Тогда

Сообщить("Бухгалтерский дефицит по оборудованию " + Оборудование+" = "+Дефицит ) ;

// Операцию не формировать

Продолжить;

КонецЕсли;

Если ТипСписания=Перечисление.ТипыСписания.FIFO Тогда

ТаблицаБухгПартий.Сортировать("Партия",1);

ИначеЕсли ТипСписания=Перечисление.ТипыСписания.LIFO Тогда

ТаблицаВухгПартий.Сортировать("Партия -") ;

Иначе // по средней себестоимости

//Алгоритм списания по средней себестоимости Операция.НоваяПроводка();

X. Основы построения «Бухгалтерского учёта» в системе 1С:Предприятие________ 167



Операция.Кредит.Счет=СчетПоКоду("ОБ.ПР",ПланыСчетов.Учебный);

Операция.Кредит.Оборудование = Оборудование;

Операция.Кредит.Партия = ТекущийДокумент();

Операция.Дебет.Счет=СчетПоКоду("ОБ.СП".ПланыСчетов.Учебный);

Операция.Дебет.Оборудование = Оборудование;

Операция.Количество=Результат* ТаблицаБухгПартий.Итог("СКДКол")/ ТаблицаБухгПартий.Итог("СКДСум");

Операция.Сумма = Результат;

Продолжить;

КонецЕсли;

// Списание по партиям Бухгалтерского учета ТаблицаБухгПартий.ВыбратьСтроки();

Пока ТаблицаБухгПартий.ПолучитьСтроку()=1 Цикл

Операция.НоваяПроводка();

Операция.Кредит.Счет=СчетПоКоду("ОБ.ПР", ПланыСчетов.Учебный);

Операция.Кредит.Оборудование = Оборудование;

Операция.Кредит.Партия = ТаблицаБухгПартий.Партия;

Операция.Дебет.Счет=СчетПоКоду("ОБ.СП".ПланыСчетов.Учебный);

Операция.Дебет.Оборудование = Оборудование;

Операция.ТипУчета = ТаблицаБухгПартий.Партия.ТипУчета;

Если ТаблицаБухгПартий.СКДСум <=Списать Тогда

Операция.Количество= ТаблицаБухгПартий.СКДКол;

Операция.Сумма = ТаблицаБухгПартий. СКДСум;

Списать = Списать -ТаблицаБухгПартий. СКДСум;

Иначе

Операция.Количество= Списать*

ТаблицаБухгПартий.СКДКол/ТаблицаБухгПартий.СКДСум;

Операция. Сумма = Списать;

Списать = 0;

168______________________ 1С:Предприятив. Практика программирования на платформе V7

КонецЕсли;

//Проверим: всё ли списали?

Если Списать <=0 Тогда

Прервать;

КонецЕсли;

КонецЦикла;

КонецЦикла;

Операция.Содержание = "Списание оборудования";

Операция.СуммаОперации = Итог("Результат");

Операция.Записать();

КонецПроцедуры

Вопросы для самоконтроля

Что общего у бухгалтерского и оперативного учета?

Чем отличается бухгалтерский учет от учета на оборотных регистрах?

Чем отличается бухгалтерский учет от учета на регистрах остатков?

Что представляет из себя служебный объект Бухгалтерские Итоги?

XI. Основы построения объектов компоненты «Расчет»__________________________ 169


Содержание раздела