Почему отваливается USB-сканер штрихкодов в 1С и как решить эту проблему

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

Каждый специалист по автоматизации торговли рано или поздно сталкивается с неприятной ситуацией: подключенный к рабочему месту USB-сканер штрихкодов (например, популярный Metrologic / Honeywell MS 5145 Eclipse) периодически перестает передавать данные в программу. При этом само устройство ведет себя штатно — лазер светится, сканер успешно считывает штрихкод и издает характерный звуковой сигнал (пикает), однако в саму 1С данные не поступают. Временным решением обычно становится перезапуск торгового оборудования в параметрах 1С или физическое переподключение кабеля, но через час-два проблема повторяется.

В этой статье мы подробно проанализируем причины этой неисправности и разберем по шагам эффективные методы борьбы с «отвалами» сканера штрихкодов при работе в среде 1С.

Причина 1: Сбои питания USB-портов и статическое электричество

Сканеры штрихкодов серии MS 5145 чувствительны к качеству электропитания. В момент считывания кода, когда активируется лазерный диод и запускается декодер, происходит кратковременный пик потребления тока. Если устройство подключено к передней панели системного блока, к пассивному (без внешнего питания) USB-хабу или через слишком длинный кабель, напряжение на USB-порту может просесть ниже критической отметки 4.75 В. В этот момент контроллер интерфейса сканера зависает: звуковой сигнал обрабатывается аппаратной частью самого сканера, но виртуальный COM-порт перестает передавать данные в операционную систему.

Другим важным фактором является статическое электричество (ESD). В торговых залах с синтетическим покрытием пола или пластиковыми прилавками на корпусе сканера и руках кассира скапливается статический заряд. Легкий пластиковый корпус MS 5145 плохо экранирован. Микроразряд статики при соприкосновении сканера с металлическими деталями приводит к зависанию интерфейсного чипа USB-to-Serial.

Рекомендации по устранению:

  1. Подключайте сканер штрихкодов строго в порты USB, расположенные непосредственно на материнской плате (на задней панели системного блока).
  2. Полностью исключите использование пассивных USB-удлинителей и разветвителей. При необходимости используйте активные USB-хабы с собственным блоком питания.
  3. В свойствах корневых USB-концентраторов в Диспетчере устройств Windows перейдите на вкладку «Управление электропитанием» и снимите флажок «Разрешить отключение этого устройства для экономии энергии».
  4. Дополнительно в настройках текущей схемы электропитания Windows в разделе «Параметры USB» переведите значение «Параметр временного отключения USB-порта» в состояние «Запрещено».

Причина 2: Проблемы устаревшего драйвера HSM USB Serial

При использовании сканера в режиме эмуляции виртуального COM-порта операционная система Windows взаимодействует с устройством через специальный драйвер. Старые версии официального драйвера Honeywell Scanning and Mobility (HSM) USB Serial Driver (например, ветки r1.12 или r1.19) имеют известные проблемы совместимости с современными сборками ОС, которые выражаются в утечках памяти и зависании виртуального порта при длительном отсутствии обращений к нему (режим простоя).

Для исправления ситуации необходимо обновить драйвер до стабильной версии (например, линейки 3.5.x). Проанализируем правильный алгоритм обновления:

  1. Отключите сканер от USB-порта компьютера.
  2. Полностью удалите старый драйвер через панель управления Windows («Программы и компоненты»).
  3. Очистите реестр Windows. Особое внимание уделите удалению ключа UsbDriverVer в ветках устройств Honeywell, если они остались после деинсталляции.
  4. Установите актуальную версию драйвера HSM USB Serial Driver.
  5. Подключите сканер штрихкодов обратно и дождитесь его инициализации в системе. В Диспетчере устройств в разделе «Порты (COM и LPT)» должен появиться виртуальный COM-порт со стабильным номером.

Причина 3: Нестабильная работа scanopos.dll и переход на NativeAPI

Во многих конфигурациях 1С прошлых поколений (особенно на платформе 1С 8.1 и 8.2) для подключения торгового оборудования использовалась внешняя компонента scanopos.dll. Данная библиотека работает по технологии ActiveX (COM), требующей регистрации в реестре Windows через утилиту regsvr32.

