При разработке печатных форм в 1С (особенно в конфигурациях на обычных формах, таких как УТ 10.3, УПП 1.3 или КА 1.1) программисты часто сталкиваются с ситуацией, когда заданные в коде параметры страницы — МасштабПечати, АвтоМасштаб или размеры полей — попросту не применяются. Вы устанавливаете масштаб 10% или 50%, а система упорно выводит документ в 100% или включает автоматическое масштабирование под ширину листа.
В этой статье мы подробно разберем, почему так происходит, как работают приоритеты настроек печати в платформе 1С и какие изменения нужно внести в код или типовые механизмы, чтобы добиться желаемого результата. Проанализируем ситуацию на примере работы с процедурой УниверсальныеМеханизмы.НапечататьДокумент.
Первое, что нам необходимо рассмотреть — это взаимоисключающий характер свойств табличного документа. В платформе 1С свойства АвтоМасштаб и МасштабПечати работают по принципу приоритета. Если свойство АвтоМасштаб установлено в значение Истина, то значение, записанное в МасштабПечати, будет полностью игнорироваться, даже если вы установили его строчкой ниже.
Разберем правильный порядок установки этих параметров в коде:
ТабДокумент = Новый ТабличныйДокумент;
// Сначала отключаем автоматическое масштабирование
ТабДокумент.АвтоМасштаб = Ложь;
// Теперь задаем конкретное значение масштаба в процентах
ТабДокумент.МасштабПечати = 10;
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
Если после выполнения этого кода масштаб все равно сбрасывается, значит, в дело вступают механизмы сохранения настроек пользователя или особенности типовых процедур конфигурации.
Свойство ИмяПараметровПечати предназначено для сохранения настроек печати (принтер, поля, ориентация, масштаб), которые пользователь установил вручную в диалоге печати. Проблема заключается в том, что сохраненные настройки имеют высший приоритет над теми, что прописаны программно в коде.
Проанализируем логику системы: если у документа заполнено ИмяПараметровПечати, 1С при открытии формы печати лезет в системное хранилище настроек. Если она находит там запись для текущего пользователя, она перезаписывает свойства вашего ТабДокумент теми, что хранятся в базе. Чтобы проверить, в этом ли причина, попробуйте временно закомментировать строку:
// ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_МойДокумент";
Если масштаб применился — значит, старые настройки пользователя «перебивали» ваш код. Выясним, как сбросить эти настройки программно, если они мешают:
// Очистка сохраненных настроек печати для конкретного ключа
КлючНастроек = "Общее/НастройкиПечатиТабличныхДокументов/ПАРАМЕТРЫ_ПЕЧАТИ_МойДокумент";
ХранилищеСистемныхНастроек.Удалить(КлючНастроек, "", ИмяПользователя());
В типовых конфигурациях на обычных формах печать часто инициируется через общую процедуру УниверсальныеМеханизмы.НапечататьДокумент. Исследование этой процедуры показывает, что внутри нее скрыта логика, которая может принудительно изменять параметры вашего документа. Рассмотрим фрагмент типового кода, который часто встречается в конфигурациях:
Если НЕ ПечДокумент.АвтоМасштаб И НЕ ЗначениеЗаполнено(ПечДокумент.ИмяПринтера) Тогда
ПечДокумент.АвтоМасштаб = Истина;
КонецЕсли;
Здесь система логично (с точки зрения разработчиков фирмы 1С) предполагает: если масштаб не автоматический и принтер не выбран, нужно включить АвтоМасштаб, чтобы документ не «развалился» при печати. Но для вашей задачи это может быть критично. Кроме того, данная процедура открывает общую форму ПечатьДокументов.
Выясним, что происходит, когда документ попадает в общую форму печати. В некоторых релизах УТ 10.3 наблюдается программная недоработка: объект ТабличныйДокумент передается в форму, но элементы управления на самой форме (поле табличного документа) не всегда корректно подхватывают свойства переданного объекта.
Чтобы решить эту проблему раз и навсегда, рассмотрим два варианта:
Вариант А: Передача параметров через структуру (рекомендуется)
При вызове процедуры НапечататьДокумент можно передать последний параметр — сам табличный документ, который будет служить источником настроек. Посмотрим на пример вызова:
УниверсальныеМеханизмы.НапечататьДокумент(
ТабДокумент,
КоличествоЭкземпляров,
НаПринтер,
Заголовок,
Ссылка,
ТабДокумент // Последний параметр указывает источник параметров печати
);
Вариант Б: Модификация общей формы (если Вариант А не помог)
Если вы имеете возможность править конфигурацию, найдите общую форму ПечатьДокументов и в процедуре ПриОткрытии добавьте явное присвоение свойств от переданного документа к элементу формы:
// В процедуре ПриОткрытии общей формы печати
ЭлементыФормы.ПолеТабличногоДокумента.АвтоМасштаб = ПечатныйДокумент.АвтоМасштаб;
ЭлементыФормы.ПолеТабличногоДокумента.МасштабПечати = ПечатныйДокумент.МасштабПечати;
ЭлементыФормы.ПолеТабличногоДокумента.ОриентацияСтраницы = ПечатныйДокумент.ОриентацияСтраницы;
// Аналогично для полей
ЭлементыФормы.ПолеТабличногоДокумента.ПолеСверху = ПечатныйДокумент.ПолеСверху;
ТабДокумент.Показать() вместо типовых механизмов, помните, что это окно также может запоминать настройки. Для гарантии используйте уникальное ИмяПараметровПечати для каждой специфической формы.Подведем итог: для корректной установки масштаба необходимо убедиться, что АвтоМасштаб выключен, ИмяПараметровПечати не перекрывает ваши данные старыми настройками, а типовые механизмы (процедуры и формы печати) корректно транслируют ваши настройки в элемент управления формы.