Сформируем список сотрудников
ТаблЗнач = Запрос.Выполнить().Выгрузить(); МассивСотрудников = ТаблЗнач.ВыгрузитьКолонку(" Сотрудник"); СписокСотрудников = Новый СписокЗначений; СписокСотрудников.ЗагрузитьЗначения(МассивСотрудников); РасчитатьНачисления(Движения.Начисления, ПланыВидовРасчета.ОсновныеНачисления.Оклад, СписокСотрудников); Движения.Начисления.Записать(, Истина); РасчитатьНачисления(Движения.Начисления, ПланыВидовРасчета.ОсновныеНачисления.Премия, СписокСотрудников); Движения.Начисления.Записать(, Истина);
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Обратите внимание: при проведении документа сначала записываем движения, сформированные документом, в регистр, а затем передаем этот набор записей регистра в процедуру расчета. Сначала для расчета первичных записей (Оклад), а затем для расчета вторичных (Премия). Процедура расчета на основе описанных в ней алгоритмов и данных, содержащихся в записях регистра, должна сформировать значения ресурсов регистра. После того, как ресурсы будут рассчитаны, мы перезаписываем набор записей регистра без формирования записей перерасчета (второй параметр в методе Записать() ― Истина). Перед вызовом процедуры из общего модуля мы формируем список сотрудников, содержащихся в документе, чтобы передать его в вызываемую процедуру. Теперь создадим в ветке Общие новый общий модуль ПроведениеРасчетов. Укажем, что он будет глобальный, установив соответствующий флажок. Добавим в него заготовку процедуры РасчитатьНачисления (листинг 17.3).
Листинг 17.3. Заготовка процедуры РасчитатьНачисления Процедура РасчитатьНачисления(НаборЗаписейРегистра, ТребуемыйВидРасчета, СписокСотрудников) Экспорт
Регистратор = НаборЗаписейРегистра.Отбор.Регистратор.Значение;
// Рассчитать первичные записи Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда
// Рассчитать вторичные записи ИначеЕсли ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Премия Тогда КонецЕсли;
КонецПроцедуры
Алгоритм расчета начислений будет различным при расчете первичных и вторичных записей, и каждая из его частей будет находиться в своей ветке условия Если... При расчете первичных записей нам понадобятся данные графика из регистра расчета, поэтому добавим в первую ветку условия запрос по виртуальной таблице регистра расчета РегистрРасчета.Начисления.ДанныеГрафика (листинг 17.4).
Листинг 17.4 Изменение процедуры РасчитатьНачисления Процедура РасчитатьНачисления(НаборЗаписейРегистра, ТребуемыйВидРасчета, СписокСотрудников) Экспорт
Регистратор=НаборЗаписейРегистра.Отбор.Регистратор.Значение;
// Рассчитать первичные записи Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда
Запрос = Новый Запрос; Запрос.Текст =
|