При оформлении первичных документов, таких как Реализация товаров и услуг, часто возникает необходимость вывести в печатную форму данные представителя организации или ответственного лица. Если это поле в документе не заполнено, система по умолчанию выводит пустое значение. Разберем, можно ли решить эту задачу исключительно настройкой прав доступа пользователя без изменения программного кода и какие есть альтернативные проверенные варианты решения.
Проанализируем, почему нельзя решить задачу подстановки ответственного через права пользователя (роли и механизмы RLS):
Ответственный не заполнен при создании документа, алгоритм печати считает из базы пустое значение и выведет его в макет.Таким образом, настроить подстановку значений в печатные формы стандартными правами доступа невозможно — требуется либо настройка параметров пользователя, либо доработка логики системы.
Рассмотрим способ, который не требует программирования и изменения конфигурации. В типовых конфигурациях 1С предусмотрен механизм персональных настроек пользователя.
Разберем порядок действий:
Основной ответственный.Ответственный будет автоматически заполняться текущим пользователем. Соответственно, стандартная печатная форма выведет актуальные данные.Если требуется выводить текущего пользователя на печать только тогда, когда реквизит остался незаполненным, и при этом нельзя менять типовую конфигурацию, разберем вариант с внешней печатной формой.
Внешняя печатная форма подключается через справочник дополнительных обработок. В коде модуля печатной формы прописывается логика проверки реквизита:
Если НЕ ЗначениеЗаполнено(СсылкаНаОбъект.Ответственный) Тогда
ПечатноеЛицо = ПараметрыСеанса.ТекущийПользователь;
Иначе
ПечатноеЛицо = СсылкаНаОбъект.Ответственный;
КонецЕсли;
Такой подход сохраняет конфигурацию на поддержке и гарантирует корректное формирование макета.
Посмотрим на вариант с минимальной доработкой конфигурации. Мы можем использовать подписку на событие ОбработкаЗаполнения или ПередЗаписью для нужного документа.
При записи или заполнении документа система выполнит следующий алгоритм:
Если НЕ ЗначениеЗаполнено(Источник.Ответственный) Тогда
Источник.Ответственный = ПараметрыСеанса.ТекущийПользователь;
КонецЕсли;
В результате реквизит документа будет гарантированно записан в базу данных, а штатная печатная форма выведет ответственного без изменения ее собственного кода.
В случае применения платформы 1С:Предприятие 8.3 проанализируем использование механизма расширений. Мы можем переопределить процедуру печати или обработки заполнения документа, не снимая основную конфигурацию с поддержки.
С помощью аннотаций &Перед или &Вместо подключается алгоритм, который подставляет ПараметрыСеанса.ТекущийПользователь при формировании печатной формы, если реквизит объекта пуст.
Итак, мы выяснили, что права доступа не предназначены для подстановки логических значений в печатные формы. Для решения задачи следует выбрать либо настройку значений по умолчанию в сеансе пользователя, либо использование внешних печатных форм и подписок на события.