Как изменить заголовок окна при выводе внешней печатной формы в 1С на БСП?

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

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

В этой статье мы подробно разберем, как управлять заголовками окон, именами вкладок и даже именами сохраняемых файлов во внешних печатных формах с помощью штатных механизмов БСП.

Почему БСП выводит стандартный заголовок?

Когда мы регистрируем внешнюю печатную форму в справочнике "Дополнительные отчеты и обработки", управление выводом табличного документа на экран полностью берет на себя БСП. По умолчанию подсистема печати не знает, какой именно заголовок мы хотим сопоставить с конкретным макетом, и использует стандартное системное строковое представление. Чтобы переопределить это поведение, нам необходимо передать подсистеме печати соответствующие параметры.

Давайте пошагово рассмотрим несколько способов решения этой задачи в зависимости от требований к интерфейсу.

Способ 1. Установка заголовка формы на сервере (в процедуре Печать)

Самый простой и правильный способ изменить заголовок главного окна печати — использовать параметр ПараметрыВывода, который передается в экспортную процедуру Печать модуля объекта внешней обработки.

Выясним, как выглядит структура этой процедуры и где именно вносить изменения. Рассмотрим следующий пример кода:


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

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

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

В этом примере свойство ПараметрыВывода.ЗаголовокФормы принимает строковое значение, которое БСП автоматически назначит в качестве заголовка открывающегося окна печати.

Способ 2. Динамическое формирование заголовка окна

Статичный заголовок удобен, но на практике пользователям гораздо комфортнее видеть в заголовке окна конкретные данные документа, например: "Заявка на оплату в банк № 148 от 15.10.2023". Поскольку в процедуру Печать первым параметром передается МассивОбъектов (содержащий ссылки на печатаемые документы), мы можем легко получить данные первого документа и сформировать заголовок динамически.

Проанализируем пример динамического формирования заголовка:


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

    ИмяМакета = "ЗаявкаНаОплатуВБанк";
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, ИмяМакета) Тогда
        
        ТабДок = Новый ТабличныйДокумент;
        
        // Формируем заголовок на основе первого объекта в массиве
        Если МассивОбъектов.Количество() > 0 Тогда
            СсылкаНаДокумент = МассивОбъектов[0];
            // Используем стандартную функцию БСП для получения представления объекта
            ПредставлениеДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаДокумент, "Ссылка");
            ПараметрыВывода.ЗаголовокФормы = "Печать: " + Строка(ПредставлениеДокумента);
        Иначе
            ПараметрыВывода.ЗаголовокФормы = "Печать документов";
        КонецЕсли;
        
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм, 
            ИмяМакета, 
            "Заявка на оплату в банк", 
            ТабДок
        );
        
    КонецЕсли;

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

Благодаря такому подходу заголовок формы всегда будет актуальным и информативным для конечного пользователя.

Способ 3. Изменение заголовка вкладки (Синоним макета)

Важно различать заголовок самого окна (всей формы печати БСП) и название вкладки внутри этого окна (которое отображается, если одновременно выводятся несколько разных макетов или документов). Заголовок вкладки определяется параметром СинонимМакета.

Его можно задать двумя способами:

  1. Передать третьим параметром в процедуру УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию().
  2. Изменить напрямую в коллекции печатных форм после вывода макета.

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


ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ЗаявкаНаОплатуВБанк");
Если ПечатнаяФорма <> Неопределено Тогда
    // Задаем индивидуальное название для вкладки документа
    ПечатнаяФорма.СинонимМакета = "Моя пользовательская вкладка";
КонецЕсли;

Способ 4. Установка имени файла по умолчанию при сохранении

Часто при изменении заголовков разработчики упускают из виду еще один важный момент: имя файла, которое предлагает система при попытке пользователя сохранить печатную форму на диск (например, в формате PDF или Excel). Если его не настроить, БСП предложит сохранить файл под техническим именем макета или оставит поле пустым.

Чтобы решить эту задачу, мы можем определить свойство ИмяФайлаПечатнойФормы в параметрах печатной формы. Сделать это можно следующим образом:


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

Обратите внимание: Если вы не заполните свойство ИмяФайлаПечатнойФормы вручную, БСП по умолчанию подставит значение из свойства СинонимМакета в качестве предлагаемого имени файла при сохранении на диск.

Способ 5. Клиентский метод печати (для нестандартных сценариев)

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

В этом сценарии в процедуре СведенияОВнешнейОбработке для команды указывается тип запуска ВызовКлиентскогоМетода, а в модуле управляемой формы внешней печатной формы прописывается вызов общей формы печати с явной передачей структуры параметров:


&НаКлиенте
Процедура Напечатать(Команда)

    ТабДок = Новый ТабличныйДокумент;
    КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("ИмяМакета");
    КоллекцияПечатныхФорм[0].ТабличныйДокумент = ТабДок;
    
    // Формируем параметры печати на клиенте
    ПараметрыПечати = УправлениеПечатьюКлиент.ПараметрыПечати;
    ПараметрыПечати.ЗаголовокФормы = "Индивидуальный заголовок окна";
    
    // Вызываем форму печати БСП
    УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, , ПараметрыПечати);

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

Этот способ требует создания формы-посредника внутри внешней обработки, поэтому в современных конфигурациях (таких как ЗУП 3.1) рекомендуется использовать более простой и лаконичный Способ 1 или Способ 2 на стороне сервера.

Резюме

Мы подробно разобрали, как сделать интерфейс работы с внешними печатными формами максимально дружелюбным и профессиональным. Подведем итог ключевых возможностей:

← На главную