При работе с современными конфигурациями на базе Библиотеки стандартных подсистем (БСП), такими как 1С:ERP 2.5, Управление торговлей 11 или Комплексная автоматизация 2, разработчики часто сталкиваются с задачей включения внешних печатных форм (ВПФ) в состав стандартного «Комплекта документов с настройкой». Основная сложность заключается в том, что механизмы формирования комплекта и вызова внешних обработок имеют разные интерфейсы передачи параметров. В этой статье мы подробно разберем, как преодолеть эти ограничения и правильно настроить программное взаимодействие.
Рассмотрим стандартную ситуацию. Процедура Печать в модуле менеджера любого типового документа обычно принимает 5 параметров. Пятый параметр — ПараметрыПечати — является ключевым при печати комплекта, так как именно в нем передается признак ДоступнаПечатьПоКомплектно и, что самое важное, АдресКомплектаПечатныхФорм.
В то же время, согласно стандартам БСП, экспортная процедура Печать во внешней печатной форме должна содержать строго 4 параметра:
МассивОбъектов — ссылки на документы;КоллекцияПечатныхФорм — таблица с результатами формирования макетов;ОбъектыПечати — список объектов для привязки к табличным документам;ПараметрыВывода — дополнительные настройки вывода.Выясним причину ошибки: когда мы пытаемся вызвать печать комплекта через внешнюю обработку, система ожидает передачи структуры настроек, но штатный механизм вызова ВПФ «не знает» о существовании пятого параметра. В результате при попытке сформировать комплект возникает программное исключение или формы просто не выводятся.
Первым делом проанализируем, как инициализируется команда печати комплекта. Для того чтобы система «увидела» внешние печатные формы в окне настройки комплекта, необходимо правильно установить флаги при регистрации команды. Рассмотрим пример кода, который должен располагаться в процедуре ДобавитьКомандыПечати:
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "КомплектДокументовСНастройкой";
КомандаПечати.Представление = НСтр("ru = 'Комплект документов с настройкой...'");
КомандаПечати.Обработчик = "УправлениеПечатьюУТКлиент.ПечатьКомплектаДокументовСНастройкой";
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
// Важный флаг для интеграции с ВПФ
КомандаПечати.ДополнитьКомплектВнешнимиПечатнымиФормами = Истина;
Обратите внимание на распространенную ошибку: обращение должно идти к конкретной переменной КомандаПечати, а не к коллекции КомандыПечати. Если этот флаг установлен в Истина, БСП при открытии формы настройки комплекта автоматически просканирует справочник Дополнительные отчеты и обработки и добавит подходящие ВПФ в список доступных.
Проанализируем ситуацию внутри функции формирования комплекта. Когда пользователь настраивает состав документов в интерфейсе, система сохраняет эти настройки во временное хранилище. Адрес этого хранилища передается в структуре ПараметрыПечати под ключом АдресКомплектаПечатныхФорм.
Внутри вашей внешней обработки или в расширении модуля менеджера необходимо реализовать получение этих данных. Посмотрим, как это выглядит программно:
Если ТипЗнч(ПараметрыПечати) = Тип("Структура") И ПараметрыПечати.Свойство("АдресКомплектаПечатныхФорм", АдресКомплекта) Тогда
КомплектПечатныхФорм = ПолучитьИзВременногоХранилища(АдресКомплекта);
Иначе
// Если адрес не передан, получаем настройки по умолчанию из регистра
КомплектПечатныхФорм = РегистрыСведений.НастройкиПечатиОбъектов.КомплектПечатныхФорм(
Метаданные.Документы.ЗаказКлиента.ПолноеИмя,
МассивОбъектов,
Неопределено);
КонецЕсли;
Здесь КомплектПечатныхФорм — это структура или таблица, содержащая перечень выбранных макетов, количество копий и порядок печати. Без этих данных процедура формирования комплекта не поймет, какие именно формы (включая внешние) нужно выводить на экран.
Если штатные механизмы не справляются с автоматическим выводом ВПФ в составе комплекта, мы можем применить подход с доработкой модуля менеджера (через расширение). Основная идея заключается в том, чтобы перехватить запрос на печать комплекта и явно вызвать типовые функции сборки форм. Для быстрой модификации готового макета без изменения сложной логики формирования подойдёт методика постобработки печатных форм на основе методов БСП.
Рассмотрим пример реализации в процедуре Печать модуля менеджера:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода, ПараметрыПечати) Экспорт
// Проверяем, нужно ли печатать именно комплект
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "КомплектДокументов") Тогда
// Очищаем коллекцию, так как комплект сам заполнит её нужными формами
КоллекцияПечатныхФорм.Очистить();
// Вызываем формирование комплекта (включая логику по ВПФ)
СформироватьКомплектПечатныхФорм(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати);
// Дополнительно можно вызвать типовой механизм БСП для внешних форм
РегистрыСведений.НастройкиПечатиОбъектов.СформироватьКомплектВнешнихПечатныхФорм(
"Документ.ВашТипДокумента",
МассивОбъектов,
ПараметрыПечати,
КоллекцияПечатныхФорм,
ОбъектыПечати);
КонецЕсли;
КонецПроцедуры
Этот код позволяет «пробросить» ПараметрыПечати вглубь механизмов БСП. Метод СформироватьКомплектВнешнихПечатныхФорм регистра сведений НастройкиПечатиОбъектов отвечает за то, чтобы в итоговый табличный документ попали те формы, которые были подключены как внешние обработки.
В последних версиях 1С:ERP (начиная с 2.5.6 и выше) механизм работы с комплектами стал еще более тесно завязан на регистр НастройкиПечатиОбъектов. Разберем важные моменты:
СведенияОВнешнейОбработке команда имеет тип ВызовСерверногоМетода. Это критично для корректной передачи контекста печати.Печать, если его там нет, и вызвать ПродолжитьВызов.ПараметрыПечати в момент вызова. В нем обязательно должен быть признак ДополнитьКомплектВнешнимиПечатнымиФормами = Истина.Подводя итог, можно сказать, что для успешной печати комплекта с ВПФ требуется синхронизировать работу команды печати в документе и логику обработки параметров в самой ВПФ. Использование регистра НастройкиПечатиОбъектов и типовых функций УправлениеПечатью позволяет реализовать этот функционал с минимальными отклонениями от стандартов разработки БСП.