Возможно ли использовать разные ориентации страниц в одном табличном документе 1С?

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

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

Анализ технического ограничения объекта ТабличныйДокумент

Проанализируем структуру объекта ТабличныйДокумент в платформе «1С:Предприятие 8». Этот объект спроектирован как единое полотно. Свойства печати, такие как ОриентацияСтраницы, Поля, МасштабПечати и ИмяПринтера, являются общими для всего экземпляра объекта.

Рассмотрим ситуацию: вы программно выводите сначала «Счет», устанавливая ОриентацияСтраницы.Портрет, а затем в этот же документ выводите «Счет-фактуру» и меняете свойство на ОриентацияСтраницы.Ландшафт. В результате весь документ станет альбомным. Платформа 1С не поддерживает «разрывы разделов» с индивидуальными настройками страницы внутри одного табличного документа. Таким образом, в рамках одного объекта ТабличныйДокумент реализовать разные ориентации невозможно.

Решение проблемы через ПакетОтображаемыхДокументов

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

Разберем алгоритм реализации по шагам:

  1. Создадим отдельные объекты ТабличныйДокумент для каждой печатной формы.
  2. Установим каждому документу свою ориентацию.
  3. Добавим эти документы в состав объекта ПакетОтображаемыхДокументов.
  4. Выведем пакет на экран.

Рассмотрим пример кода, реализующий этот механизм:


// 1. Создаем первый документ (Книжный)
ТабДок1 = Новый ТабличныйДокумент;
ТабДок1.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
// ... тут код заполнения ТабДок1 ...

// 2. Создаем второй документ (Альбомный)
ТабДок2 = Новый ТабличныйДокумент;
ТабДок2.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
// ... тут код заполнения ТабДок2 ...

// 3. Формируем пакет
Пакет = Новый ПакетОтображаемыхДокументов;

ЭлементПакета1 = Новый ЭлементПакетаОтображаемыхДокументов;
ЭлементПакета1.Данные = ПоместитьВоВременноеХранилище(ТабДок1);
ЭлементПакета1.Наименование = "Счет на оплату";
Пакет.Состав.Добавить(ЭлементПакета1);

ЭлементПакета2 = Новый ЭлементПакетаОтображаемыхДокументов;
ЭлементПакета2.Данные = ПоместитьВоВременноеХранилище(ТабДок2);
ЭлементПакета2.Наименование = "Счет-фактура";
Пакет.Состав.Добавить(ЭлементПакета2);

// 4. Показываем результат пользователю
Пакет.Показать("Печать комплекта документов");

При использовании метода Показать() пользователь увидит стандартную форму предварительного просмотра, где слева будет список документов, а справа — область просмотра. При отправке такого пакета на печать принтер получит корректные команды смены ориентации для каждого листа.

Использование возможностей БСП (Библиотеки стандартных подсистем)

Если вы работаете в современной конфигурации (например, 1С:Бухгалтерия 3.0, УТ 11 или ERP), то задача печати комплектов уже автоматизирована в подсистеме «Печать». Выясним, как это устроено в БСП. Вместо ручного создания пакетов, вы можете использовать коллекцию печатных форм.

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

Нюансы сохранения в PDF

Важно проанализировать ситуацию с сохранением документов. Если вам необходимо сохранить результат в один файл PDF, то стандартный метод ТабличныйДокумент.Записать() вам не подойдет, так как он работает только с одним объектом.

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

Альтернативный метод: Имитация поворотом текста

Существует еще один, довольно редкий способ — визуальная имитация альбомного листа внутри книжного документа. Для этого используется свойство ячейки ОриентацияТекста, равное 90 градусов.

Однако этот метод крайне трудозатратен, так как вам придется:

  1. Вручную проектировать макет «на боку».
  2. Ширина колонок в макете фактически станет высотой строк на печати.
  3. Сложно управлять автовысотой строк и переносами текста.

Мы рекомендуем использовать этот метод только в исключительных случаях, когда по каким-то причинам невозможно использовать ПакетОтображаемыхДокументов.

Подведем итог: для реализации печати документов с разной ориентацией страниц в 1С 8.3 следует отказаться от идеи использования одного объекта ТабличныйДокумент в пользу ПакетОтображаемыхДокументов или стандартных механизмов печати БСП. Это обеспечит корректную работу принтера и удобство для пользователя.

← На главную