Как отредактировать регистр расчета Основные начисления в закрытом периоде 1С:УПП

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет Промышленность, строительство и АПК
← На главную

В процессе расчетного учета в конфигурации «1С:Управление производственным предприятием» нередко возникают ситуации, когда документ формирует некорректные записи в регистре расчета ОсновныеНачисленияРаботниковОрганизаций. Если расчетный месяц уже закрыт, отменять проведение исходного документа и перепроводить цепочку расчетов нельзя, так как это приведет к изменению регламентированной отчетности и нарушению границы запрета изменения данных. Разберем, почему формируются подобные записи и какими способами можно скорректировать регистр расчета без перепроведения документов.

Штатная логика механизма вытеснения: почему появляется вид расчета «Дни, неоплачиваемые согласно табелю»

Прежде чем приступать к исправлению данных, проанализируем штатную логику конфигурации. Появление вида расчета Дни, неоплачиваемые согласно табелю при проведении документа Табель учета рабочего времени в большинстве случаев является заложенным поведением платформы и механизма вытеснения:

  1. Когда по сотруднику в расчетном периоде уже зарегистрировано невыходное отклонение (например, начисление по среднему заработку за время командировки, оплата больничного листа или отпуска), табель фиксирует это время специальным видом расчета.
  2. Этот вид расчета необходим для корректного вытеснения основного начисления (например, оклада по дням или по часам), чтобы исключить двойную оплату одного и того же периода.
  3. Записи регистра расчета напрямую участвуют в формировании расчетной базы для последующего исчисления среднего заработка. Удаление строк без учета настроек вытеснения может привести к искажению количества отработанных и неотработанных дней в будущем.

Если же запись появилась из-за ошибочной кастомизации алгоритмов проведения документа или сбоя и ее действительно необходимо убрать, рассмотрим варианты ручной и программной корректировки.

Способ 1. Корректировка через документ «Перенос данных»

В конфигурациях на базе обычных форм (включая 1С:УПП и 1С:ЗУП 2.5) документ Перенос данных позволяет напрямую вносить корректирующие записи в любые регистры, включая регистры расчета.

Разберем по шагам, как сторнировать ошибочную запись:

  1. Создадим новый документ Перенос данных.
  2. В настройке состава регистров отметим регистр расчета Основные начисления работников организаций.
  3. В поле Период регистрации укажем текущий (открытый) расчетный месяц, чтобы не сдвигать границу закрытого периода.
  4. В табличной части создадим строку с теми же реквизитами (сотрудник, вид расчета), но в полях Период действия начало и Период действия конец укажем границы закрытого месяца, в котором была допущена ошибка.
  5. Установим флаг Сторно в значение Истина и укажем отрицательные значения отработанного времени или суммы (если требуется нивелировать числовые показатели).
  6. Проведем документ. Механизм перерасчетов свяжет сторнирующую запись с закрытым периодом без изменения исходного табеля.

Способ 2. Программная перезапись набора записей регистра расчета

Если требуется точечно удалить или исправить ошибочные движения закрытого регистратора без создания дополнительных корректирующих документов, используем внешнюю обработку и объектную модель платформы 1С:Предприятие.

Посмотрим на пример программного кода, выполняющего чтение, модификацию и запись движений по конкретному регистратору:


// Получаем ссылку на исходный закрытый документ
ДокументСсылка = Документы.ТабельУчетаРабочегоВремени.НайтиПоНомеру("ТБ00000001", Дата("20240131"));

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

Важное ограничение платформы: при вызове метода Записать() для регистра расчета критически важно передавать параметр Истина: НаборЗаписей.Записать(Истина). Если передать Ложь или не выполнить пересчет фактического периода действия, записи в служебных таблицах действия станут невалидными, что нарушит работу графиков и механизма вытеснения.

Ограничения и даты запрета изменения данных

При выполнении любых правок в закрытых периодах учитываем следующие особенности:

  1. Контроль дат запрета: если в информационной базе включена подсистема «Дата запрета изменения данных», прямая программная запись набора движений документа из закрытого периода будет заблокирована. Для выполнения обработки потребуются полные права либо временное изменение границы запрета для конкретного администратора.
  2. Механизм перерасчетов: после ручного изменения записей регистра расчета рекомендуется проверить таблицу Перерасчеты для выявления возможных зависимых начислений, требующих актуализации в текущем открытом месяце.
← На главную