Как решить проблему с игнорированием Масштаба печати в табличном документе 1С 8.3?

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

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

Анализируем причину конфликта: типовые механизмы и АвтоМасштаб

Первым делом проанализируем, как именно вызывается печать. Если в вашей конфигурации используется вызов через УниверсальныеМеханимы.НапечататьДокумент, то именно здесь кроется корень проблемы. Дело в том, что внутри этой типовой процедуры часто заложена логика, которая принудительно устанавливает свойство АвтоМасштаб в значение Истина, если не переданы специфические настройки. Как только АвтоМасштаб становится равным Истина, любое значение, записанное в МасштабПечати, обнуляется или игнорируется платформой.

Выясним причину такого поведения: типовой механизм стремится «помочь» пользователю уместить документ по ширине страницы, но тем самым блокирует возможность жестко задать, например, 50% или 70% от оригинала. Чтобы обойти это ограничение, нам придется отказаться от использования универсального механизма в пользу прямого вывода или написать свою процедуру-обертку.

Правильная последовательность установки свойств

Разберем по шагам, как правильно подготовить ТабличныйДокумент к печати. Платформа 1С очень чувствительна к порядку установки свойств. Если вы сначала установите масштаб, а потом измените режим масштабирования, настройки могут сброситься. Рекомендуется следующий порядок:

  1. Сначала отключаем автоматическое масштабирование: ТабДокумент.АвтоМасштаб = Ложь;
  2. Затем устанавливаем конкретный процент: ТабДокумент.МасштабПечати = 50;
  3. При необходимости задаем ориентацию и размер страницы.

Рассмотрим пример кода, который гарантированно применяет настройки при прямом выводе:


Объект = ДокументПечати.ПолучитьОбъект();
ТабДокумент = Объект.ПечатьБЛ(); // Получаем сформированный табличный документ
ТабДокумент.АвтоМасштаб = Ложь;
ТабДокумент.МасштабПечати = 50;
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
// Важно использовать НеИспользовать, чтобы диалог не перекрыл программные настройки
ТабДокумент.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);

Проблема предварительного просмотра и КлючПараметровПечати

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

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

Работа с нестандартными размерами и полями

Рассмотрим пример, когда необходимо напечатать этикетку или специфический бланк. В этом случае мы часто используем РазмерСтраницы = "Custom". Проанализируем пример кода для работы с принтером этикеток, где важна точность каждого миллиметра:


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

ТабДок.РазмерСтраницы = "Custom";
ТабДок.ВысотаСтраницы = 40; // в миллиметрах
ТабДок.ШиринаСтраницы = 58; 
ТабДок.ПолеСлева = 0;
ТабДок.ПолеСправа = 0;
ТабДок.ПолеСверху = 0;
ТабДок.ПолеСнизу = 0;

ТабДок.АвтоМасштаб = Ложь;
ТабДок.МасштабПечати = 100;
ТабДок.ИмяПринтера = "Zebra_Label_Printer";
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);

Важный нюанс: Обратите внимание на обнуление полей. Платформа 1С суммирует значения свойств ПолеСлева, ПолеСправа и т.д. с физическими непечатными областями, заданными в драйвере принтера. Если ваш масштаб «съезжает», попробуйте установить все поля в 0.

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

Как отмечают разработчики, метод ТабДокумент.Показать() открывает стандартное окно просмотра, которое может инициализироваться до того, как драйвер принтера передаст информацию о возможных границах печати. В результате визуально мы видим масштаб 100%, хотя при вызове метода Напечатать() с параметром РежимИспользованияДиалогаПечати.НеИспользовать всё выводится корректно. Если для вас критично отображение масштаба именно в окне просмотра, попробуйте сначала вызвать ТабДокумент.Записать() во временный PDF-файл с нужными параметрами, а затем открывать уже его. Это «жесткий» способ фиксации макета, не зависящий от капризов платформы 1С.

Итоги и рекомендации

Подводя итог нашему анализу, выделим основные правила для успешного управления масштабом:

  1. Избегайте УниверсальныеМеханимы.НапечататьДокумент, если вам нужен специфический МасштабПечати, так как этот механизм переопределяет АвтоМасштаб.
  2. Всегда устанавливайте АвтоМасштаб = Ложь непосредственно перед установкой МасштабПечати.
  3. Если настройки игнорируются — очищайте КлючПараметровПечати.
  4. Для проверки результата используйте физическую печать или печать на виртуальный принтер (PDF), так как встроенный предпросмотр 1С может вводить в заблуждение.

Соблюдение этой последовательности действий позволит вам добиться предсказуемого поведения печатных форм в любых конфигурациях на платформе 8.3.

← На главную