Почему не применяются программно заданные параметры печати табличного документа в 1С?

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

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

Посмотрим на типичный пример инициализации параметров табличного документа:


ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДокумент.ПолеСверху = 0;
ТабДокумент.ПолеСлева = 5;
ТабДокумент.ПолеСнизу = 0;
ТабДокумент.ПолеСправа = 5;
ТабДокумент.АвтоМасштаб = Ложь;
ТабДокумент.МасштабПечати = 95;
ТабДокумент.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Акт";

Разберем основные причины, из-за которых итоговые параметры при выводе на экран или принтер могут отличаться от программно установленных.

Причина 1. Переопределение настроек в типовой форме печати

Проанализируем типовую архитектуру конфигураций на обычных формах (например, «Управление торговлей 10.3», «Комплексная автоматизация 1.1», «Управление производственным предприятием 1.3»). В этих системах печать большинства документов выполняется через вызов общей процедуры:

УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, ...);

При этом открывается общая форма печати документов. В логике этой формы и процедурах модуля УниверсальныеМеханизмы выполняется собственная инициализация параметров страницы. Если переданный табличный документ попадает в типовой механизм управления печатью, форма считывает ранее сохраненные настройки пользователя или задает параметры по умолчанию, полностью перезаписывая значения свойств ОриентацияСтраницы, МасштабПечати и полей документа.

Чтобы решить эту проблему при использовании типовых подсистем, выполним следующие шаги:

  1. Откроем модуль общей формы печати документов или процедуру УниверсальныеМеханизмы.НапечататьДокумент и проверим, какие параметры передаются в форму в качестве дополнительных параметров.
  2. Убедимся, что параметры макета не перезаписываются принудительно процедурами управления печатью.
  3. Если требуется прямая печать без открытия общей формы и участия типовых механизмов переопределения, воспользуемся стандартным методом самого объекта ТабличныйДокумент:

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

Причина 2. Механизм сохранения настроек через КлючПараметровПечати

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

Если пользователь (или разработчик в процессе отладки) хотя бы один раз изменил параметры страницы и нажал «ОК», платформа связывает эти значения с указанным ключом (в нашем примере — "ПАРАМЕТРЫ_ПЕЧАТИ_Акт"). При последующих вызовах платформа автоматически восстанавливает сохраненные значения поверх установленных программно.

Разберем варианты исправления ситуации с ключом параметров:

  1. Изменение имени ключа. Укажем новое уникальное строковое значение (например, добавим номер версии: "ПАРАМЕТРЫ_ПЕЧАТИ_Акт_v2"). В этом случае старые настройки сбросятся для всех пользователей.
  2. Отказ от использования ключа. Если необходимо гарантировать жестко заданный макет без сохранения индивидуальных настроек пользователей, присвоим свойству пустую строку: ТабДокумент.КлючПараметровПечати = "";.
  3. Очистка хранилища настроек. Очистим сохраненные параметры печати для конкретного ключа программно через ХранилищеОбщихНастроек или интерактивно через интерфейс управления настройками пользователей.

Причина 3. Конфликт параметров масштабирования и аппаратные ограничения

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

  1. Взаимодействие свойств масштаба. Если свойство АвтоМасштаб установлено в значение Истина, свойство МасштабПечати полностью игнорируется платформой. Для использования фиксированного процента масштаба обязательно устанавливаем ТабДокумент.АвтоМасштаб = Ложь;.
  2. Аппаратные поля принтера (Hardware Margins). Установка нулевых полей (ПолеСверху = 0, ПолеСнизу = 0) корректно обрабатывается платформой 1С, но драйвер конкретного физического принтера не может печатать в непечатаемой области. В результате драйвер принудительно сдвигает изображение или добавляет минимальные технологические отступы, что визуально меняет поля документа.
← На главную