В процессе расчетного учета в конфигурации «1С:Управление производственным предприятием» нередко возникают ситуации, когда документ формирует некорректные записи в регистре расчета ОсновныеНачисленияРаботниковОрганизаций. Если расчетный месяц уже закрыт, отменять проведение исходного документа и перепроводить цепочку расчетов нельзя, так как это приведет к изменению регламентированной отчетности и нарушению границы запрета изменения данных. Разберем, почему формируются подобные записи и какими способами можно скорректировать регистр расчета без перепроведения документов.
Прежде чем приступать к исправлению данных, проанализируем штатную логику конфигурации. Появление вида расчета Дни, неоплачиваемые согласно табелю при проведении документа Табель учета рабочего времени в большинстве случаев является заложенным поведением платформы и механизма вытеснения:
Если же запись появилась из-за ошибочной кастомизации алгоритмов проведения документа или сбоя и ее действительно необходимо убрать, рассмотрим варианты ручной и программной корректировки.
В конфигурациях на базе обычных форм (включая 1С:УПП и 1С:ЗУП 2.5) документ Перенос данных позволяет напрямую вносить корректирующие записи в любые регистры, включая регистры расчета.
Разберем по шагам, как сторнировать ошибочную запись:
Перенос данных.Основные начисления работников организаций.Истина и укажем отрицательные значения отработанного времени или суммы (если требуется нивелировать числовые показатели).Если требуется точечно удалить или исправить ошибочные движения закрытого регистратора без создания дополнительных корректирующих документов, используем внешнюю обработку и объектную модель платформы 1С:Предприятие.
Посмотрим на пример программного кода, выполняющего чтение, модификацию и запись движений по конкретному регистратору:
// Получаем ссылку на исходный закрытый документ
ДокументСсылка = Документы.ТабельУчетаРабочегоВремени.НайтиПоНомеру("ТБ00000001", Дата("20240131"));
Если ЗначениеЗаполнено(ДокументСсылка) Тогда
// Создаем набор записей регистра расчета
НаборЗаписей = РегистрыРасчета.ОсновныеНачисленияРаботниковОрганизаций.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка);
// Считываем текущие движения
НаборЗаписей.Прочитать();
Индекс = НаборЗаписей.Количество() - 1;
Пока Индекс >= 0 Цикл
СтрокаЗаписи = НаборЗаписей[Индекс];
// Находим ошибочный вид расчета и удаляем строку
Если СтрокаЗаписи.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НеоплачиваемыеДниПоТабелю Тогда
НаборЗаписей.Удалить(Индекс);
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
// Записываем набор с обязательным пересчетом фактического периода действия
Попытка
НаборЗаписей.Записать(Истина);
Сообщить("Движения успешно скорректированы.");
Исключение
Сообщить("Ошибка при записи набора: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Важное ограничение платформы: при вызове метода Записать() для регистра расчета критически важно передавать параметр Истина: НаборЗаписей.Записать(Истина). Если передать Ложь или не выполнить пересчет фактического периода действия, записи в служебных таблицах действия станут невалидными, что нарушит работу графиков и механизма вытеснения.
При выполнении любых правок в закрытых периодах учитываем следующие особенности:
Перерасчеты для выявления возможных зависимых начислений, требующих актуализации в текущем открытом месяце.