При разработке и подключении внешней печатной формы (ВПФ) к документам в конфигурациях на базе Библиотеки стандартных подсистем (в частности, в 1С:Зарплата и Управление Персоналом 3) разработчики часто сталкиваются с неожиданным поведением. Внешняя обработка печатается корректно, однако при попытке распечатать любую стандартную типовую форму того же документа внезапно открывается окно Печать комплекта, куда автоматически включается как выбранная типовая форма, так и добавленная внешняя. Разберем по шагам, почему это происходит и как вернуть привычное поведение программы.
Проанализируем архитектуру механизма печати БСП. Для многих расчетных и кадровых документов вывод документов спроектирован с поддержкой пакетной печати. В модуле менеджера таких документов в процедуре ДобавитьКомандыПечати для типовых команд часто установлен параметр ДополнитьКомплектВнешнимиПечатнымиФормами = Истина. Когда пользователь запускает печать, подсистема автоматически опрашивает справочник ДополнительныеОтчетыИОбработки, находит все зарегистрированные для данного типа документа ВПФ и принудительно включает их в общий комплект. В результате вместо формирования одного бланка выводится интерфейс пакетной печати.
Рассмотрим несколько проверенных способов решения данной задачи: от пользовательской настройки до программных изменений в конфигурации и коде самой обработки.
Выясним самый простой способ отключения на уровне интерфейса без модификации метаданных и программного кода. Система запоминает пользовательский выбор состава комплекта:
НастройкиПечатиОбъектов для текущего пользователя или организации, после чего данная форма перестанет принудительно выводиться вместе с типовой.Посмотрим на пример доработки самой внешней обработки. Чтобы внешняя печатная форма в принципе не могла включаться в комплектную печать кадровых или расчетных документов, используем параметры подсистемы печати БСП. В экспортной процедуре Печать модуля обработки установим флаг запрета комплектной печати через переданные параметры вывода:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// Запрещаем включение данной печатной формы в комплекты документов
ПараметрыВывода.ДоступнаПечатьПоКомплектно = Ложь;
// Далее следует стандартный алгоритм формирования табличного документа
ТабличныйДокумент = СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати);
// Заполняем коллекцию печатных форм
СтрКоллекции = УправлениеПечатью.ОписаниеПечатнойФормы(КоллекцияПечатныхФорм, "ВнешняяПечатнаяФорма");
СтрКоллекции.ТабличныйДокумент = ТабличныйДокумент;
КонецПроцедуры
Рассмотрим, как это работает: при сборке комплекта БСП проверяет доступность формы для группового вывода. Установка свойства ДоступнаПечатьПоКомплектно = Ложь исключает внешнюю форму из пакетного объединения с типовыми бланками.
Если требуется полностью избавить типовую команду документа от поиска внешних форм без снятия конфигурации с поддержки, применим механизм расширений. Перехватим процедуру ДобавитьКомандыПечати модуля менеджера документа с помощью аннотации &После:
&После("ДобавитьКомандыПечати")
Процедура Расш_ДобавитьКомандыПечати(КомандыПечати) Экспорт
Для Каждого КомандаПечати Из КомандыПечати Цикл
// Отключаем автоматическое дополнение внешними формами для типовых команд
Если КомандыПечати.Колонки.Найти("ДополнитьКомплектВнешнимиПечатнымиФормами") <> Неопределено Тогда
КомандаПечати.ДополнитьКомплектВнешнимиПечатнымиФормами = Ложь;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
В зависимости от версии БСП свойство может располагаться непосредственно в отдельной колонке таблицы КомандыПечати либо в структуре КомандаПечати.ДополнительныеПараметры. Отключение этого свойства предотвращает инициализацию механизма подтягивания внешних обработок при вызове типовой печати.
Разберем альтернативные архитектурные пути, если поведение справочника дополнительных отчетов и обработок не подходит для конкретной задачи:
СведенияОВнешнейОбработке() изменим способ вызова. Вместо типового формирования печатной формы через макет зададим вызов клиентского или серверного метода, открывающего отдельную собственную экранную форму с готовым табличным документом. Это исключит регистрацию команды в стандартных списках комплектования БСП.