Проблема некорректного считывания штрихкодов (так называемые «мисриды») — одна из самых коварных в автоматизации торговли. В отличие от ситуации, когда сканер просто не работает, при неверном считывании устройство успешно передает данные, но подменяет цифры в коде. Например, вместо 2150000280211 система получает 2150000280877. Это приводит к пересортице, ошибкам в чеках и инвентаризации. Разберем подробно, почему так происходит с моделью Symbol (Zebra) STB4278 и как привести работу оборудования в порядок.
Прежде всего, проанализируем ситуацию: если обычный проводной сканер работает корректно, а беспроводной Symbol выдает ошибки на тех же этикетках, проблема не в самих штрихкодах, а в способе их обработки или передачи данных. В беспроводных моделях задействовано больше звеньев: оптическая головка, процессор декодирования, Bluetooth-модуль, база (крэдл) и интерфейс подключения к компьютеру. Сбой на любом из этих этапов может исказить результат.
Самая частая причина «мисридов» в сканерах Zebra/Symbol — это настройки безопасности считывания. По умолчанию сканер может быть настроен на максимальную скорость, выдавая результат после первого же успешного декодирования. Если штрихкод поврежден или луч «дрогнул», алгоритм может ошибиться.
Рассмотрим, как это исправить. В документации к сканеру (Programming Guide) необходимо найти раздел Redundancy Level. Мы рекомендуем установить значение Level 1 или Level 2.
Это незначительно замедлит работу (на доли секунды), но практически полностью исключит передачу неверно распознанных цифр.
Для стандартов вроде EAN-13 последняя цифра является контрольным числом, вычисляемым по определенному алгоритму. Выясним причину, по которой сканер передает некорректный код: возможно, в нем отключена проверка контрольного разряда. Если эта функция (Transmit Check Digit) активна, сканер обязан сам проверить правильность кода. Если сумма не сходится, сканер просто пропищит об ошибке и не будет передавать «мусор» в 1С. Убедимся, что в настройках символики EAN-13/EAN-8 включена опция проверки и передачи контрольного числа.
Поскольку в нашем случае используется эмуляция клавиатуры (префикс F11 и суффикс Enter), данные передаются как поток нажатий клавиш. Операционная система или платформа 1С могут не успевать обрабатывать символы, если они идут слишком быстро, особенно через Bluetooth-соединение.
Разберем, как стабилизировать передачу. Нужно запрограммировать параметр Inter-character Delay. Установим задержку в 5–10 миллисекунд между каждым символом. Это сделает «печать» штрихкода более плавной и предотвратит пропадание или замену знаков из-за переполнения буфера клавиатуры.
Обратим внимание на физические условия сканирования. На круглых объектах (бутылках, флаконах) или на глянцевой упаковке луч лазера может преломляться. Сканеры серии LS4278 используют лазерную головку, которая создает растр (движущийся луч). Если луч падает под углом на искривленную поверхность, отражение может быть считано неверно.
Попробуем изменить подход к сканированию:
Работа в режиме клавиатуры (HID) — это самый простой, но самый нестабильный способ подключения. Любая открытая раскладка (RU/EN) или «залипание» клавиш могут исказить данные. Разберем более профессиональный метод.
Если конфигурация 1С поддерживает работу с торговым оборудованием, переведем сканер в режим USB CDC Host (эмуляция COM-порта). В этом случае данные передаются не посимвольно, а единым пакетом напрямую в драйвер 1С. Это исключает влияние раскладки клавиатуры и значительно повышает надежность передачи данных от беспроводной базы к компьютеру.
Не забудем про специфику беспроводного оборудования Symbol STB4278. Некорректная работа процессора декодирования может быть вызвана просадкой напряжения.
Подведем итог и составим план действий для технического специалиста:
Шаг 1: Выполним полный сброс настроек сканера до заводских (Set Factory Defaults). Это исключит влияние ранее установленных некорректных префиксов или режимов.
Шаг 2: Заново настроим необходимые префиксы (F11) и суффиксы (Enter).
Шаг 3: Обязательно установим Redundancy Level 1 или выше. Это критически важно для устранения мисридов.
Шаг 4: Если ошибка сохраняется, установим Inter-character Delay на значение 10ms.
Шаг 5: Протестируем сканирование в обычный текстовый блокнот. Если в блокноте данные всегда верны, а в 1С — нет, проблему следует искать в обработчике события ВнешнееСобытие в самой программе.
Для диагностики в 1С проанализируем код в модуле формы или в модуле управляемого приложения:
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Событие = "Barcode" Тогда
// Проанализируем полученную строку
Штрихкод = СокрЛП(Данные);
Сообщить("Считан штрихкод: " + Штрихкод);
// Здесь происходит поиск в справочнике Номенклатура
КонецЕсли;
КонецПроцедуры
Если в переменной Данные уже на входе оказывается неверный код, значит, проблему нужно решать исключительно на уровне настроек железа, описанных выше.