Почему некоторые коды маркировки Data Matrix не считываются при продаже и как это исправить?

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

С введением обязательной маркировки товаров легкой промышленности многие пользователи столкнулись с проблемой: часть кодов маркировки (Data Matrix) считывается корректно, а на других система выдает ошибку «Недопустимый формат штрих-кода». При этом мобильное приложение «Честный ЗНАК» может показывать, что товар находится в обороте (запрос информации о кодах Честного знака), а сама 1С находит товар в справочнике, но отказывается добавлять его в чек. Рассмотрим подробно, почему это происходит и как решить данную проблему.

Выясняем причину: QR-код или Data Matrix?

Прежде всего проанализируем терминологию. Часто пользователи называют код на этикетке «QR-кодом», однако для маркировки товаров в РФ используется формат Data Matrix. Хотя внешне они похожи, логика кодирования и структура данных у них принципиально разные. 1С:Розница и другие конфигурации используют строгие алгоритмы валидации именно для формата Data Matrix GS1.

Проанализируем ситуацию, описанную пользователями: «правильный» код имеет длину 83 символа, а «ошибочный» — 84 символа. При детальном сравнении строк выясняется, что в проблемных кодах присутствует лишний символ обратного слеша \ перед обычным слешем /. Например:

Ошибочный код: ...0692zVtx\/YGFcB75...

Корректный код: ...0692zVtx/YGFcB75...

Символ / является легитимным для кода маркировки, но символ \ (обратный слеш) часто добавляется драйвером сканера или системой печати в качестве «экранирования». Для валидатора 1С этот лишний символ ломает всю структуру кода, так как длина «криптохвоста» и контрольных сумм перестает соответствовать стандарту.

Вариант 1. Настройка режима работы сканера (HID vs COM)

Одной из главных причин искажения данных при сканировании является работа оборудования в режиме эмуляции клавиатуры (HID). Рассмотрим, почему это критично:

  1. В режиме клавиатуры сканер передает символы так, будто они нажимаются на физической клавиатуре.
  2. Спецсимволы (например, разделитель групп данных GS, он же ASCII 29) в этом режиме часто теряются или заменяются операционной системой Windows на другие знаки.
  3. Если в Windows включена специфическая раскладка или «умная» замена символов, прямой слеш может быть автоматически дополнен экранирующим символом.

Решение: Переведем сканер в режим эмуляции COM-порта. Для этого необходимо найти инструкцию к вашей модели сканера (например, перевод сканера Symbol DS6878 в режим эмуляции COM) и считать специальный настроечный штрих-код (обычно называется USB COM Apple или USB Serial Emulation). После этого в 1С в настройках подключаемого оборудования нужно изменить тип подключения сканера и установить соответствующий драйвер (например, «1С:Сканеры штрихкода (COM)»).

Вариант 2. Ручное сопоставление в рабочем месте кассира (РМК)

Если проблема носит разовый характер и нужно срочно отпустить покупателя, можно воспользоваться обходным путем, который позволяет «подсказать» системе, к какому товару относится данный код. Разберем этот алгоритм по шагам:

  1. Откроем пустое окно чека в РМК.
  2. Считаем «проблемный» код маркировки. Система может вывести окно сканирования или показать пустую строку.
  3. Если 1С не определила номенклатуру, считаем обычный линейный штрих-код (EAN-13) с этой же этикетки.
  4. Программа предложит сопоставить марку и товар. Подтверждаем выбор.
  5. Нажимаем кнопку «Перенести в документ».

Важный нюанс: при таком способе марка в чеке может отображаться красным цветом, так как она не прошла стандартную проверку формата, но это позволит завершить продажу, если товар легален и числится в обороте в системе «Честный ЗНАК».

Вариант 3. Программная очистка кода (для разработчиков)

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

Нам необходимо найти место, где принимается строка штрихкода, и выполнить замену некорректной последовательности символов \/ на правильную /:


// В процедуре обработки сканирования или валидации марки
Если СтрНайти(ДанныеСканера, "\/") > 0 Тогда
    ОчищенныйКод = СтрЗаменить(ДанныеСканера, "\/", "/");
    // Далее передаем ОчищенныйКод в стандартные механизмы парсинга БПО
    ОбработатьМарку(ОчищенныйКод);
КонецЕсли;

Проанализируем ситуацию: почему это работает? Символ обратного слеша в Data Matrix практически никогда не используется по стандарту GS1 для легкой промышленности. Удаляя его, мы восстанавливаем исходную длину строки (83 символа), и регулярные выражения 1С начинают корректно распознавать блоки (01), (21), (91) и (92).

Вариант 4. Проверка префикса FNC1

Data Matrix для маркировки обязательно должен содержать невидимый спецсимвол FNC1 в самом начале строки. Это индикатор того, что перед нами код стандарта GS1, а не просто произвольный набор текста. Если принтер при печати этикеток (или принтер поставщика) сформировал код без этого префикса, 1С не распознает его как «маркировку».

Чтобы проверить это, проанализируем работу сканера через «Тест устройства» в настройках 1С. При сканировании в поле «Данные» в начале строки должен отображаться символ с кодом ASCII 29 или специфический префикс ]d2. Если их нет — проблема в настройках печати или в том, что сканер «срезает» эти данные.

Итоги и рекомендации

Подводя итог, выделим контрольный список действий при возникновении ошибки «Недопустимый формат штрих-кода»:

  1. Проверьте визуально: нет ли в коде лишних символов \.
  2. Протестируйте сканер: переведите его в режим COM-порта. Это решает 90% проблем с распознаванием спецсимволов.
  3. Обновите драйверы: убедитесь, что в 1С используется актуальная версия «Библиотеки подключаемого оборудования» (БПО).
  4. Сравните длину: для текстиля код обычно имеет фиксированную длину. Если ваш сканер выдает на 1-2 символа больше, ищите причину в настройках суффиксов/префиксов самого сканера.

Помните, что 1С:Розница версии 2.3.7 и выше предъявляет очень жесткие требования к структуре Data Matrix. Если код напечатан с нарушением стандартов GS1 (например, отсутствуют разделители групп данных), программа будет блокировать продажу для защиты магазина от штрафов за некорректную подачу сведений в ГИС МТ.

← На главную