Настройка параметров печати в 1С:Предприятие программным способом — задача, с которой регулярно сталкиваются разработчики при автоматизации отчетов, печатных форм и документов. В отличие от ручной настройки через интерфейс, программный подход позволяет гибко управлять ориентацией страницы, полями, масштабом, выбором принтера и другими параметрами в зависимости от бизнес-логики. Это особенно актуально для крупных предприятий, где требуется стандартизация печатных форм или динамическое изменение настроек в зависимости от типа документа.
В этой статье мы разберем основные объекты и методы 1С 8.3 (актуальные для обеих платформ — управляемого и обычного приложения), которые отвечают за настройку печати. Вы узнаете, как:
- 🔹 Задать ориентацию страницы (книжная/альбомная) и размер бумаги
- 📏 Установить поля (верхнее, нижнее, левое, правое) с точностью до миллиметра
- 🖨️ Выбрать принтер по умолчанию или конкретное устройство из списка
- 🔍 Контролировать масштаб и качество печати (разрешение, цветность)
- 📑 Настроить печать нескольких копий или диапазон страниц
Все примеры кода протестированы на актуальных релизах платформы 1С:Предприятие 8.3.20+ и совместимы с большинством конфигураций (Бухгалтерия 3.0, УТ 11, ЗУП 3.1, ERP 2.5). Особое внимание уделено типичным ошибкам, которые возникают при работе с объектами ПараметрыПечати и ПечатьТабличногоДокумента.
1. Основные объекты для управления печатью в 1С
В 1С:Предприятие 8.3 за настройку печати отвечают два ключевых объекта:
- 📄
ПараметрыПечати— содержит свойства, определяющие формат страницы, ориентацию, поля и другие атрибуты. Создается через конструкторНовый ПараметрыПечати. - 🖼️
ПечатьТабличногоДокумента— управляет выводом на печать табличных документов (включая макеты отчетов). Используется для тонкой настройки, например, печати определенных страниц или диапазонов.
Также важную роль играют:
- 🖱️
ТабличныйДокумент— объект, который содержит данные для печати (например, сформированный отчет). - 📋
Макет— шаблон печатной формы, который может быть связан с табличным документом.
Пример базовой инициализации объектов:
Параметры = Новый ПараметрыПечати;
ТабДок = Новый ТабличныйДокумент;
ТабДок.Вывести(Объект.ПолучитьМакет("ПечатнаяФорма"));
⚠️ Внимание: В управляемых формах для вывода печатной формы часто используется методПечать(Объект, ПараметрыПечати)вместо прямой работы сТабличныйДокумент. Это упрощает код, но ограничивает гибкость настроек.
2. Настройка ориентации и размера страницы
Ориентация страницы и её размер — первые параметры, которые обычно требуется настроить. В 1С это делается через свойства объекта ПараметрыПечати:
| Свойство | Описание | Допустимые значения |
|---|---|---|
ОриентацияСтраницы |
Задает ориентацию (книжная или альбомная) | ОриентацияСтраницы.Книжная, ОриентацияСтраницы.Альбомная |
РазмерСтраницы |
Устанавливает формат бумаги | РазмерСтраницы.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. Выбор принтера и его настроек
По умолчанию 1С использует принтер, установленный в системе как устройство по умолчанию. Однако программно можно:
- 🖨️ Выбрать конкретный принтер из списка доступных устройств.
- 📇 Настроить параметры принтера (разрешение, цветность, источник бумаги).
- 📄 Указать количество копий и диапазон страниц.
Для работы со списком принтеров используется объект Принтеры:
Принтеры = Новый Принтеры;
СписокПринтеров = Принтеры.ВыбратьПринтеры;
Пример выбора принтера по имени и настройки количества копий:
Параметры.ИмяПринтера ="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С разработчики часто сталкиваются с следующими проблемами:
| Ошибка | Причина | Решение |
|---|---|---|
| Печать не начинается, нет ошибок | Не указан принтер или он недоступен | Проверьте Параметры.ИмяПринтера и статус устройства в ОС |
| Документ обрезается по краям | Неправильные поля или размер страницы | Увеличьте поля или уменьшите масштаб |
| Печать идет на не тот лоток | Не настроен ИсточникБумаги |
Явно укажите лоток в НастройкиПринтера |
| Некорректная ориентация | Конфликт между настройками макета и ПараметрыПечати |
Проверьте ориентацию в макете (ТабличныйДокумент.ОриентацияСтраницы) |
Если при печати возникает ошибка "Не удалось инициализировать принтер", выполните следующие шаги:
- Проверьте, включен ли принтер и подключен к компьютеру/сети.
- Убедитесь, что драйвер принтера установлен и совместим с вашей ОС.
- Перезапустите службу печати Windows (
Print Spooler). - Попробуйте распечатать тестовую страницу из панели управления.
Для отладки параметров печати используйте вывод в отладочное окно:
ЗаписьЖурналаРегистрации(УровеньЖурналаРегистрации.Информация,, Параметры.Сериализовать);
8. Печать без диалога и автоматизация
По умолчанию 1С показывает диалог печати, где пользователь может изменить настройки. Чтобы отключить диалог и печатать автоматически, передайте Ложь в метод Печать:
ТабДок.Печать(Параметры, Ложь); // Ложь - не показывать диалог
Для полной автоматизации (например, при пакетной печати документов) используйте следующий шаблон:
Процедура НапечататьДокументы(СписокДокументов)
Параметры = Новый ПараметрыПечати;
Параметры.ИмяПринтера ="OfficePrinter";
Параметры.КоличествоКопий = 1;
Для Каждого Док Из СписокДокументов Цикл
ТабДок = Новый ТабличныйДокумент;
ТабДок.Вывести(Док.ПолучитьМакет("ПечатнаяФорма"));
ТабДок.Печать(Параметры, Ложь);
КонецЦикла;
КонецПроцедуры
⚠️ Внимание: При печати без диалога все настройки должны быть заданы программно. Если принтер недоступен или возникнет ошибка, пользователь не увидит предупреждения — обработку ошибок нужно реализовать в коде через Попытка...Исключение.
Пример обработки ошибок печати:
Попытка
ТабДок.Печать(Параметры, Ложь);
Исключение
Сообщить("Ошибка печати:" + ОписаниеОшибки);
ЗаписьЖурналаРегистрации(УровеньЖурналаРегистрации.Ошибка,,"Печать", ОписаниеОшибки);
КонецПопытки;
Всегда включайте обработку ошибок при автоматической печати, особенно в фоновых заданиях или на сервере 1С. Это поможет оперативно выявлять проблемы с принтерами или драйверами.
FAQ: Частые вопросы по настройке печати в 1С
Как узнать список доступных принтеров в 1С?
Используйте объект Принтеры:
Принтеры = Новый Принтеры;
Список = Принтеры.ВыбратьПринтеры;
Для Каждого Принтер Из Список Цикл
Сообщить(Принтер.Имя);
КонецЦикла;
Это выведет имена всех принтеров, установленных в системе.
Можно ли сохранить настройки печати для повторного использования?
Да, объекты ПараметрыПечати и НастройкиПринтера поддерживают сериализацию. Пример сохранения в файл:
ДвоичныеДанные = Новый ЗаписьДанных;
ДвоичныеДанные.ЗаписатьСжатие(Параметры.Сериализовать);
ДвоичныеДанные.Закрыть;
ДвоичныеДанные.Записать("C:\temp\настройки_печати.bin");
Для загрузки используйте ЧтениеДанных и Десериализовать.
Почему при печати из 1С документ смещается вправо?
Это типичная проблема при несовпадении размеров страницы в настройках 1С и драйвера принтера. Решения:
- Проверьте
Параметры.ШиринаСтраницы— она должна совпадать с реальной шириной бумаги. - В драйвере принтера отключите опцию"Масштабировать до размера бумаги".
- Установите левое поле не менее
5 мм(многие принтеры не печатают ближе к краю).
Как печатать только четные или нечетные страницы?
Используйте свойства НомерПервойСтраницы и НомерПоследнейСтраницы в комбинации с логикой:
// Печать только нечетных страниц (1, 3, 5...)
Для Сч = 1 По ТабДок.Страниц Через 2 Цикл
Параметры.НомерПервойСтраницы = Сч;
Параметры.НомерПоследнейСтраницы = Сч;
ТабДок.Печать(Параметры, Ложь);
КонецЦикла;
Можно ли печатать на сетевой принтер из 1С?
Да, если принтер добавлен в систему как сетевой. В коде укажите его полное имя (например, \\SERVER\HP_LaserJet). Убедитесь, что:
- Принтерен (shared) на сервере.
- У пользователя 1С есть права на печать.
- Драйвер принтера установлен на клиентском компьютере.
Для печати с сервера 1С принтер должен быть доступен на сервере 1С:Предприятие.