При переходе на современные версии конфигураций (например, 1С:ЗУП 3.1, 1С:ERP, 1С:КА) разработчики часто сталкиваются с вопросом: как ограничить применение внешней печатной формы (ВПФ) определенной организацией или условием? В более ранних решениях на обычных формах (таких как 1С:УПП 1.3) в справочнике дополнительных отчетов и обработок присутствовала встроенная табличная часть, позволявшая интерактивно задать отбор по реквизитам документа прямо в пользовательском интерфейсе. Выясним причину изменений в БСП и подробно рассмотрим все доступные варианты решения этой задачи.
Проанализируем архитектуру подсистемы «Дополнительные отчеты и обработки» в Библиотеке стандартных подсистем (БСП). В современных конфигурациях регистрация печатных форм выполняется через экспортную функцию СведенияОВнешнейОбработке() в модуле объекта обработки.
Привязка внешней команды осуществляется исключительно на уровне типов метаданных, переданных в массиве Назначение. Структура ПараметрыРегистрации не содержит параметров для динамической фильтрации по конкретным значениям реквизитов (например, по ссылке на СправочникСсылка.Организации). Кнопка команды печати добавляется в командную панель формы документа безусловно для всех объектов указанного типа.
Тем не менее существует несколько надежных способов обойти данное ограничение и настроить вывод нужного макета под конкретные условия.
Разберем по шагам наиболее распространенный и простой вариант. Логика проверки организации реализуется непосредственно внутри экспортной процедуры Печать() модуля объекта внешней обработки. В зависимости от реквизитов документа формируется либо специализированный шаблон (Word, MXL), либо вызывается стандартный алгоритм.
Посмотрим на пример реализации ветвления логики формирования макетов:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПараметрыПечати = Новый Структура;
Для Каждого СсылкаНаОбъект Из МассивОбъектов Цикл
// Проверяем организацию по ссылке или реквизитам (например, ИНН)
Если СсылкаНаОбъект.Организация.ИНН = "7701234567" Тогда
СформироватьМакетОрганизацииА(СсылкаНаОбъект, КоллекцияПечатныхФорм, ОбъектыПечати);
Иначе
СформироватьМакетПоУмолчанию(СсылкаНаОбъект, КоллекцияПечатныхФорм, ОбъектыПечати);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Если для других организаций требуется выводить типовую печатную форму конфигурации, внутри условия можно напрямую вызвать метод формирования макета из модуля менеджера соответствующего документа (например, Документы.ПриемНаРаботу.Печать(...)).
Рассмотрим вариант, когда пользователю необходимо явно предоставить выбор шаблона в подменю «Печать». В одной внешней печатной форме можно зарегистрировать несколько отдельных команд.
Разберем по шагам заполнение функции регистрации:
Печать() считаем значение параметра ИдентификаторКоманды из таблицы КоллекцияПечатныхФорм.ОбщегоНазначенияКлиентСервер.СообщитьПользователю().
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.Назначение.Добавить("Документ.ПриемНаРаботу");
// Команда 1
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Трудовой договор (Основной филиал)";
НоваяКоманда.Идентификатор = "ТрудовойДоговорОсновной";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
// Команда 2
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Трудовой договор (Обособленное подразделение)";
НоваяКоманда.Идентификатор = "ТрудовойДоговорОП";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
Возврат ПараметрыРегистрации;
КонецФункции
Если стоит жесткое требование — скрывать кнопку команды печати в интерфейсе формы документа, когда документ открыт по другой организации, наилучшим решением является использование расширения конфигурации.
Проанализируем этот подход:
ДобавитьКомандыПечати в модуле менеджера кадрового документа (например, Документы.ПриемНаРаботу).УправлениеПечатью.ДобавитьУсловиеВидимостиКоманды(), где можно настроить правила видимости по реквизиту Организация, функциональным опциям или ролям текущего пользователя.Если задача заключается только в незначительном изменении текста или оформлении шаблона (например, вывод логотипа или редактирование формулировок трудового договора), разработка внешней обработки может не потребоваться вовсе.
Рассмотрим порядок действий в пользовательском режиме: