Как корректно настроить сканер на чтение обувных марок?

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

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

Почему возникают ошибки при чтении маркировки?

Прежде чем переходить к настройкам, проанализируем причину сбоев. В кодах маркировки GS1 DataMatrix используются специальные непечатаемые символы-разделители — GS (Group Separator), имеющие код ASCII 29. Эти символы отделяют друг от друга идентификаторы применения (AI), такие как серийный номер и код проверки (криптохвост).

Когда сканер работает в режиме эмуляции клавиатуры (HID), он пытается передать эти символы как нажатия клавиш. Поскольку символа с кодом 29 на стандартной клавиатуре нет, операционная система или драйвер 1С могут интерпретировать его неверно, игнорировать или заменять на случайные знаки. Это приводит к тому, что 1С не может корректно «разобрать» марку на составляющие, и мы получаем «сырую» строку данных некорректной длины.

Решение 1: Переход на режим USB-COM (CDC)

Это самый надежный способ, который специалисты называют «золотым стандартом» автоматизации. Рассмотрим, почему это работает лучше. В режиме COM-порта данные передаются не как последовательность нажатых клавиш, а как единый пакет данных в буфер порта. Это полностью исключает влияние таких факторов, как:

Для настройки выполним следующие шаги:

  1. Найдем в инструкции к вашему сканеру управляющий штрихкод "USB COM Emulation" или "Enable Uni-Directional USB Serial Emulation" и считаем его.
  2. Установим на компьютер драйвер виртуального COM-порта от производителя сканера (Honeywell, Zebra, Datalogic и т.д.).
  3. В 1С перейдем в раздел «Администрирование» — «Подключаемое оборудование». В настройках сканера изменим тип подключения на «COM-порт» и выберем соответствующий номер порта (его можно посмотреть в диспетчере устройств Windows).

Решение 2: Настройка спецсимвола GS в режиме клавиатуры

Если по каким-то причинам вы вынуждены оставить сканер в режиме эмуляции клавиатуры (Native 1С драйвер), необходимо заставить устройство корректно передавать разделитель ASCII 29. Проанализируем два способа настройки самого сканера:

Метод эмуляции Alt+029: Многие современные сканеры поддерживают режим, при котором символ GS передается как зажатая клавиша Alt и последовательный ввод цифр 0-2-9 на малой цифровой клавиатуре. Проверьте инструкцию вашего устройства на наличие опции "Alt Mode" или "Enable Alt Code".

Замена на печатный символ: Мы можем настроить сканер так, чтобы он заменял невидимый GS на любой редкий печатный символ, например #. В этом случае в 1С придет строка вида 01...21...#91...#92.... После этого в коде 1С будет легко выполнить обратную замену или корректно распарсить строку.

Решение 3: Программная корректировка данных через расширение

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

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


&Вместо("ВнешнееСобытиеПреобразоватьДанныеСоСканераВСтруктуру")
Функция оса_ВнешнееСобытиеПреобразоватьДанныеСоСканераВСтруктуру(Форма, Источник, Событие, Данные) Экспорт
    // Проверяем, что событие связано со сканированием и строка данных имеет аномальную длину
    Если (Событие = "Штрихкод" Или Событие = "ПолученШтрихкод") И СтрДлина(Данные) > 100 Тогда
        // Проверяем наличие разделителя GS (Символ 29) в определенной позиции
        Если Сред(Данные, 33, 1) = Символ(29) Тогда
            // Формируем корректную структуру GS1 с идентификаторами (01) и (21)
            Данные = "(" + Сред(Данные, 2, 2) + ")" + Сред(Данные, 4, 14) + "(" + Сред(Данные, 18, 2) + ")" + Сред(Данные, 20, 13);
        КонецЕсли;
    КонецЕсли;
    
    // Передаем управление стандартной обработке с уже скорректированными данными
    Значение = ПродолжитьВызов(Форма, Источник, Событие, Данные);
    Возврат Значение;
КонецФункции

Важный момент: Использование расширений для «исправления» работы сканера — это крайняя мера. Как отмечают эксперты в обсуждении, правильнее использовать актуальные драйверы (например, 1С:Сканеры штрихкода (NativeApi) последних версий), которые уже умеют обрабатывать DataMatrix корректно.

Решение 4: Активация AIM ID и настройка типов штрихкодов

Выясним причину, по которой 1С иногда определяет DataMatrix как Code 128. Это происходит, когда драйвер не получает от сканера информацию о типе считанного кода. Чтобы решить эту проблему, в настройках сканера нужно включить параметр "Transmit AIM ID".

При включении этой опции сканер будет добавлять к каждой строке трехсимвольный префикс. Для GS1 DataMatrix это префикс ]d2. Современные библиотеки 1С умеют распознавать этот префикс и мгновенно определять, что перед ними — марка «Честного ЗНАКа», а не обычный товарный штрихкод или серийный номер.

Рекомендации по физической настройке сканера

Рассмотрим дополнительные параметры, которые могут влиять на качество чтения обувных марок:

Подводя итог, скажем: если вы столкнулись с некорректной длиной кода маркировки в 1С, первым делом попробуйте перевести сканер в режим эмуляции COM-порта. Это решит 90% проблем с передачей спецсимволов и раскладкой клавиатуры. И только если этот метод недоступен, приступайте к тонкой настройке префиксов или программной корректировке через Вместо в расширении.

← На главную