Как настроить печать чеков на принтере Zebra ZD410-203dpi ZPL в 1С

Программист 1С v8.3 (Управляемые формы) Торговля и дистрибуция
← На главную

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

Разберем причину проблемы: конфликт протоколов ZPL и ESC/POS

Основная сложность заключается в том, что большинство принтеров, работающих через драйвер 1С:Принтер чеков, ожидают команды на языке ESC/POS (стандарт, разработанный компанией Epson). Однако устройства Zebra являются носителями собственного языка разметки — ZPL (Zebra Programming Language) или более старого EPL.

Проанализируем ситуацию: когда вы нажимаете кнопку "Тест подключения" в 1С, драйвер отправляет в порт принтера набор команд в формате ESC/POS. Принтер Zebra, получив эти данные, просто не понимает их и игнорирует задание, либо (как в случае с обычным Windows-принтером) печатает "кракозябры". Это происходит потому, что кодировки и управляющие символы специализированных чековых лент не совпадают с тем, что ожидает получить графический или текстовый процессор принтера Zebra.

Метод 1. Печать через стандартный Windows-драйвер и табличный документ

Если специализированное подключение через БПО (Библиотеку подключаемого оборудования) не дает результатов, рассмотрим самый надежный способ — использование принтера как обычного системного устройства печати.

  1. Установка драйвера: Убедимся, что принтер установлен в операционной системе как обычный принтер. Рекомендуется использовать официальный драйвер ZDesigner.
  2. Настройка носителя: Зайдем в "Настройки печати" принтера в Windows. Выясним, какой тип бумаги установлен. Для чековой ленты необходимо выбрать Continuous (Непрерывная лента), вместо "Labels with gaps" (Этикетки с зазором). Это критически важно, иначе принтер будет выдавать ошибку отсутствия бумаги или проматывать лишние сантиметры.
  3. Создание макета в 1С: Вместо использования стандартного механизма пробития чека через фискальный регистратор, создадим небольшую печатную форму (табличный документ). Ширину колонок подберем под ширину ленты (обычно это 58 мм или 80 мм).

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


Процедура НапечататьЧекНаЗебру(ТабДок)
    // Установим имя принтера, как оно задано в системе
    ТабДок.ИмяПринтера = "ZDesigner ZD410-203dpi ZPL";
    
    // Отключим вывод диалога печати для автоматизации
    ТабДок.ПоказатьРедактирование = Ложь;
    
    // Настроим параметры страницы под узкую ленту
    ТабДок.АвтоМасштаб = Истина;
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    
    // Отправляем на печать
    ТабДок.Напечатать(РежимИспользованияПринтера.Использовать);
КонецПроцедуры

Метод 2. Использование режима графической печати в БПО

В некоторых версиях 1С:БПО драйвер принтера чеков позволяет выбрать тип протокола. Посмотрим на настройки оборудования в 1С. Если в поле "Тип принтера" или "Модель" доступен вариант Windows или Графический режим, выберем его. В этом режиме 1С формирует изображение чека и отправляет его на принтер через стандартную графическую подсистему Windows (GDI), что позволяет Zebra корректно обработать задание.

Метод 3. Прямая отправка команд на языке ZPL

Для опытных разработчиков существует путь формирования чека непосредственно на языке принтера. Это обеспечит максимальную скорость печати и четкость шрифтов. Мы можем сформировать текстовую строку с командами 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

Выясним причину молчания принтера, если программные методы не помогают. Установим утилиту Zebra Setup Utilities. В ней выберем наш принтер и нажмем "Open Communication with Printer". Попробуем отправить простую команду ~WC (команда печати конфигурации). Если принтер напечатал тестовую страницу, значит, связь настроена верно, и проблема действительно в несовместимости форматов данных, которые шлет 1С.

Рекомендации по калибровке

Поскольку Zebra ZD410 — это принтер этикеток, он постоянно ищет край этикетки. При использовании чековой ленты (непрерывной) датчики могут "сходить с ума". Обязательно выполните калибровку датчика после заправки новой ленты. Это делается либо через утилиту настройки, либо зажатием определенных комбинаций клавиш на корпусе принтера (см. мануал конкретной ревизии устройства).

Подводя итог, можно сказать, что Zebra ZD410 — отличное устройство, но оно требует специфического подхода в 1С. Использование принтера в качестве "Windows-принтера" через макет табличного документа является самым быстрым и гибким решением, позволяющим избежать сложностей с языками управления ZPL.

← На главную