Часто при подключении сканера штрихкодов к 1С в режиме «в разрыв клавиатуры» (HID-эмуляция) специалисты сталкиваются с неприятной особенностью: сканер корректно считывает большинство кодов, но в тех, что начинаются с нуля, этот самый первый символ бесследно исчезает. Иногда проблема затрагивает не только ноль, но и другие лидирующие символы, например, восьмерку в определенных форматах. Ситуация осложняется тем, что при проверке в обычном «Блокноте» штрихкод может отображаться полностью, а в 1С — с потерей данных. Разберем по шагам, почему это происходит и как настроить оборудование для корректной работы.
Проанализируем ситуацию с точки зрения стандартов кодирования. Основная причина кроется в различии между стандартами EAN-13 (европейский) и UPC-A (американский). Штрихкод UPC-A состоит из 12 цифр, а EAN-13 — из 13 цифр. По сути, любой код UPC-A можно превратить в EAN-13, просто добавив в начало «0». Многие сканеры «из коробки» настроены так, что при обнаружении кода, похожего на UPC-A, они автоматически отсекают лидирующий ноль (так называемый System Number), считая его избыточным для американского стандарта.
Вторая причина — это специфика режима эмуляции клавиатуры. В этом режиме сканер имитирует очень быстрое нажатие клавиш. Если драйвер 1С или операционная система не успевают обработать поток символов, первый символ может быть воспринят как «дребезг» или случайный сигнал и отсечен программным фильтром. Рассмотрим подробнее способы решения этой проблемы.
Это самый надежный метод, так как он исправляет проблему непосредственно в источнике данных. Для настройки нам понадобится инструкция (мануал) конкретно к вашей модели сканера (например, CipherLab 1500, 1562 или Honeywell). Рассмотрим алгоритм действий на примере сканеров CipherLab, которые часто упоминаются в подобных обсуждениях:
Если у вас нет бумажной инструкции, рекомендуем воспользоваться фирменными утилитами от производителя, такими как ScanMaster. Они позволяют настроить все параметры через удобный графический интерфейс на компьютере, не распечатывая десятки листов с кодами.
Если сканер настроен верно, но 1С все равно не «подхватывает» первый символ, проблема может быть в настройках внешнего события. Рассмотрим работу с драйвером АТОЛ (например, ATOLBarcodeScan_v2.epf). В параметрах торгового оборудования есть критически важный показатель — Чувствительность (Sensitivity).
В режиме клавиатуры драйвер ожидает поток символов и пытается понять, где заканчивается штрихкод. Если чувствительность установлена слишком низкой (например, 30 мс), драйвер может отсекать первый символ, считая его случайным нажатием клавиши пользователем. Проанализируем, как это исправить:
Иногда система «проглатывает» первый символ из-за того, что ей нужно время для инициализации события «Внешнее событие». В этом случае мы можем пойти на хитрость: добавить технический символ перед штрихкодом. Рассмотрим подробнее:
В настройках самого сканера (через ту же инструкцию) установите Префикс. Например, символ решетки # или любое другое значение. После этого в настройках 1С в поле «Префикс» также укажите этот символ. Теперь, когда сканер сработает, первым делом будет передан префикс. Если система что-то и «проглотит», то это будет технический символ префикса, а основной штрихкод с нулем в начале останется нетронутым.
Если аппаратная настройка по каким-то причинам невозможна (например, сканер не поддается перепрограммированию), мы можем реализовать «костыль» на уровне кода конфигурации. Посмотрим на пример функции обработки внешнего события:
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Событие = "BarCodeValue" Тогда
Штрихкод = СокрЛП(Данные);
// Если штрихкод считался как 12 символов, скорее всего потерян ноль
Если СтрДлина(Штрихкод) = 12 Тогда
Штрихкод = "0" + Штрихкод;
Сообщить("Внимание: добавлен лидирующий ноль к штрихкоду " + Штрихкод);
КонецЕсли;
// Далее стандартная логика поиска товара
ОбработатьШтрихкод(Штрихкод);
КонецЕсли;
КонецПроцедуры
Этот метод следует использовать только в крайнем случае, так как он не решает проблему потери других символов (например, если потеряна первая цифра в коде, не являющемся EAN-13).
Проанализируем еще несколько факторов, которые могут влиять на стабильность передачи данных:
Подводя итог, отметим, что в 90% случаев проблема решается именно аппаратной настройкой сканера — включением конвертации UPC-A в EAN-13 и активацией передачи системного символа. Всегда начинайте диагностику со сброса настроек сканера в заводские (Factory Default) и последующей пошаговой настройки по мануалу производителя.