При переходе с конфигурации «Зарплата и управление персоналом» редакции 2.5 на редакцию 3.1 разработчики часто сталкиваются с изменением архитектуры печатных форм. В ЗУП 2.5 существовал удобный штатный механизм настройки принадлежности внешней печатной формы, где в режиме «Предприятие» можно было задать отбор по конкретным организациям, подразделениям или занимаемым ставкам.
В ЗУП 3.1 подсистема «Дополнительные отчеты и обработки» Библиотеки стандартных подсистем (БСП) устроена иначе. Встроенного пользовательского конструктора условий применения для внешних печатных форм (ВПФ) здесь не предусмотрено. Проанализируем, как решить эту задачу в современной конфигурации и какие технические подходы существуют.
Рассмотрим самый простой способ ограничения. Если логика выбора макета зависит от реквизитов объекта (например, организации или подразделения), мы можем проверить передаваемый массив ссылок непосредственно в модуле объекта внешней печатной формы.
Разберем пример кода экспортной процедуры Печать в модуле объекта ВПФ:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПечататьЛицСторону") Тогда
// Выполняем проверку реквизитов первого элемента или всех элементов массива
// В зависимости от организации или других параметров формируем нужный макет
ТабличныйДокумент = СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати);
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ПечататьЛицСторону",
"Печатать лиц. сторону",
ТабличныйДокумент
);
КонецЕсли;
КонецПроцедура
Внутри функции формирования печатной формы мы запрашиваем реквизиты объекта (например, Ссылка.Организация) и в зависимости от их значений подключаем тот или иной макет Word или MXL. Если печатная форма не должна выводиться для выбранной организации, можно выдать информационное сообщение пользователю или сгенерировать пустой документ с предупреждением.
Выясним, как разделить варианты печати прямо в меню кнопки «Печать». В подсистеме БСП одна внешняя обработка может регистрировать сразу несколько команд печати. Каждая команда получает собственный идентификатор и представление.
Посмотрим на пример заполнения параметров регистрации в функции СведенияОВнешнейОбработке:
// Добавление нескольких команд печати при регистрации ВПФ
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'Договор (Организация А)'");
НоваяКоманда.Идентификатор = "ПечатьДоговорОргА";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.Модификатор = "ПечатьMXL";
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'Договор (Организация Б)'");
НоваяКоманда.Идентификатор = "ПечатьДоговорОргБ";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.Модификатор = "ПечатьMXL";
В процедуре Печать мы проверяем, какой именно идентификатор команды был вызван с помощью метода УправлениеПечатью.НужноПечататьМакет(), и выводим соответствующий шаблон.
Если требуется, чтобы пункты меню печати автоматически скрывались в форме документа для тех организаций, к которым они не относятся, возможностей одной только ВПФ будет недостаточно. Метод БСП УправлениеПечатью.ДобавитьУсловиеВидимостиКоманды() работает только для команд, зафиксированных в модулях менеджеров объектов.
Чтобы реализовать точечное скрытие команд без изменения основной конфигурации, примените расширение:
Справочник.Сотрудники).ДобавитьКомандыПечати(КомандыПечати) с помощью аннотации &НаПоследование.
&НаПоследование("ДобавитьКомандыПечати")
Процедура Расш1_ДобавитьКомандыПечати(КомандыПечати)
// Находим нужную команду по идентификатору
КомандаПечати = УправлениеПечатью.НайтиКоманду(КомандыПечати, "МояПечатнаяФорма");
Если КомандаПечати <> Неопределено Тогда
// Указываем условие: команда видна только для определенной организации
УправлениеПечатью.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "Организация", НужнаяОрганизация);
КонецЕсли;
КонецПроцедура
Проанализируем ситуацию, когда в базе ведут учет десятки юридических лиц (90+) и множество обособленных подразделений. Написывать ветвления Если ... ИначеЕсли в коде обработки или создавать сотни отдельных команд печати становится крайне затруднительно.
В таких случаях рекомендуется следующая архитектура:
.docx) хранятся непосредственно в информационной базе (например, в справочнике или регистре сведений).Этот подход позволяет добавлять новые печатные формы и менять шаблоны договоров для новых организаций прямо в режиме «1С:Предприятие» без привлечения программиста и без правки кода ВПФ.
Не забывайте о штатных возможностях ЗУП 3.1. Для добавления пользовательских печатных форм Word часто вообще не требуется писать внешние обработки.
Перейдите в раздел Администрирование -> Печатные формы, отчеты и обработки -> Макеты печатных форм. Для большинства кадровых документов и справочника «Сотрудники» можно создавать новые макеты формата Office Open XML (.docx), перетаскивая доступные реквизиты объекта. Настройка их видимости и переименование производятся прямо в пользовательском интерфейсе.