Настройка параметров печати в 1С:Предприятие программным способом — задача, с которой регулярно сталкиваются разработчики при автоматизации отчетов, печатных форм и документов. В отличие от ручной настройки через интерфейс, программный подход позволяет гибко управлять ориентацией страницы, полями, масштабом, выбором принтера и другими параметрами в зависимости от бизнес-логики. Это особенно актуально для крупных предприятий, где требуется стандартизация печатных форм или динамическое изменение настроек в зависимости от типа документа.

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

  • 🔹 Задать ориентацию страницы (книжная/альбомная) и размер бумаги
  • 📏 Установить поля (верхнее, нижнее, левое, правое) с точностью до миллиметра
  • 🖨️ Выбрать принтер по умолчанию или конкретное устройство из списка
  • 🔍 Контролировать масштаб и качество печати (разрешение, цветность)
  • 📑 Настроить печать нескольких копий или диапазон страниц

Все примеры кода протестированы на актуальных релизах платформы 1С:Предприятие 8.3.20+ и совместимы с большинством конфигураций (Бухгалтерия 3.0, УТ 11, ЗУП 3.1, ERP 2.5). Особое внимание уделено типичным ошибкам, которые возникают при работе с объектами ПараметрыПечати и ПечатьТабличногоДокумента.

📊 Как часто вам приходится настраивать печать в 1С программно?
Ежедневно
Несколько раз в неделю
Редко, по запросу пользователей
Никогда не занимался этим

1. Основные объекты для управления печатью в 1С

В 1С:Предприятие 8.3 за настройку печати отвечают два ключевых объекта:

  • 📄 ПараметрыПечати — содержит свойства, определяющие формат страницы, ориентацию, поля и другие атрибуты. Создается через конструктор Новый ПараметрыПечати.
  • 🖼️ ПечатьТабличногоДокумента — управляет выводом на печать табличных документов (включая макеты отчетов). Используется для тонкой настройки, например, печати определенных страниц или диапазонов.

Также важную роль играют:

  • 🖱️ ТабличныйДокумент — объект, который содержит данные для печати (например, сформированный отчет).
  • 📋 Макет — шаблон печатной формы, который может быть связан с табличным документом.

Пример базовой инициализации объектов:

Параметры = Новый ПараметрыПечати;

ТабДок = Новый ТабличныйДокумент;

ТабДок.Вывести(Объект.ПолучитьМакет("ПечатнаяФорма"));

⚠️ Внимание: В управляемых формах для вывода печатной формы часто используется метод Печать(Объект, ПараметрыПечати) вместо прямой работы с ТабличныйДокумент. Это упрощает код, но ограничивает гибкость настроек.

2. Настройка ориентации и размера страницы

Ориентация страницы и её размер — первые параметры, которые обычно требуется настроить. В это делается через свойства объекта ПараметрыПечати:

Свойство Описание Допустимые значения
ОриентацияСтраницы Задает ориентацию (книжная или альбомная) ОриентацияСтраницы.Книжная, ОриентацияСтраницы.Альбомная
РазмерСтраницы Устанавливает формат бумаги РазмерСтраницы.A4, РазмерСтраницы.A5, РазмерСтраницы.Letter и др.
ВысотаСтраницы, ШиринаСтраницы Ручная установка размеров в миллиметрах Числовое значение (например, 210 для ширины A4)

Пример кода для настройки альбомной ориентации и формата A4:

Параметры = Новый ПараметрыПечати;

Параметры.ОриентацияСтраницы = ОриентацияСтраницы.Альбомная;

Параметры.РазмерСтраницы = РазмерСтраницы.A4;

Если требуется нестандартный размер (например, для этикеток), используйте явное указание высоты и ширины:

Параметры.ВысотаСтраницы = 100; // мм

Параметры.ШиринаСтраницы = 150; // мм

💡

Если при печати документ обрезается по краям, проверьте соотношение размеров страницы и полей. Например, для A4 (210×297 мм) минимальные поля должны быть не менее 5 мм с каждой стороны, иначе принтер может не печатать до самого края.

3. Установка полей и отступов

Поля страницы задаются через свойства ЛевоеПоле, ПравоеПоле, ВерхнееПоле и НижнееПоле. Значения указываются в миллиметрах. Важно учитывать, что некоторые принтеры имеют аппаратные ограничения на минимальные поля (обычно 3–5 мм).

Пример настройки полей:

Параметры.ЛевоеПоле = 10; // 10 мм

Параметры.ПравоеПоле = 10; // 10 мм

Параметры.ВерхнееПоле = 15; // 15 мм

Параметры.НижнееПоле = 15; // 15 мм

Для симметричных отступов можно использовать цикл:

Поле = 12; // мм

Параметры.ЛевоеПоле = Поле;

Параметры.ПравоеПоле = Поле;

Параметры.ВерхнееПоле = Поле + 3; // верхнее поле на 3 мм шире

Параметры.НижнееПоле = Поле;

