При работе с маркированными товарами (сигареты, обувь, одежда) пользователи часто сталкиваются с проблемой: сканер штрихкода АТОЛ SB2109 BT вместо невидимого разделителя GS (Group Separator) передает в программу графический символ «стрелочки» (↔). Рассмотрим, почему это происходит, и разберем пошагово способы решения этой задачи, чтобы коды маркировки «Честный Знак» корректно распознавались в 1С.
Проанализируем техническую сторону вопроса. Символ GS имеет ASCII-код 29. В режиме эмуляции клавиатуры (HID), который установлен на большинстве сканеров «из коробки», устройство имитирует нажатие клавиш. Поскольку в стандартной раскладке клавиатуры клавиши, соответствующей коду 29, не существует, драйвер операционной системы Windows интерпретирует этот сигнал некорректно. В результате вместо управляющего символа в текстовое поле 1С вставляется графический символ из текущего шрифта — та самая двусторонняя стрелочка «↔».
Для системы маркировки это критично: 1С ожидает увидеть именно спецсимвол Символ(29), чтобы разбить штрихкод на функциональные блоки (GTIN, серийный номер, ключ проверки). Если вместо него приходит стрелочка, проверка кода завершается ошибкой «Некорректный формат марки». Для исправления ошибок ввода в клавиатурном режиме можно использовать решение проблемы с потерей символов GS.
Это самый надежный способ решения проблемы. В режиме виртуального COM-порта данные передаются напрямую в виде байтов, минуя обработчик клавиатуры Windows. Выясним, как это реализовать:
1С:Сканеры штрихкода (NativeApi).GS будет приходить в систему в чистом виде.Рассмотрим ситуацию, когда необходимо оставить сканер в режиме клавиатуры. Как показывает практика общения с техподдержкой производителя, существуют сервисные штрихкоды, которых нет в базовой инструкции. Проанализируем их назначение:
GS через комбинацию Alt + 029 на цифровой панели клавиатуры. Это позволяет Windows передать нужный код даже в режиме HID.Важно: Для корректной работы этих режимов убедитесь, что в момент сканирования на компьютере включена английская раскладка клавиатуры, либо отсканируйте код Universal Keyboard из мануала.
Если настроить само оборудование не удается, мы можем прибегнуть к программной коррекции входящих данных. Посмотрим на пример кода, который можно внедрить в процедуру обработки внешнего события или в расширение для драйвера сканера. Нам нужно заменить «неправильную» стрелочку на корректный разделитель. В качестве готового решения можно использовать расширение для дополнения кодов маркировки символом GS.
// Пример преобразования строки штрихкода
Функция ОчиститьШтрихкодОтСтрелочек(ИсходныйШтрихкод) Экспорт
// Определяем символ стрелочки, который выдает сканер
СимволСтрелочки = "↔";
// Заменяем его на стандартный Group Separator (ASCII 29)
ПравильныйGS = Символ(29);
Результат = СтрЗаменить(ИсходныйШтрихкод, СимволСтрелочки, ПравильныйGS);
Возврат Результат;
КонецФункции
Разберем, как это работает: метод СтрЗаменить находит все вхождения графического символа и подставляет на их место управляющий символ, который 1С успешно распознает как разделитель блоков DataMatrix.
Проанализируем настройки самого драйвера в 1С. Иногда достаточно указать программе, какой именно символ считать разделителем блоков.
GS1.Выясним причину, по которой старые версии АТОЛ SB2109 BT работают нестабильно. В ранних версиях прошивки (до 2020 года) алгоритмы разбора DataMatrix не были оптимизированы под российскую систему «Честный Знак». Если ни один из вышеперечисленных методов не помогает, рекомендуется обновить прошивку сканера до актуальной версии. Актуальные файлы прошивки и утилиту для прошивки (обычно это ScanSetting) можно запросить в сервисном центре АТОЛ.
Помните: правильная работа с маркировкой требует обязательной передачи разделителя. Без него 1С не сможет выделить криптохвост из кода, что приведет к невозможности легальной продажи товара через ККТ.