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

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

При подготовке документов к двусторонней печати часто возникает необходимость настроить разные отступы для нечетных и четных страниц. Например, для подшивки или переплета с левой стороны нечетная страница должна иметь отступ слева 30 мм, а четная (обратная сторона) — аналогичный отступ справа. Разберем, как реализовать эту задачу штатно средствами платформы 1С:Предприятие.

Решение: использование свойства ЧередованиеРасположенияСтраниц

В платформе 1С предусмотрено специальное свойство объекта ТабличныйДокумент — ЧередованиеРасположенияСтраниц. Оно позволяет автоматически зеркалировать заданные поля для четных страниц без необходимости вручную разбивать документ на отдельные страницы.

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


ТабДок = Новый ТабличныйДокумент;
ТабДок.ПолеСлева  = 30;
ТабДок.ПолеСправа = 10;
ТабДок.ПолеСверху = 10;
ТабДок.ПолеСнизу  = 10;
ТабДок.ЧередованиеРасположенияСтраниц = ЧередованиеРасположенияСтраниц.ЗеркальноСлева;

При использовании системного перечисления ЧередованиеРасположенияСтраниц.ЗеркальноСлева платформа автоматически поменяет местами левое и правое поля на четных страницах. В результате четные страницы получат отступ справа 30 мм и отступ слева 10 мм, что идеально подходит для двухсторонней печати с левым переплетом.

Если же переплет или подшивка документа выполняется по верхнему краю, проанализируем другое значение этого перечисления — ЧередованиеРасположенияСтраниц.ЗеркальноСверху. В этом случае местами будут меняться верхнее и нижнее поля.

Важные ограничения и особенности работы с параметрами страниц

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

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

Управление двусторонней печатью из кода

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

ТабДок.ДвусторонняяПечать = ТипДвустороннейПечати.ПереворотПоШирокомуКраю;

Для свойства ДвусторонняяПечать доступны следующие значения из одноименного перечисления:

  1. ПереворотПоШирокомуКраю — стандартный режим для альбомной или книжной ориентации при боковом переплете.
  2. ПереворотПоКороткомуКраю — режим для переплета по верхней/короткой стороне.
  3. Нет — отключение двусторонней печати.
  4. Авто — использование настроек драйвера принтера по умолчанию.

Альтернативные варианты решения сложных задач верстки

Если задача требует вывода в один пакет страниц с принципиально разборными параметрами (разная ориентация страниц или кардинально разный макет), применимы следующие подходы:

  1. Массив табличных документов. Формируется массив объектов ТабличныйДокумент, где каждый элемент настроен со своими параметрами печати. Печать выполняется поочередным вызовом метода Напечатать() для каждого элемента массива.
  2. Механизмы БСП. При использовании подсистемы печати Библиотеки Стандартных Подсистем (БСП) можно передать массив печатных форм в команду печати, и подсистема сформирует единый пакет на отправку.
  3. Контроль четности страниц для разделов. Если документ состоит из нескольких актов или накладных и должен печататься на двух сторонах, важно, чтобы каждый новый раздел начинался с лицевой (нечетной) страницы. Для этого проверим текущее число страниц через метод КоличествоСтраниц(). Если число страниц нечетное, добавим пустую секцию и вызовем метод ВывестиГоризонтальныйРазделительСтраниц().
← На главную