Как изменить заголовок окна печати и программно сформировать имя файла при сохранении печатной формы в 1С

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

При разработке внешних печатных форм в современных конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как КА 2, ERP 2 или УТ 11, разработчики часто сталкиваются с двумя задачами. Во-первых, стандартный заголовок окна «Печать документов» не всегда информативен. Во-вторых, при сохранении сформированного табличного документа в файл (например, PDF или Excel), 1С может предлагать неудачное имя файла — просто название макета без номера и даты. Рассмотрим подробно, как решить эти задачи программным путем, используя возможности БСП.

Управление заголовком формы предварительного просмотра

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

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


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    // Устанавливаем собственный заголовок окна печати
    ПараметрыВывода.Вставить("Заголовок", "Печать заявки на отгрузку");
    
    // Далее следует стандартный код формирования печатной формы...
    
КонецПроцедуры

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

Формирование имени файла при сохранении: базовый подход

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

Рассмотрим структуру этой процедуры подробнее. Нас интересует 7-й параметр — ИмяФайлаПечатнойФормы:


УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
    КоллекцияПечатныхФорм, 
    ИмяМакета, 
    СинонимМакета, 
    ТабличныйДокумент, 
    Картинка, 
    ПолныйПутьКМакету, 
    ИмяФайлаПечатнойФормы // Вот этот параметр отвечает за имя файла
);

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

Динамическое именование файлов для нескольких документов

Если вы печатаете сразу несколько документов, нам нужно, чтобы для каждого из них сформировалось свое уникальное имя файла. Для этого в 7-й параметр следует передать не просто строку, а объект Соответствие. Выясним, как это работает на практике:

  1. Создаем объект Соответствие.
  2. В качестве Ключа используем ссылку на объект (документ).
  3. В качестве Значения указываем строку с полным именем файла, которое мы хотим видеть (включая номер и дату).

Посмотрим на пример реализации в процедуре Печать:


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

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

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

Внутри функции формирования документа (СформироватьПечатнуюФорму) мы должны заполнить это соответствие. Рассмотрим подробнее этот процесс:


Функция СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати, ИменаФайлов)
    
    ТабДок = Новый ТабличныйДокумент;
    // ... логика вывода областей в ТабДок ...
    
    Для Каждого СсылкаНаОбъект Из МассивОбъектов Цикл
        
        // Получаем данные для имени файла
        НомерДок = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(СсылкаНаОбъект.Номер, Истина, Истина);
        ДатаДок  = Формат(СсылкаНаОбъект.Дата, "ДФ=dd.MM.yyyy");
        Контрагент = СсылкаНаОбъект.Контрагент.Наименование;
        
        ЖелаемоеИмяФайла = СтрШаблон("Заявка № %1 от %2 (%3)", НомерДок, ДатаДок, Контрагент);
        
        // Удаляем недопустимые символы (/ \ : * ? " < > |)
        ЖелаемоеИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ЖелаемоеИмяФайла, "");
        
        // Ключ - ссылка на документ, Значение - имя файла
        ИменаФайлов.Вставить(СсылкаНаОбъект, ЖелаемоеИмяФайла);
        
        // Важно! Для связи табдокумента и объекта заполняем ОбъектыПечати
        УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДок, 1, ОбъектыПечати, СсылкаНаОбъект);
        
    КонецЦикла;
    
    Возврат ТабДок;
    
КонецФункции

Важные нюансы и рекомендации

Проанализируем критические моменты, которые могут повлиять на корректность работы данного механизма:

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

← На главную