// Посчитаем все начисления текущего сотрудника за январь: ВсегоНачислено = 0; ЖЗ.ВыбратьЗаписиПоОбъекту (ТекСотр, ДатаНач, ДатаКон); Пока ЖЗ.ПолучитьЗапись()=1 Цикл Если ЖЗ.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления)=1 Тогда ВсегоНачислено = ВсегоНачислено + ЖЗ.Результат; КонецЕсли; КонецЦикла; // Теперь рассчитаем все записи текущего сотрудника, введеные в текущем месяце: ЖЗ.ВыбратьПериодПоОбъекту (ТекСотр, ДатаНач); Пока ЖЗ.ПолучитьЗапись()=1 Цикл ЖЗ.Рассчитать(); КонецЦикла; /// Рассчитаем все записи по документу, независимо от того, в каком расчетном периоде записи порождались: ЖЗ.ВыбратьЗаписиПоДокументу (ВыбрДокумент); Пока ЖЗ.ПолучитьЗапись()=1 Цикл ЖЗ.Рассчитать(); КонецЦикла; // Рассчитаем все записи по указанному подразделению. В журнале расчетов указана графа отбора "Подразделение". ТекПер = ЖЗ.ТекущийПериод(); ЖЗ.ВыбратьПоЗначению ("Подразделение",ВыбрПодразделение, ТекПер, ТекПер); Пока ЖЗ.ПолучитьЗапись()=1 Цикл ЖЗ.Рассчитать(); КонецЦикла;
//Начало, Конец - начало и конец периода //Периодичность - строка "День", "Месяц", "Неделя", "Год", "Квартал" //Возвращает таблицу значений с колонками: // Начало - начало интервала // Конец - конец интервала // Номер - номер интервала (начиная с единицы) Функция обПериодыЗаИнтервал(Начало, Конец, Периодичность="День", ВыравниваниеПоПериоду=истина) Перем Р, Номер, ТекПериод, СледПериод; Р=Новый ТаблицаЗначений(); Р.Колонки.Добавить("Начало"); Р.Колонки.Добавить("Конец"); Р.Колонки.Добавить("Номер"); ТекПериод=Начало; Номер=1; Пока истина Цикл Если Периодичность="День" Тогда Если ВыравниваниеПоПериоду Тогда ТекПериод=НачалоДня(ТекПериод); СледПериод=КонецДня(ТекПериод); Иначе СледПериод=обДобавитьДни(ТекПериод, 1); КонецЕсли; ИначеЕсли Периодичность="Месяц" Тогда Если ВыравниваниеПоПериоду Тогда ТекПериод=НачалоМесяца(ТекПериод); СледПериод=КонецМесяца(ТекПериод); Иначе СледПериод=обДобавитьМесяцы(ТекПериод, 1); КонецЕсли; ИначеЕсли Периодичность="Год" Тогда Если ВыравниваниеПоПериоду Тогда ТекПериод=НачалоГода(ТекПериод); СледПериод=КонецГода(ТекПериод); Иначе СледПериод=обДобавитьМесяцы(ТекПериод, 12); КонецЕсли; ИначеЕсли Периодичность="Квартал" Тогда Если ВыравниваниеПоПериоду Тогда ТекПериод=НачалоКвартала(ТекПериод); СледПериод=КонецКвартала(ТекПериод); Иначе СледПериод=обДобавитьМесяцы(ТекПериод, 3); КонецЕсли; ИначеЕсли Периодичность="Неделя" Тогда Если ВыравниваниеПоПериоду Тогда ТекПериод=НачалоНедели(ТекПериод); СледПериод=КонецНедели(ТекПериод); Иначе СледПериод=обДобавитьДни(ТекПериод, 7); КонецЕсли; Иначе ВызватьИсключение "Неизвестная периодичность времени:"+Периодичность; КонецЕсли; Если ТекПериод>Конец И НЕ Номер=1 Тогда Прервать; КонецЕсли; Стр=Р.Добавить(); Стр.Начало=ТекПериод; Стр.Конец=СледПериод; Стр.Номер=Номер; ТекПериод=СледПериод+1; //Переходим на следующий период (добавляем одну секунду) Номер=Номер+1; КонецЦикла; Возврат Р; КонецФункции