Почему USB-сканер штрихкодов в 1С 7.7 не считывает первую цифру и как это исправить?

Системный администратор 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

При переходе со старых сканеров штрихкодов с физическим интерфейсом RS-232 (COM-порт) на современные USB-устройства в среде «1С:Предприятие 7.7» технические специалисты часто сталкиваются со странным поведением оборудования. Сканер, подключенный в режиме эмуляции клавиатуры (Keyboard Wedge), прекрасно работает в обычном текстовом редакторе «Блокнот», выводя штрихкод полностью. Однако при сканировании непосредственно в 1С первая цифра штрихкода (которая далеко не всегда является нулем) бесследно исчезает, либо штрихкод периодически разрывается на несколько случайных частей. Рассмотрим подробно, почему так происходит, разберем физику этого процесса и найдем надежные способы решения проблемы.

Почему пропадает первая цифра штрихкода: техническая суть проблемы

Когда USB-сканер работает в режиме клавиатурного ввода, операционная система Windows и драйвер торгового оборудования воспринимают его как очень быстро печатающего пользователя. В качестве прослойки между клавиатурным буфером операционной системы и платформой 1С 7.7 обычно используется библиотека Scaner1C.dll (входящая в состав популярного пакета драйверов АТОЛ «Драйвер устройств ввода», например, версии 6.x).

Для того чтобы отделить ручной ввод пользователя на клавиатуре от высокоскоростного потока данных со сканера, драйвер постоянно анализирует временные задержки между нажатиями клавиш. Этот параметр называется «Чувствительность» (Sensitive) или «Таймаут». Если интервал времени между символами меньше установленного порога (например, 30–100 миллисекунд), драйвер считает эту последовательность штрихкодом, перехватывает ее и передает в 1С в виде готового события.

Проблема «первой пропавшей цифры» кроется в отсутствии префикса:

  1. Если в сканере и в настройках драйвера 1С не задан префикс, драйвер не знает заранее, в какой именно миллисекунде начнется сканирование.
  2. Когда сканер считывает штрихкод, он мгновенно отправляет первый символ (например, цифру «4»).
  3. Поскольку у первого символа нет «предыдущего» соседа, драйвер АТОЛ физически не может измерить межсимвольный интервал для этой первой цифры. Для драйвера это нажатие выглядит как обычный ручной ввод пользователя на клавиатуре.
  4. Драйвер пропускает эту первую цифру напрямую в Windows (в активное текстовое поле формы, если оно выбрано), а сам начинает отсчет таймера ожидания.
  5. Все последующие символы (начиная со второго) прилетают с задержкой почти в ноль миллисекунд. Драйвер успешно распознает их как поток сканера, перехватывает и отправляет в 1С.
  6. В результате программа 1С получает усеченный штрихкод без первой цифры, из-за чего товар не может быть найден в базе данных.

Для исправления этой ситуации нам потребуется выполнить комплексную настройку оборудования и драйверов. Проанализируем пошагово все доступные варианты решения.

Решение 1. Настройка чувствительности и таймаута в драйвере АТОЛ

Первое, с чего необходимо начать диагностику оборудования, — это проверка параметров работы клавиатурного перехватчика в тесте драйвера АТОЛ (утилита Scaner_t.exe).

Выясним оптимальные параметры задержек:

  1. Запустите тест драйвера устройств ввода АТОЛ.
  2. Перейдите в настройки параметров подключения. Установите порт в значение «Клавиатура».
  3. Обратите внимание на параметр «Чувствительность» (Sensitive). По умолчанию там может стоять значение 30 мс. Если сканер работает нестабильно или символы теряются, увеличьте это значение. Опытным путем установлено, что оптимальный диапазон чувствительности для современных USB-сканеров составляет от 100 до 300 мс (в некоторых случаях помогает увеличение до 400–1000 мс).
  4. Нажмите кнопку «Поиск оборудования» и считайте штрихкод несколько раз. Посмотрите, в каком виде данные приходят в таблицу поиска. Если штрихкод периодически разбивается на несколько строк (например, «Клавиатура 5» и «Клавиатура 21»), это первый признак того, что таймаут слишком мал или, наоборот, буфер переполняется из-за слишком быстрой передачи.

Если простая регулировка чувствительности в диапазоне от 100 до 400 не помогла полностью избавиться от пропуска первого символа, необходимо переходить к настройке префиксов.

Решение 2. Обязательное программирование префикса и суффикса

Использование префикса — это самый надежный способ заставить клавиатурный драйвер АТОЛ корректно перехватывать штрихкод целиком, включая самый первый символ. Префикс служит сигналом «Внимание, сейчас начнется передача данных!», получив который драйвер мгновенно переключается в режим захвата клавиатурного потока.

