НаборЗаписейПерерасчета = РегистрыРасчета.Начисления.Перерасчеты.Перерасчет.СоздатьНаборЗаписей();
НаборЗаписейПерерасчета.Отбор.ОбъектПерерасчета.Значение = Регистратор;
НаборЗаписейПерерасчета.Записать();
КонецЦикла;
КонецПроцедуры [360]
В самом начале процедуры мы выбираем запросом данные о записях перерасчетов, содержащие переданный вид расчета и сгруппированные по объекту перерасчета. Далее, при обходе результата запроса, мы формируем для каждого объекта перерасчета список сотрудников, читаем соответствующие записи регистра расчета и вызываем процедуру "РасчитатьНачисления", которая использовалась нами при расчете записей документа "НачисленияСотрудникам". После того, как расчет записей выполнен, мы записываем набор записей без формирования записей перерасчета и очищаем записи перерасчета по тому объекту перерасчета, который только что обработали.
Запустим 1С:Предприятие и проверим, как выполняется перерасчет записей регистра расчета.
Отменим проведение всех документов "Начисления сотрудникам" и проведем документ Начисления сотрудникам №1 и затем №2. Сформируем отчет "Начисления сотрудникам" (здесь и далее колонки отчета с 4 по 6 скрыты, в целях экономии места):
Теперь откроем документ Начисления сотрудникам №1, изменим оклад Гусакова на 10 000 и проведем документ. В отчете [361] "НачисленияСотрудникам" нажмем кнопку "Перерасчитать". Будет выполнен перерасчет начисления премии Гусакову и Деловому:
Результат работы отчета будет содержать новые значения премии Гусакова:
И, наконец, проведем документ Начисления сотрудникам №3 и нажмем "Перерасчет" в отчете "НачисленияСотрудникам". Снова будет произведен перерасчет оклада и премии Гусакова:
А данные отчета будут содержать актуальные значения начисления оклада и премии:
[363]