Как установить произвольный (Custom) размер страницы для табличного документа в 1С?

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

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

Анализ базового кода и типичных ошибок

Рассмотрим стандартный подход, который часто не срабатывает с первого раза. Проанализируем пример кода, где разработчик пытается задать размеры 58х40 мм:


ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ОриентацияСтраницы  = ОриентацияСтраницы.Портрет;
ТабДокумент.ОтображатьЗаголовки = Ложь;
ТабДокумент.ОтображатьСетку	 = Ложь;
ТабДокумент.Защита			  = Ложь;
ТабДокумент.РазмерСтраницы = "Custom";
ТабДокумент.ВысотаСтраницы = 40;
ТабДокумент.ШиринаСтраницы = 58;
ТабДокумент.Показать();

На первый взгляд код выглядит корректно, однако на этапе предварительного просмотра или печати документ все равно превращается в А4. Выясним причину: 1С:Предприятие тесно взаимодействует с драйвером принтера, установленного в системе по умолчанию. Если драйвер «не знает» формата Custom или не поддерживает указанные физические размеры, платформа сбрасывает настройки к стандартным.

Решение 1: Последовательность установки свойств

В программировании на платформе 1С порядок установки свойств объекта ТабличныйДокумент имеет значение. Выяснено опытным путем, что свойства ВысотаСтраницы и ШиринаСтраницы следует назначать строго после того, как свойству РазмерСтраницы присвоено строковое значение "Custom". Также рекомендуется предварительно очистить параметры печати, чтобы старые настройки не влияли на новый документ.

Доработаем наш код с учетом этих нюансов:


ТабДокумент = Новый ТабличныйДокумент;
// Очищаем ключ параметров печати, чтобы не подтянулись старые настройки пользователя
ТабДокумент.КлючПараметровПечати = ""; 

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

// Установка полей в значение 0 часто критична для малоформатной печати
ТабДокумент.ПолеСлева   = 0;
ТабДокумент.ПолеСправа  = 0;
ТабДокумент.ПолеСверху  = 0;
ТабДокумент.ПолеСнизу   = 0;

ТабДокумент.АвтоМасштаб = Истина;

Решение 2: Влияние драйвера принтера

Проанализируем ситуацию, когда код написан верно, но результат остается прежним. Это часто связано с тем, что текущий принтер (выбранный в 1С или установленный по умолчанию в Windows) имеет жесткие ограничения по минимальным и максимальным размерам бумаги. Например, офисные лазерные принтеры редко поддерживают листы короче 10-14 см.

Посмотрим на рекомендации, которые помогают диагностировать проблему:

  1. Проверка через виртуальный принтер: Попробуйте сменить принтер по умолчанию на Microsoft XPS Document Writer или Microsoft Print to PDF. Эти драйверы гибко работают с произвольными размерами. Если в XPS-документе размер отобразится корректно, значит, проблема в драйвере вашего физического принтера.
  2. Обновление драйверов: Убедитесь, что используете актуальную версию драйвера, желательно с поддержкой протокола прямой печати.
  3. Прямая печать без предпросмотра: Окно предварительного просмотра может использовать настройки по умолчанию, искажая реальную картину. Используйте метод ТабДокумент.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать); для проверки фактического вывода.

Решение 3: Регистрация размера формы в Windows

Если принтер (например, принтер этикеток) упорно не видит Custom из кода 1С, необходимо «помочь» ему на уровне операционной системы. Рассмотрим, как создать системную форму документа:

  1. Откройте «Панель управления» — «Устройства и принтеры».
  2. Выберите любой принтер и нажмите в верхнем меню «Свойства сервера печати».
  3. На вкладке «Формы» установите галочку «Создать новую форму».
  4. Введите имя (например, «Этикетка_58х40») и укажите точные размеры.
  5. Сохраните форму.

После этого в коде 1С вместо "Custom" можно попробовать указать имя вашей созданной формы: ТабДокумент.РазмерСтраницы = "Этикетка_58х40"; (хотя 1С официально поддерживает ограниченный набор предопределенных имен, этот метод заставляет драйвер принтера корректно обрабатывать размеры).

Решение 4: Работа с Ключом параметров печати

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

Как с этим бороться:

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

Для гарантированного результата при установке нестандартного размера страницы, всегда проверяйте совокупность трех факторов:

  1. Программный код: Убедитесь, что РазмерСтраницы = "Custom" идет первым, поля обнулены, а АвтоМасштаб установлен.
  2. Драйвер принтера: Проверьте, поддерживает ли устройство такие физические размеры. Помните, что сумма полей не должна быть больше самого размера страницы, иначе произойдет автоматический сброс на А4.
  3. Кэш настроек: Не забывайте очищать КлючПараметровПечати в процессе отладки, чтобы исключить влияние старых сохранений.

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

← На главную