Механизм запрета редактирования прошлых периодов предназначен для защиты закрытых бухгалтерских и управленческих периодов от случайных или несанкционированных правок. Однако при необходимости внести корректировки задним числом администраторы и разработчики сталкиваются с ситуацией, когда найти пункт меню или полностью снять блокировку не удается. В конфигурациях на обычных формах (таких как 1С:Управление торговлей 10.3 или 1С:Управление производственным предприятием 1.3) логика хранения и применения этих границ имеет свои особенности. Разберем по шагам все способы отключения даты запрета, выясним причины ее сохранения и рассмотрим программные методы обхода ограничений.
Для отключения контроля стандартными средствами программы воспользуемся встроенной обработкой настройки. Рассмотрим алгоритм действий:
01.01.0001 0:00:00).Иногда форма настройки недоступна в интерфейсе или требуется напрямую очистить сохраненные данные. Границы запрета в типовых конфигурациях хранятся в специализированном регистре. Проанализируем этот путь:
Границы запрета изменения данных и откроем его.Ctrl + A, затем Delete).После удаления строк регистр станет пустым, что снимет все зафиксированные границы на уровне базы данных.
В конфигурациях на обычных формах проверка даты запрета оптимизирована для быстродействия: при старте системы данные из регистра считываются и упаковываются в специальный параметр сеанса. Если требуется программно очистить границу в текущем контексте или из внешней обработки, обратимся к параметрам сеанса напрямую или используем типовые процедуры общих модулей (например, модуля ПолныеПрава).
Посмотрим на пример программного сброса значения параметра сеанса в текущем подключении:
// Сброс значения параметра сеанса, хранящего границы запрета
ПараметрыСеанса.ГраницыЗапретаИзмененияДанных = Новый ХранилищеЗначения(Неопределено, Новый СжатиеДанных(0));
Если в конфигурации реализована экспортная процедура очистки, вызовем ее из общего модуля:
// Вызов типовой процедуры очистки границ (для конфигураций УПП / УТ)
ПолныеПрава.ОчиститьГраницыЗапрета();
Очень часто администраторы очищают дату в интерфейсе или регистре, но пользователи по-прежнему получают сообщение об ошибке: «Редактирование данных этого периода запрещено». Выясним причину такого поведения платформы.
Значение ПараметрыСеанса.ГраницыЗапретаИзмененияДанных кэшируется в оперативной памяти сервера 1С индивидуально для каждого сеанса в момент входа. Платформа не выполняет автоматическую рассылку обновленных параметров в другие работающие клиенты. Соответственно, все уже открытые сеансы пользователей продолжают работать со старыми границами запрета.
Для применения изменений выполним одно из следующих действий:
В практической работе не всегда требуется отключать дату запрета для всего предприятия. Рассмотрим сценарии, позволяющие скорректировать данные закрытого периода более точечно:
ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();
ДокументОбъект.ОбменДанными.Загрузка = Истина;
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
ОбменДанными.Загрузка = Истина отключает типовые проверки в модуле объекта и модуле набора записей, в том числе проверку границ запрета изменения.УстановитьПривилегированныйРежим(Истина), что позволит обойти ряд ограничений прав доступа и проверок периода.