Как программно изменить регистр сведений в закрытом периоде в 1С:УПП 1.3

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

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

Причины блокировки редактирования регистра сведений

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

  1. Режим записи регистра: Если у регистра сведений установлен режим Подчинение регистратору, его невозможно отредактировать напрямую или созданием независимого набора записей. Все изменения формируются исключительно при проведении или отмене проведения документа-регистратора.
  2. Проверка даты запрета изменения данных: Для периодических регистров сведений проверка выполняется платформой и прикладным кодом по полю Период. В типовых конфигурациях, таких как УПП 1.3, в подписках на событие ПередЗаписью срабатывает модуль контроля дат запрета. Если дата записи попадает в закрытый период, выполнение операции прерывается.
  3. Ограничения прав доступа (RLS): Даже при отсутствии даты запрета платформа может заблокировать запись, если у текущей роли пользователя отсутствуют права на изменение конкретных организаций, подразделений или других разрезов учета.

Способ 1. Использование свойства ОбменДанными.Загрузка = Истина

Для независимых регистров сведений наиболее эффективным программным решением является применение свойства ОбменДанными.Загрузка у объекта НаборЗаписей. Установка этого флага в значение Истина отключает выполнение прикладных обработчиков событий (таких как ПередЗаписью и ПриЗаписи), а также связанных подписок на события, в которых зашита проверка даты запрета изменений.

Рассмотрим пример кода для записи изменений в независимый регистр сведений:


НаборЗаписей = РегистрыСведений.ИмяРегистра.СоздатьНаборЗаписей();

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

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

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

// Записываем набор
НаборЗаписей.Записать();

Важное замечание: Свойство ОбменДанными.Загрузка = Истина отключает только алгоритмы конфигурации. Оно не позволяет обойти ограничение прав доступа платформы (RLS). Если у пользователя нет прав на запись объекта, система вызовет ошибку прав доступа.

Способ 2. Обход прав доступа и системных ограничений

Если для выполнения операции не хватает прав текущего пользователя или требуются административные полномочия, проанализируем следующие варианты:

  1. Привилегированный режим: Вызов метода УстановитьПривилегированныйРежим(Истина) или выполнение кода в общем модуле с установленным флагом Привилегированный позволяет обойти проверки RLS и записать данные от имени системы.
  2. Временное точечное смещение даты запрета: Пользователь с правами администратора может перейти в меню Сервис — Установка даты запрета изменения данных, временно снять ограничение для конкретного пользователя или раздела учета, выполнить корректировку и вернуть дату запрета в исходное положение.

Способ 3. Корректировка подчиненных регистров

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

  1. Документ «Корректировка записей регистров»: Это специализированный документ, позволяющий внести движения в любые регистры сведений и накопления текущей датой без перепроведения первичного документа-регистратора за прошлый период.
  2. Ввод новой записи с текущей датой: Для периодических регистров сведений часто не требуется менять историческую запись. Достаточно ввести новую запись с датой начала текущего (открытого) периода. В этом случае функция СрезПоследних() на текущую дату начнет возвращать обновленные данные, а история прошлых периодов останется неизменной.

Влияние изменений в регистре сведений на бухгалтерский и управленческий учет

Выясним, изменится ли оборотно-сальдовая ведомость (ОСВ) при изменении записей регистра сведений в закрытом периоде:

В конфигурациях 1С данные бухгалтерского и налогового учета (проводки) хранятся в регистрах бухгалтерии, а количественный и оперативный учет — в регистрах накопления. Сам по себе независимый регистр сведений не формирует проводок в бухгалтерском учете. Поэтому прямое изменение записи в регистре сведений не приводит к изменению оборотно-сальдовой ведомости и расчетов с контрагентами.

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

← На главную