При разработке печатных форм, таких как ценники, этикетки или специфические бланки, программисты часто сталкиваются с ситуацией, когда 1С упорно игнорирует заданные размеры и выводит документ в формате А4. Разберем подробно, почему это происходит и как заставить систему использовать нужные нам параметры ширины и высоты.
Рассмотрим стандартный подход, который часто не срабатывает с первого раза. Проанализируем пример кода, где разработчик пытается задать размеры 58х40 мм:
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабДокумент.ОтображатьЗаголовки = Ложь;
ТабДокумент.ОтображатьСетку = Ложь;
ТабДокумент.Защита = Ложь;
ТабДокумент.РазмерСтраницы = "Custom";
ТабДокумент.ВысотаСтраницы = 40;
ТабДокумент.ШиринаСтраницы = 58;
ТабДокумент.Показать();
На первый взгляд код выглядит корректно, однако на этапе предварительного просмотра или печати документ все равно превращается в А4. Выясним причину: 1С:Предприятие тесно взаимодействует с драйвером принтера, установленного в системе по умолчанию. Если драйвер «не знает» формата Custom или не поддерживает указанные физические размеры, платформа сбрасывает настройки к стандартным.
В программировании на платформе 1С порядок установки свойств объекта ТабличныйДокумент имеет значение. Выяснено опытным путем, что свойства ВысотаСтраницы и ШиринаСтраницы следует назначать строго после того, как свойству РазмерСтраницы присвоено строковое значение "Custom". Также рекомендуется предварительно очистить параметры печати, чтобы старые настройки не влияли на новый документ.
Доработаем наш код с учетом этих нюансов:
ТабДокумент = Новый ТабличныйДокумент;
// Очищаем ключ параметров печати, чтобы не подтянулись старые настройки пользователя
ТабДокумент.КлючПараметровПечати = "";
ТабДокумент.РазмерСтраницы = "Custom";
// Размеры указываются в миллиметрах
ТабДокумент.ВысотаСтраницы = 40;
ТабДокумент.ШиринаСтраницы = 58;
// Установка полей в значение 0 часто критична для малоформатной печати
ТабДокумент.ПолеСлева = 0;
ТабДокумент.ПолеСправа = 0;
ТабДокумент.ПолеСверху = 0;
ТабДокумент.ПолеСнизу = 0;
ТабДокумент.АвтоМасштаб = Истина;
Проанализируем ситуацию, когда код написан верно, но результат остается прежним. Это часто связано с тем, что текущий принтер (выбранный в 1С или установленный по умолчанию в Windows) имеет жесткие ограничения по минимальным и максимальным размерам бумаги. Например, офисные лазерные принтеры редко поддерживают листы короче 10-14 см.
Посмотрим на рекомендации, которые помогают диагностировать проблему:
Microsoft XPS Document Writer или Microsoft Print to PDF. Эти драйверы гибко работают с произвольными размерами. Если в XPS-документе размер отобразится корректно, значит, проблема в драйвере вашего физического принтера.ТабДокумент.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать); для проверки фактического вывода.Если принтер (например, принтер этикеток) упорно не видит Custom из кода 1С, необходимо «помочь» ему на уровне операционной системы. Рассмотрим, как создать системную форму документа:
После этого в коде 1С вместо "Custom" можно попробовать указать имя вашей созданной формы: ТабДокумент.РазмерСтраницы = "Этикетка_58х40"; (хотя 1С официально поддерживает ограниченный набор предопределенных имен, этот метод заставляет драйвер принтера корректно обрабатывать размеры).
Проанализируем важный параметр — КлючПараметровПечати. Система 1С запоминает настройки печати для каждого ключа (обычно это имя отчета или обработки) для каждого пользователя. Если вы один раз распечатали документ с этого ключа на А4, система будет «подсовывать» эти настройки при каждом следующем вызове, игнорируя ваши изменения в коде.
Как с этим бороться:
ТабДокумент.КлючПараметровПечати = ""; (пустая строка заставляет систему каждый раз вычислять параметры заново).Для гарантированного результата при установке нестандартного размера страницы, всегда проверяйте совокупность трех факторов:
РазмерСтраницы = "Custom" идет первым, поля обнулены, а АвтоМасштаб установлен.КлючПараметровПечати в процессе отладки, чтобы исключить влияние старых сохранений.Выяснив эти особенности и применив их на практике, вы сможете добиться точного соответствия печатной формы заданным размерам в любых прикладных решениях на базе 1С.