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

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

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

Почему пользовательский макет применяется ко всем пользователям сразу?

Проанализируем архитектуру механизма подсистемы печати БСП. Слово пользовательские в названии регистра сведений ПользовательскиеМакетыПечати означает лишь то, что макет может быть отредактирован пользователем непосредственно в режиме 1С:Предприятие без запуска Конфигуратора и без изменения конфигурации поставщика.

В структуре типового регистра сведений ПользовательскиеМакетыПечати ключевыми измерениями выступают имя макета и объект метаданных. Измерение Пользователь в структуре регистра отсутствует. По этой причине флаг использования макета и сам отредактированный табличный документ действуют монопольно на уровне всей базы данных: если один сотрудник изменяет макет или переключает его на встроенный, настройка мгновенно распространяется на всех остальных пользователей системы.

Рассмотрим несколько проверенных способов решения этой задачи без дублирования десятков одинаковых макетов в Конфигураторе.

Решение 1. Разделение макета на области и условный вывод секций

Если макет редактируется пользователями редко (например, при смене реквизитов организации или условий продаж), можно использовать один общий макет, разделив подвал на несколько именованных секций. Каждая секция настраивается под определенную организацию, подразделение или группу сотрудников.

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

Посмотрим на пример реализации такого вывода в коде формирования документа:


Если ДокументОбъект.Организация = ПредопределенноеЗначение("Справочник.Организации.ОсновнаяОрганизация") Тогда
    ОбластьПодвала = Макет.ПолучитьОбласть("ПодвалОрганизация1");
Иначе
    ОбластьПодвала = Макет.ПолучитьОбласть("ПодвалОрганизация2");
КонецЕсли;

ТабличныйДокумент.Вывести(ОбластьПодвала);

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

Решение 2. Параметризация единого макета через дополнительные реквизиты

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

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

  1. В макете печатной формы в ячейке подвала зададим заполнение Параметр и укажем имя, например, КонтактыМенеджера.
  2. Для справочника Пользователи включим типовой механизм Дополнительные реквизиты и сведения и добавим строковый реквизит для хранения персональных ссылок или текста подвала.
  3. Каждый пользователь самостоятельно заполняет свои контактные данные в своей карточке пользователя.
  4. В процедуре печати заполняем параметр из реквизитов автора документа или через значение ПараметрыСеанса.ТекущийПользователь.

Посмотрим, как выглядит заполнение такого параметра при формировании печатной формы:


ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

// Получаем значение дополнительного реквизита текущего пользователя
ЗначениеКонтактов = УправлениеСвойствами.ЗначениеСвойства(
    ПараметрыСеанса.ТекущийПользователь, 
    ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("КонтактыВПФ")
);

ОбластьПодвал.Параметры.КонтактыМенеджера = ЗначениеКонтактов;
ТабличныйДокумент.Вывести(ОбластьПодвал);

Решение 3. Хранение индивидуальных настроек в «Хранилище общих настроек»

Если требуется предоставить пользователям возможность настраивать произвольный текст для печатных форм прямо в пользовательском интерфейсе без изменения конфигурации и без прав администратора на редактирование макетов, применим платформенный механизм ХранилищеОбщихНастроек.

Для сохранения текста конкретного пользователя используем следующую конструкцию:


ХранилищеОбщихНастроек.Сохранить(
    "ПечатьЗаказаКлиента", 
    "ИндивидуальныйТекстПодвала", 
    ТекстПодвалаПользователя, 
    , 
    ИмяПользователя()
);

При формировании печатной формы считываем значение с помощью метода Загрузить:


ТекстДляВывода = ХранилищеОбщихНастроек.Загрузить(
    "ПечатьЗаказаКлиента", 
    "ИндивидуальныйТекстПодвала", 
    , 
    , 
    ИмяПользователя()
);

Если Не ЗначениеЗаполнено(ТекстДляВывода) Тогда
    ТекстДляВывода = "Стандартный текст по умолчанию";
КонецЕсли;

ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьПодвал.Параметры.ТекстПодвала = ТекстДляВывода;
ТабличныйДокумент.Вывести(ОбластьПодвал);

Решение 4. Использование внешней печатной формы (ВПФ) или расширения

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

  1. Внешняя печатная форма: подключается через справочник ДополнительныеОтчетыИОбработки. В модуле обработки можно реализовать условие проверки текущего пользователя и программно подключать разные внутренние макеты обработки или переопределять видимость областей.
  2. Расширение конфигурации: позволяет перехватить процедуру формирования печатной формы с помощью аннотации &Вместо или &ИзменениеИКонтроль, подставляя индивидуальные параметры печати в зависимости от прав или подразделения текущего сеанса.

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

← На главную