При работе с маркированным товаром в программе 1С:Розница 2.3 пользователи часто сталкиваются с ошибкой «Недопустимый формат штрихкода». Эта проблема возникает в момент сканирования кода DataMatrix на кассе. Система отказывается принимать код, хотя визуально он кажется верным, а при проверке через мобильное приложение «Честный ЗНАК» товар успешно определяется. Рассмотрим подробнее, почему это происходит и как настроить оборудование и программу для корректной работы.
Для начала проанализируем ситуацию: код маркировки — это не просто текст, а сложная последовательность данных формата GS1 DataMatrix. Он состоит из нескольких групп идентификаторов применения (AI): 01 (GTIN), 21 (серийный номер) и так называемого «криптохвоста» (ключ и код проверки). Разберем по шагам, что видит программа. Если сканер настроен неверно, он может передавать лишние символы (например, скобки вокруг идентификаторов) или, наоборот, «проглатывать» невидимые символы-разделители GS (ASCII 29).
В примере, приведенном в теме, сканер считывает код так: 010290000047577921h(ECGY.... Если в настройках 1С или сканера включено форматирование, программа может ожидать одну структуру, а получать другую. Ошибка «Недопустимый формат» как раз и означает, что внутренняя библиотека 1С (БПО) не смогла «разобрать» считанную строку на составляющие части.
Самая распространенная причина ошибки — работа сканера в режиме клавиатуры (HID). В этом режиме сканер имитирует быстрый набор текста. Рассмотрим, почему это плохо для маркировки:
GS (Group Separator) является непечатным. В режиме клавиатуры Windows часто игнорирует его, и 1С получает «слипшийся» код, который невозможно валидировать.Рекомендуемые действия:
Администрирование — Подключаемое оборудование.1С:Сканеры штрихкода (NativeApi).Если перевод в COM-режим по каким-то причинам невозможен, нужно убедиться, что сканер в режиме клавиатуры передает разделители корректно. Проанализируем ситуацию: 1С требует наличия признака символики ]d2 в начале кода или корректной обработки ASCII-кода 29.
Выясним причину, по которой 1С «ругается» на отсутствие криптохвоста. Это часто случается, если сканер обрезает данные из-за слишком большой длины кода или некорректно обрабатывает символ = в конце строки (Base64). Чтобы исправить это, в настройках самого сканера (через сервисные коды) нужно:
(01) или (21).CR или Enter), чтобы программа понимала окончание ввода.Посмотрим на версию программы из сообщения: Розница 2.3.13.30. В этой версии уже должна быть поддержка современных требований маркировки, но сами драйверы оборудования внутри базы могут быть устаревшими. Проанализируем состояние справочника «Драйверы оборудования»:
Администрирование — Подключаемое оборудование — Драйверы оборудования.1С:Сканеры штрихкода.Именно новые версии драйверов умеют корректно обрабатывать «длинные хвосты» маркировки молочной продукции, воды и одежды, которые содержат символы == в конце.
В некоторых случаях, когда маркировка выпущена с нарушениями или имеет специфический формат, 1С блокирует продажу на этапе предварительной проверки. Если вы уверены, что товар легален, можно временно изменить настройки системы, чтобы проверку выполнял только фискальный накопитель и ГИС МТ (Честный ЗНАК).
Рассмотрим, где это настраивается:
Администрирование — Настройки маркировки.Важно: Это крайняя мера. Если формат кода действительно поврежден сканером, касса выдаст ошибку при попытке пробить чек.
Чтобы окончательно убедиться, что проблема в сканере, а не в программе, выполните тест. Откройте обычный текстовый редактор (Блокнот) и считайте туда проблемный код. Посчитайте количество символов и сравните его с кодом, который «проходит». Если в блокноте вы видите, что символы == или латинские буквы заменяются на другие знаки — проблема на 100% в настройках сканера или раскладке клавиатуры.
Пример корректно настроенного вызова в коде 1С (внутренние механизмы БПО):
// Пример того, как БПО обрабатывает входящие данные от сканера
ДанныеШтрихкода = СчитатьШтрихкод(Порт);
Если ПроверитьФорматGS1(ДанныеШтрихкода) Тогда
// Обработка GTIN и серийного номера
ЗаполнитьДокументПродажи(ДанныеШтрихкода);
Иначе
Предупреждение("Недопустимый формат штрихкода");
КонецЕсли;
Используйте функцию «Тест устройства» в настройках подключаемого оборудования 1С. В окне теста при сканировании вы должны увидеть не просто строку, а четко определенный тип кода: DataMatrix или GS1 DataMatrix. Если тип определяется как Code128 или Unknown, 1С не сможет обработать маркировку.