Как изменить кадровые документы и банковские счета при установленной дате запрета изменения в 1С

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

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

Методологическое решение: правильный учет без изменения закрытых периодов

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

  1. Корректировка кадровых документов и невыходов. В кадровом и зарплатном учете не принято напрямую редактировать документы прошлого закрытого периода (например, документ Неоплачиваемый невыход). Если сотрудник вышел из отпуска раньше установленного срока, правильный порядок действий следующий:

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

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

Штатная настройка дат запрета без выдачи полных прав

Если специфика учета все же требует разрешения правок определенным сотрудникам, рассмотрим штатные возможности подсистемы дат запрета изменения:

  1. Настройка запрета по разделам. Механизм позволяет разделять даты запрета для разных подсистем (например, отдельно для разделов «Бухгалтерский учет», «Кадровый учет» и «Зарплата»). Таким образом, бухгалтерский учет может оставаться закрытым, в то время как кадровые документы будут доступны для редактирования.
  2. Настройка запрета по пользователям. Вместо назначения роли с полными правами можно настроить индивидуальные даты запрета для конкретного пользователя или группы пользователей, установив им меньший период ограничения или динамическую отсрочку в днях.

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

Выясним причину, по которой удаление объекта из источников подписки на событие не отключает проверку. Подсистема «Даты запрета изменения» в составе Библиотеки стандартных подсистем (БСП) имеет многоуровневую структуру:

  1. Проверка на уровне интерфейса. При открытии формы срабатывает процедура ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере, которая блокирует редактирование элементов формы независимо от подписок.
  2. Регистрация источников. Список проверяемых объектов определяется внутри общего модуля ДатыЗапретаИзмененияПереопределяемый в процедуре ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения.
  3. Контроль на уровне прав. Запрет может дублироваться ограничениями доступа на уровне записей (RLS) или специализированными ролями.

Программные способы обхода даты запрета для служебных алгоритмов

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

1. Использование дополнительных свойств объекта перед записью:


ОбъектДанных = СсылкаНаОбъект.ПолучитьОбъект();
ОбъектДанных.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения", Истина);
ОбъектДанных.Записать();

2. Временное отключение проверки в привилегированном коде:

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


ДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета(Истина);
Попытка
    // Выполняем запись необходимых объектов
    Объект.Записать();
Исключение
    ДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета(Ложь);
    ВызватьИсключение;
КонецПопытки;
ДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета(Ложь);

3. Использование расширения конфигурации:

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

← На главную