Как печатать QR-коды на принтере Zebra LP/TLP 2824 Plus напрямую из 1С?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При попытке использования принтеров серии Zebra LP/TLP 2824 Plus для печати двухмерных кодов (например, QR) напрямую через язык управления EPL2, многие разработчики сталкиваются с тем, что этикетка выходит пустой. Несмотря на то, что технические характеристики устройства указывают на поддержку 2D-кодов, аппаратная реализация в языке EPL2 зачастую оказывается ограниченной или нерабочей для ряда модификаций принтера. Давайте разберем, как решить эту проблему, перейдя на более современный и надежный стандарт печати — ZPL.

Анализ проблемы с EPL2

Ранее мы привыкли использовать команды языка EPL2 для печати линейных штрихкодов типа EAN-13. Код, отправляемый на принтер, выглядит примерно так: B25,45,0,E30,2,2,65,B,"4607005092014". Однако при попытке сформировать аналогичную команду для QR-кода с использованием синтаксиса b, принтер не выдает ошибку, но и не печатает сам код.

Выяснилось, что использование языка EPL2 для 2D-символики в данных принтерах является тупиковым путем. Даже при соблюдении синтаксиса, прошивка устройства может просто игнорировать команды построения QR-кода. В таких случаях не стоит тратить время на поиск «правильных» параметров в EPL2 — необходимо переходить на ZPL (Zebra Programming Language).

Переход на использование языка ZPL

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

Для печати QR-кода через ZPL нам потребуется сформировать текстовый файл с командами и отправить его напрямую на порт принтера. Рассмотрим пример структуры такого кода:


^XA
^FO100,10
^BQN,2,5
^FDQA,+79262222220^FS
^XZ

Разберем, что делают эти команды:

  1. ^XA — начало формата этикетки.
  2. ^FO100,10 — установка позиции (Field Origin) для начала печати объекта.
  3. ^BQN,2,5 — команда генерации QR-кода (QR Code command). Здесь 2 — множитель размера, а 5 — уровень коррекции ошибок.
  4. ^FDQA,+79262222220^FS — данные (Field Data), которые нужно закодировать, завершенные командой ^FS (Field Separator).
  5. ^XZ — конец формата этикетки.

Реализация отправки на печать из 1С

Процесс печати через 1С становится значительно проще и стабильнее. Вместо сложной генерации растровых изображений (картинок), которая требует конвертации в BMP и вызывает риск потери качества при сжатии, мы работаем с легким текстовым файлом.

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

  1. Создаем временный файл, в который записываем команду ZPL.
  2. Используем метод ФС.КопироватьФайл (или аналогичные средства платформы 1С для записи данных в порт устройства), чтобы отправить содержимое файла на ПринтерEPL.

Пример алгоритма действий:


// Формируем содержимое файла
ТекстКоманды = "^XA" + Символы.ПС + 
               "^FO100,10" + Символы.ПС + 
               "^BQN,2,5" + Символы.ПС + 
               "^FDQA,+79262222220^FS" + Символы.ПС + 
               "^XZ";

// Сохраняем во временный файл
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.УстановитьТекст(ТекстКоманды);
ИмяВремФайла = ПолучитьИмяВременногоФайла("txt");
ТекстовыйДокумент.Записать(ИмяВремФайла);

// Отправляем на печать
КопироватьФайл(ИмяВремФайла, "\\Server\PrinterName");

Почему ZPL эффективнее?

Рассмотрим преимущества данного подхода:

Таким образом, для стабильной печати QR-кодов на принтерах Zebra 2824 Plus, следует отказаться от использования устаревшего EPL2 в пользу ZPL. Это решение обеспечит надежность работы торгового оборудования и исключит проблемы с нечитаемостью кодов.

← На главную