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