В качестве префикса обычно используют редкий символ, который пользователь гарантированно не будет нажимать на клавиатуре при обычной работе (например, знак ;, символ ~, или функциональные клавиши типа F7). Суффиксом стандартно выступает символ возврата каретки — CR (соответствует клавише Enter, код ASCII #13).

Рассмотрим процедуру программирования на примере распространенных китайских сканеров марки NETUM (часто встречающихся под брендом NTEUMM, например, модель NT-2020):

  1. Найдите инструкцию пользователя (User Manual), которая шла в комплекте со сканером, либо скачайте её с официального сайта производителя. Нам понадобится раздел настройки префиксов и суффиксов (обычно называется «Prefix and Suffix Settings» или «Add Prefix / Suffix»).
  2. Для настройки префикса переведите сканер в режим программирования. Для этого последовательно считайте управляющие штрихкоды из инструкции:
    • Enter Setup (Вход в режим настройки);
    • Add Prefix (Добавить префикс);
    • Считайте штрихкоды, соответствующие шестнадцатеричным (Hex) значениям нужного символа из таблицы в конце руководства (например, для символа ; это будет код 3B);
    • Exit Setup with Save (Сохранить настройки и выйти).
  3. Аналогичным образом настройте суффикс, выбрав значение CR (Enter) или CR+LF. В большинстве кратких инструкций Netum/NTEUMM для этого достаточно просто считать один готовый штрихкод с подписью «Terminate with CR» или «Add CR Suffix».
  4. После настройки самого сканера обязательно пропишите те же самые значения префикса и суффикса в параметрах драйвера АТОЛ в 1С 7.7. Например, если в качестве префикса вы запрограммировали точку с запятой, укажите её в поле «Префикс». Если суффиксом является Enter, в поле «Суффикс» должно быть указано значение #13 (или CR в зависимости от версии используемой библиотеки).

Когда драйвер АТОЛ увидит в клавиатурном потоке префикс, он мгновенно заблокирует передачу символов в активное окно ОС и начнет складывать их в буфер 1С. Таким образом, первая цифра штрихкода никогда не потеряется.

Решение 3. Устранение разбиения штрихкода (межсимвольная задержка)

Если при тестировании в утилите драйвера штрихкод периодически разрывается на куски, а в логах отображаются раздельные строки с «осколками» кода, проблема заключается в слишком быстрой передаче данных аппаратной частью сканера. Буфер операционной системы Windows не успевает вовремя обрабатывать столь плотный поток прерываний.

Чтобы это исправить, выполните настройку параметра Inter-character delay (межсимвольная задержка) или Keyboard Speed (скорость клавиатуры) на самом сканере:

  1. Откройте инструкцию к вашему сканеру штрихкодов.
  2. Найдите раздел «Inter-character delay» или «Keyboard Transmission Delay».
  3. Считайте штрихкод, устанавливающий небольшую искусственную задержку между отправкой каждого символа в порт. Обычно рекомендуется установить задержку в пределах 10–20 миллисекунд (в некоторых инструкциях это обозначается как «Medium Speed» или «Slow Speed»).

Такая микрозадержка визуально абсолютно незаметна для человека (штрихкод все так же мгновенно появляется на экране), но она гарантирует стабильный прием каждого символа драйвером АТОЛ без переполнения буфера операционной системы.

Альтернативный и наиболее надежный вариант: Эмуляция COM-порта

Работа со сканером штрихкодов через разрыв клавиатуры (KB) исторически является компромиссным решением, которое тянет за собой множество проблем: зависимость от текущей раскладки клавиатуры (русская/английская), чувствительность к нажатым клавишам Shift/Caps Lock и нестабильность таймаутов.

Если ваше оборудование поддерживает перевод в режим виртуального COM-порта (USB Virtual COM), настоятельно рекомендуется использовать именно этот метод. При работе через виртуальный COM-порт данные передаются напрямую в порт ввода-вывода, полностью минуя клавиатурный ввод Windows. Это исключает любые проблемы с потерей первой цифры или раскладкой клавиатуры.

Разберем процесс перевода сканера NTEUMM/NETUM в режим эмуляции COM-порта по шагам:

  1. Возьмите инструкцию к вашему сканеру и найдите раздел переключения интерфейсов (Interface Selection).
  2. Считайте управляющий штрихкод с подписью «USB Virtual COM» (или «USB COM Port Emulation»). Сканер издаст специфический звуковой сигнал и кратковременно перезагрузится.
  3. Подключите сканер к компьютеру. Операционная система Windows обнаружит новое устройство.
  4. Для работы виртуального COM-порта потребуется установить драйвер от производителя сканера. В сканерах NETUM чаще всего используются популярные микросхемы преобразователей интерфейсов (например, Prolific PL2303 или Silicon Labs CP210x). Скачайте и установите соответствующий драйвер. В Диспетчере устройств Windows в разделе «Порты (COM и LPT)» должно появиться новое устройство, например: Silicon Labs CP210x USB to UART Bridge (COM3).
  5. Запомните номер выделенного COM-порта (в нашем примере это COM3).
  6. Перейдите в 1С 7.7. Откройте параметры торгового оборудования и в настройках драйвера АТОЛ или стандартного 1С-совского драйвера ScanOpos.dll укажите:
    • Порт: COM3 (номер вашего виртуального порта);
    • Скорость: 9600 (или ту, что указана по умолчанию для вашей модели);
    • Префиксы и суффиксы в режиме COM-порта настраивать и сопоставлять в драйвере гораздо проще, так как данные гарантированно приходят единым пакетом. Обычно достаточно оставить суффикс #13 (CR).

Перевод сканера в режим эмуляции COM-порта полностью избавит вас от необходимости подбирать таймауты чувствительности клавиатуры и сделает работу кассиров или кладовщиков максимально быстрой и безотказной.

← На главную