Формирование набора записей по данным документа Для расчета записей необходимо сначала сформировать набор этих записей в регистре расчета. Это позволит использовать расчетные механизмы платформы. Формирование записей при расчете аналогично рассмотренному выше модулю формирования записей при проведении. Однако если при проведении в качестве набора записей выступали движения доку- мента по регистру (Движения.ОсновыеНачисленияРегл), то при расчете без проведения такой набор необходимо создать.
Ниже приведен модуль, позволяющий сформировать набор записей регистра расчета по данным документа. В тексте используется процедура
ДобавитьСтрокуОсновныхНачислений() , описанная выше. Этот модуль является начальным этапом процедуры
РассчитатьОсновныеНачисления() , которая вызывается при нажатии кнопки Рассчитать в форме документа.
Код 1C v 8.х Процедура РассчитатьОсновныеНачисления() Экспорт
// Расчет записей выполняется в транзакции.
НачатьТранзакцию();
// Создать набор записей регистра расчета
НаборОсновныеНачисления = РегистрыРасчета.ОсновныеНачисленияРегл.
СоздатьНаборЗаписей(); НаборОсновныеНачисления.Отбор.Регистратор.Значение = Ссылка; ВыборкаОсновныеНачисления = ОбщегоНазначения.
СформироватьЗапросПоТабличнойЧасти(ЭтотОбъект, "ОсновныеНачисления").Выбрать();
Пока ВыборкаОсновныеНачисления.Следующий() Цикл
ДобавитьСтрокуОсновныхНачислений(ВыборкаОсновныеНачисления, НаборОсновныеНачисления);
КонецЦикла;
// Расчет записей набора.
// ...
ЗафиксироватьТранзакцию();
КонецПроцедуры // РассчитатьОсновныеНачисления
При формировании набора записей значения ресурсов не играют роли, так как они будут в дальнейшем изменены при расчете. В том числе эти значения могут быть пустыми.
Категория:
Регистры расчета Формирование записей регистра расчета Для формирования записей регистра расчета используется метод Добавить() объекта
РегистрРасчетаНаборЗаписей
Код 1C v 8.2 УП //Формирование записей регистра расчета
// Процедура добавляет запись в регистр основных начислений.
Процедура ДобавитьСтрокуОсновныхНачислений(ДанныеСтроки, НаборЗаписей)
Движение = НаборЗаписей.Добавить();
// Предопределенные поля.
Движение.ПериодРегистрации = ПериодРегистрации;
Движение.ПериодДействияНачало = ДанныеСтроки.ДатаНачало;
Движение.ПериодДействияКонец = ДанныеСтроки.ДатаКонец;
Движение.ВидРасчета = ДанныеСтроки.ВидРасчета;
Движение.Сторно = ДанныеСтроки.Сторно;
// Измерения.
Движение.ФизЛицо = ДанныеСтроки.ФизЛицо; Движение.Организация= Организация;
// Ресурсы.
Движение.Результат = ДанныеСтроки.Результат;
// Реквизиты.
Движение.ГрафикРаботы = ДанныеСтроки.ФизЛицо.ГрафикРаботы;
Движение.Размер = ДанныеСтроки.Размер;
Движение.ВидУчетаВремени = ДанныеСтроки.ВидРасчета.ВидУчетаВремени;
Движение.Подразделение = ДанныеСтроки.Подразделение;
Движение.СтатьяЗатрат = ДанныеСтроки.ВидРасчета.СтатьяЗатрат;
КонецПроцедуры // ДобавитьСтрокуОсновныхНачислений
// Обработка проведения.
Процедура ОбработкаПроведения(Отказ)
Движения.ОсновныеНачисленияРегл.Записывать = Истина; Движения.ДополнительныеНачисленияРегл.Записывать = Истина;
// Сформировать запрос по табличной части при помощи функции общего модуля. ВыборкаОсновныеНачисления = ОбщегоНазначения.
СформироватьЗапросПоТабличнойЧасти(ЭтотОбъект, "ОсновныеНачисления").Выбрать();
// По каждой строке табличной части сформировать запись в регистр. Пока ВыборкаОсновныеНачисления.Следующий() Цикл
ДобавитьСтрокуОсновныхНачислений(ВыборкаОсновныеНачисления, Движения.ОсновныеНачисленияРегл);
настройка алгоритмов расчета
КонецЦикла;
// Запись дополнительных начислений в регистр.
ВыборкаДополнительныеНачисления = ОбщегоНазначения.
СформироватьЗапросПоТабличнойЧасти(ЭтотОбъект, "ДополнительныеНачисления").Выбрать();
Пока ВыборкаДополнительныеНачисления.Следующий() Цикл
ДобавитьСтрокуДополнительныхНачислений(ВыборкаДополнительныеНачисления, Движения.ДополнительныеНачисленияРегл);
КонецЦикла;
КонецПроцедуры // ОбработкаПроведения
Категория:
Регистры расчета