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