Компонента scanopos.dll крайне чувствительна к любым задержкам на стороне платформы 1С. Если в момент сканирования штрихкода система выполняет тяжелый запрос к базе данных (например, поиск номенклатуры по коду занимает от 0.5 до 2 секунд, как описывал автор темы), буфер компоненты переполняется или блокируется. Связь с виртуальным COM-портом разрывается, и восстановить её без перезапуска сессии или переподключения устройства невозможно.

Решение: Настоятельно рекомендуем отказаться от использования устаревшей компоненты scanopos.dll и перевести конфигурацию на современный встроенный драйвер «1С:Сканеры штрихкода (NativeApi)». Технология NativeApi работает на уровне самой платформы 1С без регистрации библиотек в операционной системе, эффективно управляет буфером обмена и способна автоматически восстанавливать соединение со сканером при кратковременной потере связи с виртуальным COM-портом.

Причина 4: Очистка лимита подключений в драйвере АТОЛ

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

Для решения этой проблемы мы можем написать небольшую сервисную обработку в 1С, которая принудительно очистит буфер занятых устройств драйвера. Рассмотрим пример программного кода:


ПрогИД = "AddIn.Scaner45";
ПодключитьВнешнююКомпоненту(ПрогИД);
Драйвер = Новый (ПрогИД);
Сч = 1;

Пока Драйвер.УдалитьУстройство = 0 Цикл
    Сообщить("Удалено зависшее устройство драйвера: " + Сч);
    Сч = Сч + 1;
КонецЦикла;

Сообщить("Очистка успешно завершена. Всего удалено устройств: " + (Сч - 1));

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

Причина 5: Нестабильность RDP-подключения

Если работа в 1С организована в терминальном режиме через удаленный рабочий стол (RDP), виртуальный COM-порт сканера пробрасывается с локального ПК на удаленный сервер. При любых микросбоях сети или кратковременных переподключениях RDP-сессии виртуальный порт на сервере теряет связь с физическим USB-устройством.

При этом старая сессия 1С на сервере продолжает монопольно удерживать имя COM-порта, но данные из него уже не получает. Для решения этой проблемы рекомендуется использовать специализированное ПО для стабильного проброса USB по сети (например, USB for Remote Desktop от FabulaTech) либо перевести устройство в режим эмуляции клавиатуры.

Причина 6: Перевод сканера в режим эмуляции клавиатуры (HID Keyboard)

Наиболее надежным и отказоустойчивым способом подключения сканера Honeywell MS 5145 является его перевод в режим обычной клавиатуры. В отличие от эмуляции COM-порта, клавиатурный интерфейс (HID-устройство) не требует установки сторонних драйверов, не зависает при микросбоях питания и поддерживается операционной системой на базовом уровне.

Многие специалисты избегают этого режима, так как считают, что кассиру придется постоянно нажимать клавишу F7 на клавиатуре перед каждым сканированием. Однако современные конфигурации 1С позволяют полностью автоматизировать этот процесс с помощью программирования префиксов и суффиксов.

Выполним настройку по шагам:

  1. Возьмите руководство по настройке сканера (MetroSelect Single-Line Configuration Guide).
  2. Отсканируйте управляющий штрихкод «Recall Defaults» для сброса сканера на заводские настройки.
  3. Отсканируйте штрихкод «Enable USB Keyboard Emulation» для перевода сканера в режим клавиатуры.
  4. Запрограммируйте суффикс возврата каретки (CR/Enter, код 13). Для этого последовательно отсканируйте коды: Enter Configuration -> Configure Suffix -> 0 -> 1 -> 3 -> Save Configuration.
  5. При необходимости запрограммируйте префикс (например, сочетание клавиш Ctrl+F7), чтобы 1С однозначно понимала, что ввод данных идет именно от сканера штрихкодов.
  6. В настройках торгового оборудования 1С выберите драйвер устройства ввода (клавиатурный) и укажите в параметрах подключения аналогичные префиксы и суффиксы.

Теперь при считывании штрихкода сканер сам пошлет в систему запрограммированный префикс, 1С перехватит событие клавиатурного ввода, автоматически откроет форму поиска номенклатуры, заполнит поле штрихкода и закроет форму по суффиксу Enter. Этот метод гарантирует стабильную работу оборудования без зависаний виртуальных COM-портов. При необходимости можно ознакомиться с примером реализации работы сканера в разрыв клавиатуры с генерацией внешнего события.

← На главную