Как настроить условие использования внешней печатной формы в 1С:ЗУП 3.1 и БСП?

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

При переходе на современные версии конфигураций (например, 1С:ЗУП 3.1, 1С:ERP, 1С:КА) разработчики часто сталкиваются с вопросом: как ограничить применение внешней печатной формы (ВПФ) определенной организацией или условием? В более ранних решениях на обычных формах (таких как 1С:УПП 1.3) в справочнике дополнительных отчетов и обработок присутствовала встроенная табличная часть, позволявшая интерактивно задать отбор по реквизитам документа прямо в пользовательском интерфейсе. Выясним причину изменений в БСП и подробно рассмотрим все доступные варианты решения этой задачи.

Почему в БСП нельзя задать отбор при регистрации ВПФ

Проанализируем архитектуру подсистемы «Дополнительные отчеты и обработки» в Библиотеке стандартных подсистем (БСП). В современных конфигурациях регистрация печатных форм выполняется через экспортную функцию СведенияОВнешнейОбработке() в модуле объекта обработки.

Привязка внешней команды осуществляется исключительно на уровне типов метаданных, переданных в массиве Назначение. Структура ПараметрыРегистрации не содержит параметров для динамической фильтрации по конкретным значениям реквизитов (например, по ссылке на СправочникСсылка.Организации). Кнопка команды печати добавляется в командную панель формы документа безусловно для всех объектов указанного типа.

Тем не менее существует несколько надежных способов обойти данное ограничение и настроить вывод нужного макета под конкретные условия.

Способ 1. Программная проверка условий в процедуре печати

Разберем по шагам наиболее распространенный и простой вариант. Логика проверки организации реализуется непосредственно внутри экспортной процедуры Печать() модуля объекта внешней обработки. В зависимости от реквизитов документа формируется либо специализированный шаблон (Word, MXL), либо вызывается стандартный алгоритм.

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


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

	ПараметрыПечати = Новый Структура;
	
	Для Каждого СсылкаНаОбъект Из МассивОбъектов Цикл
		
		// Проверяем организацию по ссылке или реквизитам (например, ИНН)
		Если СсылкаНаОбъект.Организация.ИНН = "7701234567" Тогда
			СформироватьМакетОрганизацииА(СсылкаНаОбъект, КоллекцияПечатныхФорм, ОбъектыПечати);
		Иначе
			СформироватьМакетПоУмолчанию(СсылкаНаОбъект, КоллекцияПечатныхФорм, ОбъектыПечати);
		КонецЕсли;
		
	КонецЦикла;

КонецПроцедуры

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

Способ 2. Регистрация нескольких команд в одной внешней обработке

Рассмотрим вариант, когда пользователю необходимо явно предоставить выбор шаблона в подменю «Печать». В одной внешней печатной форме можно зарегистрировать несколько отдельных команд.

Разберем по шагам заполнение функции регистрации:

  1. В таблице команд сформируем строки с понятными наименованиями, например: «Трудовой договор (Организация А)» и «Трудовой договор (Организация Б)».
  2. В процедуре Печать() считаем значение параметра ИдентификаторКоманды из таблицы КоллекцияПечатныхФорм.
  3. Выполним сопоставление выбранной команды с организацией в документе. Если команда не соответствует выбранному документу, выведем понятное предупреждение через ОбщегоНазначенияКлиентСервер.СообщитьПользователю().

Функция СведенияОВнешнейОбработке() Экспорт

	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
	ПараметрыРегистрации.Версия = "1.0";
	ПараметрыРегистрации.Назначение.Добавить("Документ.ПриемНаРаботу");

	// Команда 1
	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление = "Трудовой договор (Основной филиал)";
	НоваяКоманда.Идентификатор = "ТрудовойДоговорОсновной";
	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
	
	// Команда 2
	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление = "Трудовой договор (Обособленное подразделение)";
	НоваяКоманда.Идентификатор = "ТрудовойДоговорОП";
	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();

	Возврат ПараметрыРегистрации;

КонецФункции

Способ 3. Управление видимостью команд через расширение конфигурации

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

Проанализируем этот подход:

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

Способ 4. Типовой механизм «Макеты печатных форм»

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

Рассмотрим порядок действий в пользовательском режиме:

  1. Перейдем в раздел «Администрирование -> Печатные формы, отчеты и обработки -> Макеты печатных форм».
  2. Найдем требуемый макет кадрового документа и нажмем кнопку «Изменить».
  3. Отредактируем макет или загрузим подготовленный пользовательский вариант. Система позволяет выбирать отредактированный макет непосредственно при формировании документов.
← На главную