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

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

Часто при разработке печатных форм в конфигурациях, использующих Библиотеку стандартных подсистем (БСП), разработчики сталкиваются с задачей: необходимо вывести в рамках одной кнопки «Печать» два макета, один из которых имеет книжную ориентацию, а другой — альбомную. Попытка «склеить» их в один ТабличныйДокумент приводит к тому, что параметры страницы (ориентация, поля) применяются ко всему документу целиком, ориентируясь на настройки последнего добавленного макета. Разберем, как решить эту задачу правильно, используя архитектурные возможности БСП.

Принцип работы с коллекцией печатных форм

Главная ошибка, которую стоит исключить — это попытка принудительного объединения разнородных макетов в один объект ТабличныйДокумент. Механизм печати 1С привязывает настройки принтера и параметры страницы к конкретному экземпляру табличного документа. Чтобы добиться корректного вывода, необходимо работать с КоллекцияПечатныхФорм, куда мы будем добавлять каждый макет как отдельный элемент.

Рассмотрим по шагам, как правильно реализовать этот подход:

  1. Создание независимых документов: Вместо одного объекта ТабличныйДокумент, мы инициализируем два отдельных экземпляра в коде обработки печати.
  2. Настройка параметров страницы: Для каждого из созданных документов мы задаем индивидуальные параметры, такие как ОриентацияСтраницы, ПолеСверху, ПолеСнизу и другие, через свойство ПараметрыСтраницы.
  3. Регистрация в коллекции: Используем типовой метод БСП для добавления каждого документа в итоговый набор, который увидит пользователь.

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

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

Давайте посмотрим на пример реализации логики в коде:


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

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

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

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

Почему это лучшее решение?

Разделение на этапе формирования коллекции дает разработчику и пользователю ряд существенных преимуществ:

Печать комплекта печатных форм

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

Таким образом, мы отказываемся от попыток «склеить» верстку и переходим к архитектурному разделению объектов. Это делает код более читаемым, а поведение системы — предсказуемым для конечного пользователя.

← На главную