Как отредактировать регистры плановых начислений и интервальные регистры в 1С:ЗУП 3.1?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

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

Почему регистр «Плановые начисления» открывает документ-регистратор?

Для начала рассмотрим саму структуру регистра ПлановыеНачисления. Этот регистр сведений является подчиненным регистратору. Это означает, что записи в нем не существуют сами по себе — они жестко привязаны к документу, который их сформировал (например, «Прием на работу», «Кадровый перевод», «Изменение оплаты труда»).

Когда вы пытаетесь отредактировать строку прямо в списке регистра (нажав F2), платформа 1С автоматически открывает документ-регистратор, так как с точки зрения архитектуры системы изменять такие данные следует только путем перепроведения или редактирования исходного документа. Прямое изменение данных в списке для таких регистров недоступно.

Поиск и обход скрытых блокировок: Дата запрета редактирования

Иногда при написании собственной обработки для корректировки набора записей регистра мы сталкиваемся с ошибкой записи или отказом в доступе. Даже если у пользователя установлены полные права, платформа может блокировать транзакцию. Выясним причину этой проблемы. Чаще всего блокировка вызвана механизмом Дата запрета редактирования.

Если вы пишете обработку, которая должна точечно исправить записи в закрытом периоде, вам потребуется обойти этот запрет программно. Рассмотрим, как это сделать с помощью свойства ОбменДанными.Загрузка:


НаборЗаписей = РегистрыСведений.ПлановыеНачисления.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка);
НаборЗаписей.Прочитать();

Для Каждого Запись Из НаборЗаписей Цикл
    // Вносим необходимые изменения
    Запись.Размер = НовыйРазмерНачисления;
КонецЦикла;

// Отключаем проверки платформы, включая дату запрета редактирования
НаборЗаписей.ОбменДанными.Загрузка = Истина;
НаборЗаписей.Записать();

Обратите внимание: установка ОбменДанными.Загрузка = Истина отключает не только проверку даты запрета, но и контроль логики проведения (проверку дублей, полноты заполнения измерений и т.д.). Используйте этот метод с максимальной осторожностью.

Специфика работы с интервальными регистрами

Теперь проанализируем регистр ПлановыеНачисленияИнтервальный. Интервальные регистры в ЗУП 3.1 были внедрены для существенного ускорения работы отчетов и расчетов. Они содержат «свернутые» и подготовленные интервалы действия начислений.

Почему этот регистр не правится напрямую? Ответ кроется в логике системы: данные в интервальных регистрах автоматически генерируются на основе записей основных регистров. Если вы программно изменили записи в регистре ПлановыеНачисления, вам необходимо инициировать обновление интервального регистра. Посмотрим на пример кода, как это делается правильно:


// МассивСотрудников должен содержать ссылки на сотрудников, по которым были изменения
МассивСотрудников = Новый Массив;
МассивСотрудников.Добавить(СотрудникСсылка);

// Вызываем типовой метод для обновления интервалов
ИнтервальныеРегистрыСведений.ОбновитьИнтервалыРегистровСотрудников(МассивСотрудников);

Если вы попытаетесь редактировать интервальный регистр отдельной обработкой в отрыве от основного, при любом следующем кадровом документе по этому сотруднику система просто перепишет ваши изменения, заново сформировав интервалы из основного регистра.

Редактирование без программирования: Документ «Перенос данных»

Рассмотрим альтернативный, более "безопасный" вариант исправления данных, который часто рекомендуют при разборе полетов. Это использование стандартного документа Перенос данных.

  1. Документ позволяет выступать универсальным регистратором для любых регистров накопления и сведений.
  2. Если вам нужно добавить новые данные, вы просто выбираете нужный регистр и вносите строки.
  3. Если вам нужно исправить уже существующие записи, следует руководствоваться каноничным правилом учета: старые записи не удаляются, а перекрываются новыми (сторно) или исправляются новыми записями, которые система будет считать более актуальными (в зависимости от регистра).

При работе с плановыми начислениями в документе «Перенос данных» учтите, что создание новой записи с теми же измерениями, что и у оригинального кадрового документа, может создать конфликт (движения-двойники). Поэтому исправлять лучше созданием записей, сторнирующих старые и устанавливающих новые значения, либо аккуратной программной очисткой движений конкретного документа-ошибки и вводом нового "Переноса данных".

Важный нюанс: Инциденты перерасчета и кэш системы

Проанализируем еще одну скрытую проблему программного изменения записей. В ЗУП 3.1 активно используется механизм отслеживания изменений для автоматического перерасчета зарплаты. Если вы изменили данные напрямую в регистре ПлановыеНачисления через НаборЗаписей, система не зарегистрирует так называемый «инцидент перерасчета».

В результате при начислении зарплаты за текущий месяц программа может рассчитать сотрудника по старым правилам, опираясь на внутренний кэш и вспомогательные таблицы. Чтобы этого избежать, после программной корректировки регистров необходимо зарегистрировать необходимость перерасчета. Сделать это можно в разделе «Зарплата» -> «Сервис» -> «Перерасчеты», добавив нужного сотрудника вручную, либо программно вызвав регистрацию перерасчета для данного физического лица.

Резюме действий

Подведем итоги совместной работы над проблемой. Чтобы корректно изменить данные плановых начислений:

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