1С: Настройка параметров печати документов через Native API платформы
Проблемы при нестандартном выводе печатных форм в 1С
При массовой пакетной печати складских накладных, маршрутных листов или самоклеящихся этикеток со штрихкодами встроенные средства интерактивного вывода дают сбой: сбивается масштаб страницы, документ печатается не на том принтере, сбивается ориентация (альбомная вместо книжной) либо печать останавливается в ожидании диалогового окна пользователя.
| Проблема | Где проявляется | Причина |
|---|---|---|
| Каждый документ требует нажатия кнопки «Печать» | Пакетная печать документов реализации | Не задан признак фонового вывода на печать без вызова диалога |
| Штрихкод на этикетке обрезается по краям | Термопринтеры этикеток (Zebra, TSC) | Платформа использует поля принтера по умолчанию вместо параметров макета |
| Документ уходит в основной лоток вместо лотка черновиков | Сетевые МФУ (Kyocera, HP) | Отсутствует прямая инициализация свойств управления лотками (Paper Bin) |
Программное управление параметрами табличного документа
- Базовая программная настройка геометрии страницы:
Управление параметрами печати осуществляется через свойства объекта платформы
ТабличныйДокументдо момента его отправки в спулер печати:ТабДок = Новый ТабличныйДокумент; // Установка имени параметров печати для сохранения индивидуальных настроек пользователя: ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_НАКЛАДНАЯ"; // Геометрия и ориентация: ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; ТабДок.Автомасштаб = Истина; ТабДок.ПолеСлева = 10; // в миллиметрах ТабДок.ПолеСправа = 10; ТабДок.ПолеСверху = 5; ТабДок.ПолеСнизу = 5; - Управление количеством копий, дуплексом и целевым принтером:
// Выбор физического или сетевого принтера из списка установленных в ОС: ТабДок.ИмяПринтера = "\\CORP-PRINT\HP_LaserJet_Enterprise"; // Настройка двусторонней печати: ТабДок.ДвусторонняяПечать = ТипДвустороннейПечати.ПереворотВверх; ТабДок.КоличествоЭкземпляров = 2; ТабДок.РазборПоКопиям = Истина; - Прямой вывод в спулер печати без открытия экранной формы:
// Метод Напечатать() отправляет задание напрямую в подсистему печати ОС Windows // Параметр 1: Режим использования диалога печати (НеИспользовать) ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать); - Печать этикеток фиксированного размера:
// Для принтеров термоэтикеток отключаем автомасштаб и задаем жесткий размер: ТабДок.Автомасштаб = Ложь; ТабДок.МасштабПечати = 100; ТабДок.РазмерСтраницы = "Custom"; // Задается драйвером, либо выбор формата: "A4", "A5"
Внимание: Свойство ИмяПараметровПечати кэширует параметры печати в системных таблицах настроек пользователя. Если вы программно меняете свойства в коде, но они не применяются на клиенте, очистите сохраненные настройки пользователя для этой печатной формы через меню Главное > Настройки > Очистка настроек.
Частые вопросы (FAQ)
Почему ТабДок.Напечатать() падает с ошибкой на сервере 1С?
Метод Напечатать() требует наличия контекста графической подсистемы Windows (GDI) и доступен исключительно на клиенте (Тонкий клиент, Толстый клиент). На стороне сервера 1С:Предприятия печать без вызова сторонних COM-объектов не поддерживается.
Как вывести документ ровно на одну страницу по ширине?
Установите свойство ТабДок.Автомасштаб = Истина;, либо задайте точные границы: ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет; ТабДок.МасштабПечати = 0; (при значении 0 платформа автоматически подгоняет ширину).
Как программно переключить лоток подачи бумаги в принтере?
В Native API 1С нет прямого метода переключения физического лотка (Tray ID). Для этого создают два логических принтера в Windows с одинаковым драйвером, но разными лотками по умолчанию, и передают имя нужного принтера в свойство ИмяПринтера.
Что произойдет, если указанный принтер в ТабДок.ИмяПринтера недоступен?
Платформа выдаст системное исключение либо перенаправит поток печати на принтер, назначенный в Windows принтером по умолчанию.