Как в 1С настроить вывод печатной формы на лист формата А5 по ширине страницы?

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

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

Базовая программная установка параметров страницы

Для настройки параметров страницы у объекта ТабличныйДокумент предусмотрены специальные свойства. Разберем ключевые настройки, которые необходимо задать перед выводом формы или отправкой ее на печать:

  1. Формат бумаги — за него отвечает свойство РазмерСтраницы. Обратите особое внимание: наименование формата задается строкой, и литера «A» обязательно должна быть набрана латиницей: "A5". Если случайно указать русскую букву «А», платформа не выдаст ошибку, но драйвер принтера не распознает значение и применит формат по умолчанию (как правило, A4).
  2. Ориентация страницы — задается через системное перечисление ОриентацияСтраницы.Портрет (книжная) или ОриентацияСтраницы.Ландшафт (альбомная).
  3. Масштаб по ширине — свойство Автомасштаб = Истина заставляет платформу пропорционально сжать документ так, чтобы все колонки поместились на одном листе по ширине.

Посмотрим на пример кода в процедуре формирования печатной формы:


ТабДок = Новый ТабличныйДокумент;

// Формирование содержимого документа (вывод секций макета)
// ...

// Задаем параметры страницы
ТабДок.РазмерСтраницы = "A5";
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабДок.Автомасштаб = Истина;

Почему не срабатывает Автомасштаб и обрезаются поля

На практике программисты часто сталкиваются с ситуацией, когда строка ТабДок.Автомасштаб = Истина прописана в коде, но при выводе документ все равно разбивается на две страницы по горизонтали, а правая колонка уходит на второй лист. Проанализируем основные причины такого поведения и способы исправления ситуации:

  1. Влияние кэшированных настроек печати пользователя. Если в коде используется свойство ТабДок.ИмяПараметровПечати, платформа сохраняет индивидуальные настройки предварительного просмотра (масштаб, поля, принтер) в системном хранилище пользователя. Если сотрудник хотя бы один раз вручную установил масштаб 90% или формат А4, эти сохраненные настройки будут переопределять программные директивы. Чтобы сбросить кэш, измените строковый ключ (например, добавьте суффикс версии: ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПутевойЛист_V2";) либо очистите сохраненные настройки пользователя.
  2. Порядок вызова свойств в коде. Свойства форматирования листа и масштабирования должны применяться строго в самом конце процедуры, когда все области макета уже выведены в табличный документ, непосредственно перед возвратом или выводом объекта.
  3. Широкие поля документа. По умолчанию платформа закладывает стандартные отступы (около 10 мм с каждой стороны). На маленьком формате А5 (ширина которого в книжной ориентации составляет всего 148 мм) поля по 10 мм отнимают более 13% полезного пространства. Для решения проблемы уменьшим поля программно.

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


// Уменьшаем поля (значения указываются в миллиметрах)
ТабДок.ПолеСлева   = 5;
ТабДок.ПолеСправа  = 5;
ТабДок.ПолеСверху  = 5;
ТабДок.ПолеСнизу   = 5;

Не устанавливайте поля строго в 0 мм без необходимости: большинство офисных лазерных и струйных принтеров имеют непечатаемую аппаратную область протяжки бумаги (от 3 до 5 мм). При нулевых полях текст у границы листа физически обрежется принтером.

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

Некоторые модели принтеров или устаревшие версии драйверов некорректно обрабатывают строковую константу "A5". В этом случае мы можем задать размеры страницы в явном виде через миллиметры:


ТабДок.РазмерСтраницы = "Custom";
ТабДок.ШиринаСтраницы = 148; // миллиметры
ТабДок.ВысотаСтраницы = 210; // миллиметры
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабДок.Автомасштаб = Истина;

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

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


// При необходимости можно жестко указать принтер, где заправлена бумага А5:
// ТабДок.ИмяПринтера = "HP_LaserJet_A5_Tray";

// Печать без отображения стандартного диалога Windows
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);

Если у пользователей в принтер заправлены только листы А4, а путевой лист формата А5 нужно печатать компактно, можно вывести две страницы документа на одном стандартном листе А4 с помощью свойства тиражирования:


ТабДок.РазмерСтраницы = "A4";
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.ЭкземпляровНаСтранице = 2;
ТабДок.Автомасштаб = Истина;

Таким образом, комплексная настройка формата листа А5 включает в себя корректное написание латинского кода размера, включение автомасштабирования, уменьшение отступов полей и управление идентификатором параметров печати.

← На главную