При работе в типовых конфигурациях 1С пользователи и администраторы часто сталкиваются с ситуацией, когда требуется отразить актуальные изменения по сотруднику (например, сменить банковский счет или скорректировать невыход из-за досрочного выхода из отпуска), но программа выдает ошибку о блокировке данных датой запрета редактирования. Попытки просто убрать объект из подписок на события обычно не приводят к желаемому результату, а выдача полных прав несет серьезные риски для целостности учета. Разберем методологические и технические подходы к решению этой задачи.
Прежде чем вмешиваться в программный код или снимать запреты, проанализируем, почему типовая конфигурация блокирует подобные действия и как выполнить задачу штатными средствами учетной системы.
Неоплачиваемый невыход). Если сотрудник вышел из отпуска раньше установленного срока, правильный порядок действий следующий:
В текущем открытом расчетном периоде создается специализированный документ прекращения отсутствия (например, Возврат из отпуска по уходу) или используется штатный механизм исправления (гиперссылка Исправить в левом нижнем углу исходного документа). Это позволяет программе автоматически сторнировать ненужные дни и корректно пересчитать начисления в текущем периоде без нарушения закрытой отчетности.
Если специфика учета все же требует разрешения правок определенным сотрудникам, рассмотрим штатные возможности подсистемы дат запрета изменения:
Выясним причину, по которой удаление объекта из источников подписки на событие не отключает проверку. Подсистема «Даты запрета изменения» в составе Библиотеки стандартных подсистем (БСП) имеет многоуровневую структуру:
ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере, которая блокирует редактирование элементов формы независимо от подписок.ДатыЗапретаИзмененияПереопределяемый в процедуре ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения.Если требуется разово или в рамках автоматической обработки выполнить запись объекта без учета даты запрета, разберем корректные программные механизмы БСП.
1. Использование дополнительных свойств объекта перед записью:
ОбъектДанных = СсылкаНаОбъект.ПолучитьОбъект();
ОбъектДанных.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения", Истина);
ОбъектДанных.Записать();
2. Временное отключение проверки в привилегированном коде:
Если обработка выполняется на сервере и необходимо выполнить групповые операции, используем вызов специального метода подсистемы:
ДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета(Истина);
Попытка
// Выполняем запись необходимых объектов
Объект.Записать();
Исключение
ДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета(Ложь);
ВызватьИсключение;
КонецПопытки;
ДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета(Ложь);
3. Использование расширения конфигурации:
В общем модуле ДатыЗапретаИзмененияПереопределяемый предусмотрена процедура ПередПроверкойЗапретаИзменения. С помощью механизма расширений можно переопределить логику проверки для конкретных типов справочников или документов, не снимая конфигурацию с поддержки.