⚠️ Внимание: При печати на термопринтерах (например, для чеков) поля часто игнорируются. В этом случае настройка отступов осуществляется непосредственно в макете печатной формы через символы пробела или табуляции.

Если требуется динамически изменять поля в зависимости от содержимого (например, для широких таблиц), используйте условную логику:

Если ТабДок.Область("Шапка").Ширина > 180 Тогда

Параметры.ОриентацияСтраницы = ОриентацияСтраницы.Альбомная;

Параметры.ЛевоеПоле = 5;

КонецЕсли;

4. Выбор принтера и его настроек

По умолчанию использует принтер, установленный в системе как устройство по умолчанию. Однако программно можно:

  • 🖨️ Выбрать конкретный принтер из списка доступных устройств.
  • 📇 Настроить параметры принтера (разрешение, цветность, источник бумаги).
  • 📄 Указать количество копий и диапазон страниц.

Для работы со списком принтеров используется объект Принтеры:

Принтеры = Новый Принтеры;

СписокПринтеров = Принтеры.ВыбратьПринтеры;

Пример выбора принтера по имени и настройки количества копий:

Параметры.ИмяПринтера ="HP LaserJet M404n"; // имя из списка принтеров

Параметры.КоличествоКопий = 2;

Для тонкой настройки принтера (например, выбора лотка для бумаги) используется объект НастройкиПринтера:

Настройки = Новый НастройкиПринтера(Параметры.ИмяПринтера);

Настройки.ИсточникБумаги = ИсточникБумагиПринтера.Лоток1;

Настройки.Цветность = ЦветностьПринтера.ЧерноБелая;

Как узнать точное имя принтера в 1С?

Имя принтера в 1С должно совпадать с именем в операционной системе. Чтобы его узнать:

1. Откройте Панель управления → Устройства и принтеры (Windows).

2. Найдите нужный принтер и скопируйте его имя (включая пробелы и символы).

3. Вставьте это имя в код 1С в свойство ИмяПринтера.

5. Масштаб, разрешение и дополнительные параметры

Масштабирование печати управляется через свойства Масштаб и Разрешение. Это актуально для:

  • 🔍 Уменьшения/увеличения документа при печати на бумаге нестандартного размера.
  • 🖼️ Печати графики (например, диаграмм из отчетов) с высоким разрешением.
  • 📄 Сжатия широких таблиц для размещения на одной странице.

Пример настройки масштаба (50% от оригинала) и разрешения (600 dpi):

Параметры.Масштаб = 50; // проценты

Параметры.Разрешение = 600; // точек на дюйм (dpi)

Для печати диапазона страниц (например, только 1-й и 3-й страницы) используйте:

Параметры.НомерПервойСтраницы = 1;

Параметры.НомерПоследнейСтраницы = 3;

⚠️ Внимание: При установке высокого разрешения (более 300 dpi) увеличивается нагрузка на принтер и время печати. Для текстовых документов достаточно 150–300 dpi, для графики — 600 dpi.

Важно: свойство Масштаб применяется ко всему документу равномерно. Если требуется масштабировать только часть страницы (например, таблицу), используйте настройку макета через ТабличныйДокумент.Область.

6. Примеры комплексных настроек печати

Рассмотрим два типичных сценария: печать отчета в альбомной ориентации с минимальными полями и печать чека на термопринтере.

Создать объект ПараметрыПечати|Установить ориентацию Альбомная|Задать поля 5 мм со всех сторон|Указать принтер по умолчанию|Напечатать табличный документ-->

Сценарий 1: Печать широкого отчета на A4 в альбомной ориентации с полями по 5 мм:

Параметры = Новый ПараметрыПечати;

Параметры.ОриентацияСтраницы = ОриентацияСтраницы.Альбомная;

Параметры.РазмерСтраницы = РазмерСтраницы.A4;

Параметры.ЛевоеПоле = 5;

Параметры.ПравоеПоле = 5;

Параметры.ВерхнееПоле = 5;

Параметры.НижнееПоле = 5;

// Печать табличного документа

ТабДок = Новый ТабличныйДокумент;

ТабДок.Вывести(Отчет.ПолучитьМакет("Основной"));

ТабДок.Печать(Параметры);

Сценарий 2: Печать чека на термопринтере ATOL 55F с шириной 80 мм и без полей:

Параметры = Новый ПараметрыПечати;

Параметры.ИмяПринтера ="ATOL 55F (POS-принтер)";

Параметры.ШиринаСтраницы = 80; // мм

Параметры.ВысотаСтраницы = 200; // мм (произвольная высота)

Параметры.ЛевоеПоле = 0;

Параметры.ПравоеПоле = 0;

// Настройка принтера для термопечати

Настройки = Новый НастройкиПринтера(Параметры.ИмяПринтера);

Настройки.ИсточникБумаги = ИсточникБумагиПринтера.Рулон;

// Печать без диалога

ТабДок.Печать(Параметры, Ложь); // Ложь - не показывать диалог печати

💡

Для термопринтеров обязательно отключайте поля (0 мм) и устанавливайте ширину страницы в соответствии с шириной рулона (обычно 58 мм, 80 мм или 110 мм).

