При разработке внешних печатных форм (ВПФ) для конфигураций на платформе 1С:Предприятие 8.3, использующих Библиотеку стандартных подсистем (БСП) (таких как ЗУП 3.1, ERP, КА, БП 3.0), разработчики часто сталкиваются с эстетической проблемой. При выводе печатной формы на экран в заголовке окна или на панели вкладок отображается стандартный текст "Печать документа". В то же время для типовых встроенных отчетов и форм система красиво выводит название самого документа, его номер и дату.
В этой статье мы подробно разберем, как управлять заголовками окон, именами вкладок и даже именами сохраняемых файлов во внешних печатных формах с помощью штатных механизмов БСП.
Когда мы регистрируем внешнюю печатную форму в справочнике "Дополнительные отчеты и обработки", управление выводом табличного документа на экран полностью берет на себя БСП. По умолчанию подсистема печати не знает, какой именно заголовок мы хотим сопоставить с конкретным макетом, и использует стандартное системное строковое представление. Чтобы переопределить это поведение, нам необходимо передать подсистеме печати соответствующие параметры.
Давайте пошагово рассмотрим несколько способов решения этой задачи в зависимости от требований к интерфейсу.
Самый простой и правильный способ изменить заголовок главного окна печати — использовать параметр ПараметрыВывода, который передается в экспортную процедуру Печать модуля объекта внешней обработки.
Выясним, как выглядит структура этой процедуры и где именно вносить изменения. Рассмотрим следующий пример кода:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ИмяМакета = "ЗаявкаНаОплатуВБанк";
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, ИмяМакета) Тогда
ТабДок = Новый ТабличныйДокумент;
// Здесь выполняется формирование и заполнение табличного документа
// Например: ЗаполнитьТабличныйДокумент(ТабДок, МассивОбъектов);
// Устанавливаем заголовок формы в параметрах вывода
ПараметрыВывода.ЗаголовокФормы = "Заявка на оплату в банк (МеКаМи)";
// Выводим готовый документ в коллекцию БСП
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
ИмяМакета,
"Заявка на оплату в банк",
ТабДок,
,
"СсылкаНаМакет"
);
КонецЕсли;
КонецПроцедуры
В этом примере свойство ПараметрыВывода.ЗаголовокФормы принимает строковое значение, которое БСП автоматически назначит в качестве заголовка открывающегося окна печати.
Статичный заголовок удобен, но на практике пользователям гораздо комфортнее видеть в заголовке окна конкретные данные документа, например: "Заявка на оплату в банк № 148 от 15.10.2023". Поскольку в процедуру Печать первым параметром передается МассивОбъектов (содержащий ссылки на печатаемые документы), мы можем легко получить данные первого документа и сформировать заголовок динамически.
Проанализируем пример динамического формирования заголовка:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ИмяМакета = "ЗаявкаНаОплатуВБанк";
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, ИмяМакета) Тогда
ТабДок = Новый ТабличныйДокумент;
// Формируем заголовок на основе первого объекта в массиве
Если МассивОбъектов.Количество() > 0 Тогда
СсылкаНаДокумент = МассивОбъектов[0];
// Используем стандартную функцию БСП для получения представления объекта
ПредставлениеДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаДокумент, "Ссылка");
ПараметрыВывода.ЗаголовокФормы = "Печать: " + Строка(ПредставлениеДокумента);
Иначе
ПараметрыВывода.ЗаголовокФормы = "Печать документов";
КонецЕсли;
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
ИмяМакета,
"Заявка на оплату в банк",
ТабДок
);
КонецЕсли;
КонецПроцедуры
Благодаря такому подходу заголовок формы всегда будет актуальным и информативным для конечного пользователя.
Важно различать заголовок самого окна (всей формы печати БСП) и название вкладки внутри этого окна (которое отображается, если одновременно выводятся несколько разных макетов или документов). Заголовок вкладки определяется параметром СинонимМакета.
Его можно задать двумя способами:
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию().Посмотрим на пример изменения синонима макета напрямую в коллекции:
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ЗаявкаНаОплатуВБанк");
Если ПечатнаяФорма <> Неопределено Тогда
// Задаем индивидуальное название для вкладки документа
ПечатнаяФорма.СинонимМакета = "Моя пользовательская вкладка";
КонецЕсли;
Часто при изменении заголовков разработчики упускают из виду еще один важный момент: имя файла, которое предлагает система при попытке пользователя сохранить печатную форму на диск (например, в формате PDF или Excel). Если его не настроить, БСП предложит сохранить файл под техническим именем макета или оставит поле пустым.
Чтобы решить эту задачу, мы можем определить свойство ИмяФайлаПечатнойФормы в параметрах печатной формы. Сделать это можно следующим образом:
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ЗаявкаНаОплатуВБанк");
Если ПечатнаяФорма <> Неопределено Тогда
ИменаФайлов = Новый Соответствие;
Для Каждого Ссылка Из МассивОбъектов Цикл
// Формируем красивое имя файла для каждого документа без недопустимых символов
ИмяФайла = "Заявка_на_оплату_в_банк_" + СокрЛП(Ссылка.Номер);
ИменаФайлов.Вставить(Ссылка, ИмяФайла);
КонецЦикла;
// Передаем соответствие в структуру печатной формы
ПечатнаяФорма.ИмяФайлаПечатнойФормы = ИменаФайлов;
КонецЕсли;
Обратите внимание: Если вы не заполните свойство ИмяФайлаПечатнойФормы вручную, БСП по умолчанию подставит значение из свойства СинонимМакета в качестве предлагаемого имени файла при сохранении на диск.
В редких случаях (например, при использовании очень старых версий БСП, где параметр ПараметрыВывода на сервере не поддерживается или передается как Неопределено), разработчики прибегают к реализации клиентской логики.
В этом сценарии в процедуре СведенияОВнешнейОбработке для команды указывается тип запуска ВызовКлиентскогоМетода, а в модуле управляемой формы внешней печатной формы прописывается вызов общей формы печати с явной передачей структуры параметров:
&НаКлиенте
Процедура Напечатать(Команда)
ТабДок = Новый ТабличныйДокумент;
КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("ИмяМакета");
КоллекцияПечатныхФорм[0].ТабличныйДокумент = ТабДок;
// Формируем параметры печати на клиенте
ПараметрыПечати = УправлениеПечатьюКлиент.ПараметрыПечати;
ПараметрыПечати.ЗаголовокФормы = "Индивидуальный заголовок окна";
// Вызываем форму печати БСП
УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, , ПараметрыПечати);
КонецПроцедуры
Этот способ требует создания формы-посредника внутри внешней обработки, поэтому в современных конфигурациях (таких как ЗУП 3.1) рекомендуется использовать более простой и лаконичный Способ 1 или Способ 2 на стороне сервера.
Мы подробно разобрали, как сделать интерфейс работы с внешними печатными формами максимально дружелюбным и профессиональным. Подведем итог ключевых возможностей:
ПараметрыВывода.ЗаголовокФормы в процедуре Печать.СинонимМакета.ИмяФайлаПечатнойФормы.