Почему в 1С игнорируется программный масштаб печати и как это исправить

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

При разработке печатных форм в 1С (особенно в конфигурациях на обычных формах, таких как УТ 10.3, УПП 1.3 или КА 1.1) программисты часто сталкиваются с ситуацией, когда заданные в коде параметры страницы — МасштабПечати, АвтоМасштаб или размеры полей — попросту не применяются. Вы устанавливаете масштаб 10% или 50%, а система упорно выводит документ в 100% или включает автоматическое масштабирование под ширину листа.

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

Причина 1: Конфликт свойств АвтоМасштаб и МасштабПечати

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

Разберем правильный порядок установки этих параметров в коде:


ТабДокумент = Новый ТабличныйДокумент;
// Сначала отключаем автоматическое масштабирование
ТабДокумент.АвтоМасштаб = Ложь; 
// Теперь задаем конкретное значение масштаба в процентах
ТабДокумент.МасштабПечати = 10; 
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;

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

Причина 2: Влияние свойства ИмяПараметровПечати

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

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

// ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_МойДокумент";

Если масштаб применился — значит, старые настройки пользователя «перебивали» ваш код. Выясним, как сбросить эти настройки программно, если они мешают:


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

Причина 3: Особенности работы УниверсальныеМеханизмы.НапечататьДокумент

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


Если НЕ ПечДокумент.АвтоМасштаб И НЕ ЗначениеЗаполнено(ПечДокумент.ИмяПринтера) Тогда
    ПечДокумент.АвтоМасштаб = Истина;
КонецЕсли;

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

Причина 4: Ошибка синхронизации в форме «ПечатьДокументов»

Выясним, что происходит, когда документ попадает в общую форму печати. В некоторых релизах УТ 10.3 наблюдается программная недоработка: объект ТабличныйДокумент передается в форму, но элементы управления на самой форме (поле табличного документа) не всегда корректно подхватывают свойства переданного объекта.

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

Вариант А: Передача параметров через структуру (рекомендуется)

При вызове процедуры НапечататьДокумент можно передать последний параметр — сам табличный документ, который будет служить источником настроек. Посмотрим на пример вызова:


УниверсальныеМеханизмы.НапечататьДокумент(
    ТабДокумент, 
    КоличествоЭкземпляров, 
    НаПринтер, 
    Заголовок, 
    Ссылка, 
    ТабДокумент // Последний параметр указывает источник параметров печати
);

Вариант Б: Модификация общей формы (если Вариант А не помог)

Если вы имеете возможность править конфигурацию, найдите общую форму ПечатьДокументов и в процедуре ПриОткрытии добавьте явное присвоение свойств от переданного документа к элементу формы:


// В процедуре ПриОткрытии общей формы печати
ЭлементыФормы.ПолеТабличногоДокумента.АвтоМасштаб = ПечатныйДокумент.АвтоМасштаб;
ЭлементыФормы.ПолеТабличногоДокумента.МасштабПечати = ПечатныйДокумент.МасштабПечати;
ЭлементыФормы.ПолеТабличногоДокумента.ОриентацияСтраницы = ПечатныйДокумент.ОриентацияСтраницы;
// Аналогично для полей
ЭлементыФормы.ПолеТабличногоДокумента.ПолеСверху = ПечатныйДокумент.ПолеСверху;

Дополнительные технические нюансы

  1. Минимальный порог масштаба: Платформа 1С имеет внутренние ограничения. Масштаб менее 10% может игнорироваться драйвером принтера или самой платформой, так как это выходит за рамки физических возможностей формирования сетки печати.
  2. Влияние драйвера принтера: Если вы работаете через терминальный сервер (RDP), проверьте настройки принтера на локальном компьютере. Если в драйвере установлена галочка «По размеру страницы» (Scale to fit), настройки из 1С будут игнорироваться самим принтером на этапе рендеринга.
  3. Метод Показать(): Если вы используете ТабДокумент.Показать() вместо типовых механизмов, помните, что это окно также может запоминать настройки. Для гарантии используйте уникальное ИмяПараметровПечати для каждой специфической формы.

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

← На главную