Как исправить искажение (сплющивание) QR-кода при печати на фискальных регистраторах Штрих-М?

Программист Торговля и дистрибуция
← На главную

При интеграции торгового оборудования, в частности фискальных регистраторов компании «Штрих-М», разработчики часто сталкиваются с проблемой некорректного отображения QR-кодов. Типичная ситуация: код печатается, но выглядит «сплющенным» по вертикали или горизонтали, из-за чего сканеры и мобильные приложения не могут его распознать. В этой статье мы подробно разберем, почему это происходит и как правильно реализовать печать произвольного QR-кода, используя возможности драйвера DrvFR.

Анализ проблемы: почему PrintBarcodeGraph не подходит для QR-кодов

Рассмотрим стандартную ошибку, которую совершают многие программисты при попытке вывести 2D-код. Изначально для печати штрихкодов в драйверах «Штрих-М» использовался метод PrintBarcodeGraph(). Давайте проанализируем фрагмент кода, который приводит к некорректному результату:


FR.BarCode = "Проверка печати кода 123456789";
FR.BarcodeType = 3;
FR.BarWidth = 1;
FR.LineNumber = 130;
FR.PrintBarcodeText = 0;
FR.BarcodeAlignment = 0;
FR.Password = 30;
FR.PrintBarcodeGraph();

Выясним причину, по которой этот код выдает «сплющенную» картинку. Метод PrintBarcodeGraph() предназначен в первую очередь для линейных (одномерных) штрихкодов. При работе с ним драйвер пытается интерпретировать переданные данные как графический объект, основываясь на параметрах высоты строки и ширины модуля. Однако для QR-кода крайне важна строгая пропорция сторон (квадрат). Если прошивка ККТ или настройки драйвера имеют предустановленные значения высоты линии, которые не соответствуют ширине точки, изображение неизбежно искажается. Использование параметра BarWidth в данном контексте часто игнорируется или работает нелинейно, что и приводит к визуальному дефекту.

Правильное решение: использование метода Print2DBarcode

Для корректной работы с двумерными кодами (QR, PDF417 и др.) в современных версиях драйвера DrvFR (начиная с 4.13 и выше) реализован специализированный метод Print2DBarcode(). В отличие от графического вывода, этот метод передает текстовую строку непосредственно в процессор фискального регистратора, который сам формирует код согласно спецификации QR-стандарта. Это гарантирует идеальные пропорции и высокую читаемость.

Разберем по шагам, какие свойства объекта драйвера необходимо настроить перед вызовом этой команды:

  1. Password: Для выполнения операций печати необходимо установить пароль администратора или системного администратора (по умолчанию 30).
  2. BarcodeType: Это ключевой параметр. Для формирования именно QR-кода в большинстве реализаций драйвера Штрих-М необходимо установить значение 2.
  3. BarCode: Сюда передается текстовое содержимое кода (ссылка, реквизиты чека или произвольный текст).
  4. BarSize: Параметр, определяющий масштаб. Он задает размер одного «квадратика» (модуля) в пикселях. Оптимальное значение для ленты 57 мм — 3 или 4.
  5. BarcodeAlignment: Выравнивание кода на чеке (0 — слева, 1 — по центру, 2 — справа).

Посмотрим на пример правильной реализации:


// Устанавливаем пароль для доступа к ФР
FR.Password = 30;

// Указываем тип кода (2 соответствует QR-коду)
FR.BarcodeType = 2;

// Текст, который будет зашифрован
FR.BarCode = "https://example.com/check/12345";

// Устанавливаем размер модуля (чтобы код был крупным и читаемым)
FR.BarSize = 3;

// Выравниваем по центру для эстетичного вида чека
FR.BarcodeAlignment = 1;

// Вызываем специализированный метод печати 2D-кода
FR.Print2DBarcode();

Проверка технических условий и ограничений

Проанализируем ситуацию, если метод Print2DBarcode() все равно не выдает ожидаемый результат или возвращает ошибку. Существует несколько технических нюансов, которые необходимо проверить:

1. Версия прошивки ККТ. Если при вызове метода устройство выдает ошибку «Команда не поддерживается в данной реализации», это означает, что прошивка вашего фискального регистратора устарела. Поддержка формирования QR-кодов на уровне «железа» стала обязательной с введением 54-ФЗ, поэтому на старых аппаратах (до 2016-2017 годов выпуска) может потребоваться обновление внутреннего ПО (прошивка центрального процессора).

2. Версия драйвера DrvFR. Убедитесь, что в системе зарегистрирована актуальная версия COM-объекта. Мы рекомендуем использовать версию не ниже 4.14. В старых версиях (например, 4.6 или 4.9) свойства для работы с 2D-кодами могли называться иначе или отсутствовать вовсе.

3. Состояние чека. Помните, что печать произвольного QR-кода обычно выполняется либо в открытом документе (текстовом чеке), либо вне рамок чека. Если вы пытаетесь напечатать код в момент, когда фискальный чек уже закрыт, но бумага еще не отрезана, убедитесь, что вы не нарушаете логику работы ФН (фискального накопителя).

Дополнительные параметры настройки

В некоторых случаях нам может потребоваться более тонкая настройка. Для этого в драйвере существуют параметры BarcodeParameter1, BarcodeParameter2 и так далее. Для QR-кодов они обычно отвечают за:

В большинстве стандартных задач (например, печать ссылки на маркетинговую акцию) эти параметры можно оставлять равными 0, так как драйвер и прошивка автоматически подберут оптимальные значения исходя из длины строки.

Проанализировав вышеизложенное, мы видим, что проблема «сплющивания» — это следствие использования устаревшего графического метода. Переход на Print2DBarcode полностью устраняет геометрические искажения и делает код пригодным для сканирования любыми устройствами.

← На главную