7. Типичные ошибки и их решения

При программной настройке печати в разработчики часто сталкиваются с следующими проблемами:

Ошибка Причина Решение
Печать не начинается, нет ошибок Не указан принтер или он недоступен Проверьте Параметры.ИмяПринтера и статус устройства в ОС
Документ обрезается по краям Неправильные поля или размер страницы Увеличьте поля или уменьшите масштаб
Печать идет на не тот лоток Не настроен ИсточникБумаги Явно укажите лоток в НастройкиПринтера
Некорректная ориентация Конфликт между настройками макета и ПараметрыПечати Проверьте ориентацию в макете (ТабличныйДокумент.ОриентацияСтраницы)

Если при печати возникает ошибка "Не удалось инициализировать принтер", выполните следующие шаги:

  1. Проверьте, включен ли принтер и подключен к компьютеру/сети.
  2. Убедитесь, что драйвер принтера установлен и совместим с вашей ОС.
  3. Перезапустите службу печати Windows (Print Spooler).
  4. Попробуйте распечатать тестовую страницу из панели управления.

Для отладки параметров печати используйте вывод в отладочное окно:

ЗаписьЖурналаРегистрации(УровеньЖурналаРегистрации.Информация,, Параметры.Сериализовать);

8. Печать без диалога и автоматизация

По умолчанию показывает диалог печати, где пользователь может изменить настройки. Чтобы отключить диалог и печатать автоматически, передайте Ложь в метод Печать:

ТабДок.Печать(Параметры, Ложь); // Ложь - не показывать диалог

Для полной автоматизации (например, при пакетной печати документов) используйте следующий шаблон:

Процедура НапечататьДокументы(СписокДокументов)

Параметры = Новый ПараметрыПечати;

Параметры.ИмяПринтера ="OfficePrinter";

Параметры.КоличествоКопий = 1;

Для Каждого Док Из СписокДокументов Цикл

ТабДок = Новый ТабличныйДокумент;

ТабДок.Вывести(Док.ПолучитьМакет("ПечатнаяФорма"));

ТабДок.Печать(Параметры, Ложь);

КонецЦикла;

КонецПроцедуры

⚠️ Внимание: При печати без диалога все настройки должны быть заданы программно. Если принтер недоступен или возникнет ошибка, пользователь не увидит предупреждения — обработку ошибок нужно реализовать в коде через Попытка...Исключение.

Пример обработки ошибок печати:

Попытка

ТабДок.Печать(Параметры, Ложь);

Исключение

Сообщить("Ошибка печати:" + ОписаниеОшибки);

ЗаписьЖурналаРегистрации(УровеньЖурналаРегистрации.Ошибка,,"Печать", ОписаниеОшибки);

КонецПопытки;

💡

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

FAQ: Частые вопросы по настройке печати в 1С

Как узнать список доступных принтеров в 1С?

Используйте объект Принтеры:

Принтеры = Новый Принтеры;

Список = Принтеры.ВыбратьПринтеры;

Для Каждого Принтер Из Список Цикл

Сообщить(Принтер.Имя);

КонецЦикла;

Это выведет имена всех принтеров, установленных в системе.

Можно ли сохранить настройки печати для повторного использования?

Да, объекты ПараметрыПечати и НастройкиПринтера поддерживают сериализацию. Пример сохранения в файл:

ДвоичныеДанные = Новый ЗаписьДанных;

ДвоичныеДанные.ЗаписатьСжатие(Параметры.Сериализовать);

ДвоичныеДанные.Закрыть;

ДвоичныеДанные.Записать("C:\temp\настройки_печати.bin");

Для загрузки используйте ЧтениеДанных и Десериализовать.

Почему при печати из 1С документ смещается вправо?

Это типичная проблема при несовпадении размеров страницы в настройках 1С и драйвера принтера. Решения:

  1. Проверьте Параметры.ШиринаСтраницы — она должна совпадать с реальной шириной бумаги.
  2. В драйвере принтера отключите опцию"Масштабировать до размера бумаги".
  3. Установите левое поле не менее 5 мм (многие принтеры не печатают ближе к краю).
Как печатать только четные или нечетные страницы?

Используйте свойства НомерПервойСтраницы и НомерПоследнейСтраницы в комбинации с логикой:

// Печать только нечетных страниц (1, 3, 5...)

Для Сч = 1 По ТабДок.Страниц Через 2 Цикл

Параметры.НомерПервойСтраницы = Сч;

Параметры.НомерПоследнейСтраницы = Сч;

ТабДок.Печать(Параметры, Ложь);

КонецЦикла;

Можно ли печатать на сетевой принтер из 1С?

Да, если принтер добавлен в систему как сетевой. В коде укажите его полное имя (например, \\SERVER\HP_LaserJet). Убедитесь, что:

  • Принтерен (shared) на сервере.
  • У пользователя 1С есть права на печать.
  • Драйвер принтера установлен на клиентском компьютере.

Для печати с сервера 1С принтер должен быть доступен на сервере 1С:Предприятие.