При переходе со старых сканеров штрихкодов с физическим интерфейсом RS-232 (COM-порт) на современные USB-устройства в среде «1С:Предприятие 7.7» технические специалисты часто сталкиваются со странным поведением оборудования. Сканер, подключенный в режиме эмуляции клавиатуры (Keyboard Wedge), прекрасно работает в обычном текстовом редакторе «Блокнот», выводя штрихкод полностью. Однако при сканировании непосредственно в 1С первая цифра штрихкода (которая далеко не всегда является нулем) бесследно исчезает, либо штрихкод периодически разрывается на несколько случайных частей. Рассмотрим подробно, почему так происходит, разберем физику этого процесса и найдем надежные способы решения проблемы.
Когда USB-сканер работает в режиме клавиатурного ввода, операционная система Windows и драйвер торгового оборудования воспринимают его как очень быстро печатающего пользователя. В качестве прослойки между клавиатурным буфером операционной системы и платформой 1С 7.7 обычно используется библиотека Scaner1C.dll (входящая в состав популярного пакета драйверов АТОЛ «Драйвер устройств ввода», например, версии 6.x).
Для того чтобы отделить ручной ввод пользователя на клавиатуре от высокоскоростного потока данных со сканера, драйвер постоянно анализирует временные задержки между нажатиями клавиш. Этот параметр называется «Чувствительность» (Sensitive) или «Таймаут». Если интервал времени между символами меньше установленного порога (например, 30–100 миллисекунд), драйвер считает эту последовательность штрихкодом, перехватывает ее и передает в 1С в виде готового события.
Проблема «первой пропавшей цифры» кроется в отсутствии префикса:
Для исправления этой ситуации нам потребуется выполнить комплексную настройку оборудования и драйверов. Проанализируем пошагово все доступные варианты решения.
Первое, с чего необходимо начать диагностику оборудования, — это проверка параметров работы клавиатурного перехватчика в тесте драйвера АТОЛ (утилита Scaner_t.exe).
Выясним оптимальные параметры задержек:
Если простая регулировка чувствительности в диапазоне от 100 до 400 не помогла полностью избавиться от пропуска первого символа, необходимо переходить к настройке префиксов.
Использование префикса — это самый надежный способ заставить клавиатурный драйвер АТОЛ корректно перехватывать штрихкод целиком, включая самый первый символ. Префикс служит сигналом «Внимание, сейчас начнется передача данных!», получив который драйвер мгновенно переключается в режим захвата клавиатурного потока.
В качестве префикса обычно используют редкий символ, который пользователь гарантированно не будет нажимать на клавиатуре при обычной работе (например, знак ;, символ ~, или функциональные клавиши типа F7). Суффиксом стандартно выступает символ возврата каретки — CR (соответствует клавише Enter, код ASCII #13).
Рассмотрим процедуру программирования на примере распространенных китайских сканеров марки NETUM (часто встречающихся под брендом NTEUMM, например, модель NT-2020):
; это будет код 3B);#13 (или CR в зависимости от версии используемой библиотеки).Когда драйвер АТОЛ увидит в клавиатурном потоке префикс, он мгновенно заблокирует передачу символов в активное окно ОС и начнет складывать их в буфер 1С. Таким образом, первая цифра штрихкода никогда не потеряется.
Если при тестировании в утилите драйвера штрихкод периодически разрывается на куски, а в логах отображаются раздельные строки с «осколками» кода, проблема заключается в слишком быстрой передаче данных аппаратной частью сканера. Буфер операционной системы Windows не успевает вовремя обрабатывать столь плотный поток прерываний.
Чтобы это исправить, выполните настройку параметра Inter-character delay (межсимвольная задержка) или Keyboard Speed (скорость клавиатуры) на самом сканере:
Такая микрозадержка визуально абсолютно незаметна для человека (штрихкод все так же мгновенно появляется на экране), но она гарантирует стабильный прием каждого символа драйвером АТОЛ без переполнения буфера операционной системы.
Работа со сканером штрихкодов через разрыв клавиатуры (KB) исторически является компромиссным решением, которое тянет за собой множество проблем: зависимость от текущей раскладки клавиатуры (русская/английская), чувствительность к нажатым клавишам Shift/Caps Lock и нестабильность таймаутов.
Если ваше оборудование поддерживает перевод в режим виртуального COM-порта (USB Virtual COM), настоятельно рекомендуется использовать именно этот метод. При работе через виртуальный COM-порт данные передаются напрямую в порт ввода-вывода, полностью минуя клавиатурный ввод Windows. Это исключает любые проблемы с потерей первой цифры или раскладкой клавиатуры.
Разберем процесс перевода сканера NTEUMM/NETUM в режим эмуляции COM-порта по шагам:
Silicon Labs CP210x USB to UART Bridge (COM3).COM3).ScanOpos.dll укажите:
#13 (CR).Перевод сканера в режим эмуляции COM-порта полностью избавит вас от необходимости подбирать таймауты чувствительности клавиатуры и сделает работу кассиров или кладовщиков максимально быстрой и безотказной.