При работе с торговым оборудованием в среде 1С программисты часто сталкиваются с ситуацией, когда специализированный принтер этикеток, такой как Zebra ZD410, отказывается выполнять функции принтера чеков. В этой статье мы подробно разберем, почему стандартный механизм подключения чековых принтеров может не работать с устройствами Zebra, и проанализируем последовательность шагов для исправления этой ситуации.
Основная сложность заключается в том, что большинство принтеров, работающих через драйвер 1С:Принтер чеков, ожидают команды на языке ESC/POS (стандарт, разработанный компанией Epson). Однако устройства Zebra являются носителями собственного языка разметки — ZPL (Zebra Programming Language) или более старого EPL.
Проанализируем ситуацию: когда вы нажимаете кнопку "Тест подключения" в 1С, драйвер отправляет в порт принтера набор команд в формате ESC/POS. Принтер Zebra, получив эти данные, просто не понимает их и игнорирует задание, либо (как в случае с обычным Windows-принтером) печатает "кракозябры". Это происходит потому, что кодировки и управляющие символы специализированных чековых лент не совпадают с тем, что ожидает получить графический или текстовый процессор принтера Zebra.
Если специализированное подключение через БПО (Библиотеку подключаемого оборудования) не дает результатов, рассмотрим самый надежный способ — использование принтера как обычного системного устройства печати.
ZDesigner.Рассмотрим пример кода, который позволяет вывести такой документ на печать напрямую, минуя диалог выбора принтера:
Процедура НапечататьЧекНаЗебру(ТабДок)
// Установим имя принтера, как оно задано в системе
ТабДок.ИмяПринтера = "ZDesigner ZD410-203dpi ZPL";
// Отключим вывод диалога печати для автоматизации
ТабДок.ПоказатьРедактирование = Ложь;
// Настроим параметры страницы под узкую ленту
ТабДок.АвтоМасштаб = Истина;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
// Отправляем на печать
ТабДок.Напечатать(РежимИспользованияПринтера.Использовать);
КонецПроцедуры
В некоторых версиях 1С:БПО драйвер принтера чеков позволяет выбрать тип протокола. Посмотрим на настройки оборудования в 1С. Если в поле "Тип принтера" или "Модель" доступен вариант Windows или Графический режим, выберем его. В этом режиме 1С формирует изображение чека и отправляет его на принтер через стандартную графическую подсистему Windows (GDI), что позволяет Zebra корректно обработать задание.
Для опытных разработчиков существует путь формирования чека непосредственно на языке принтера. Это обеспечит максимальную скорость печати и четкость шрифтов. Мы можем сформировать текстовую строку с командами ZPL и отправить ее в порт принтера. Рассмотрим, как выглядит простейшая структура команды ZPL:
// Пример формирования строки ZPL
СтрокаZPL = "^XA" + // Начало формата
"^FO50,50^A0N,36,36^FD ТОВАРНЫЙ ЧЕК ^FS" + // Текст в координатах 50,50
"^FO50,100^A0N,24,24^FD Товар: Мышь оптическая ^FS" +
"^FO50,130^A0N,24,24^FD Цена: 500 руб. ^FS" +
"^XZ"; // Конец формата
Для отправки этой строки можно использовать либо объект ТекстовыйДокумент с последующим сохранением в файл и отправкой через copy файл LPT1 (или сетевой путь к принтеру), либо специализированные компоненты для прямой передачи данных в порт.
Выясним причину молчания принтера, если программные методы не помогают. Установим утилиту Zebra Setup Utilities. В ней выберем наш принтер и нажмем "Open Communication with Printer". Попробуем отправить простую команду ~WC (команда печати конфигурации). Если принтер напечатал тестовую страницу, значит, связь настроена верно, и проблема действительно в несовместимости форматов данных, которые шлет 1С.
Поскольку Zebra ZD410 — это принтер этикеток, он постоянно ищет край этикетки. При использовании чековой ленты (непрерывной) датчики могут "сходить с ума". Обязательно выполните калибровку датчика после заправки новой ленты. Это делается либо через утилиту настройки, либо зажатием определенных комбинаций клавиш на корпусе принтера (см. мануал конкретной ревизии устройства).
Подводя итог, можно сказать, что Zebra ZD410 — отличное устройство, но оно требует специфического подхода в 1С. Использование принтера в качестве "Windows-принтера" через макет табличного документа является самым быстрым и гибким решением, позволяющим избежать сложностей с языками управления ZPL.