Каждый специалист по автоматизации торговли рано или поздно сталкивается с неприятной ситуацией: подключенный к рабочему месту USB-сканер штрихкодов (например, популярный Metrologic / Honeywell MS 5145 Eclipse) периодически перестает передавать данные в программу. При этом само устройство ведет себя штатно — лазер светится, сканер успешно считывает штрихкод и издает характерный звуковой сигнал (пикает), однако в саму 1С данные не поступают. Временным решением обычно становится перезапуск торгового оборудования в параметрах 1С или физическое переподключение кабеля, но через час-два проблема повторяется.
В этой статье мы подробно проанализируем причины этой неисправности и разберем по шагам эффективные методы борьбы с «отвалами» сканера штрихкодов при работе в среде 1С.
Сканеры штрихкодов серии MS 5145 чувствительны к качеству электропитания. В момент считывания кода, когда активируется лазерный диод и запускается декодер, происходит кратковременный пик потребления тока. Если устройство подключено к передней панели системного блока, к пассивному (без внешнего питания) USB-хабу или через слишком длинный кабель, напряжение на USB-порту может просесть ниже критической отметки 4.75 В. В этот момент контроллер интерфейса сканера зависает: звуковой сигнал обрабатывается аппаратной частью самого сканера, но виртуальный COM-порт перестает передавать данные в операционную систему.
Другим важным фактором является статическое электричество (ESD). В торговых залах с синтетическим покрытием пола или пластиковыми прилавками на корпусе сканера и руках кассира скапливается статический заряд. Легкий пластиковый корпус MS 5145 плохо экранирован. Микроразряд статики при соприкосновении сканера с металлическими деталями приводит к зависанию интерфейсного чипа USB-to-Serial.
Рекомендации по устранению:
При использовании сканера в режиме эмуляции виртуального COM-порта операционная система Windows взаимодействует с устройством через специальный драйвер. Старые версии официального драйвера Honeywell Scanning and Mobility (HSM) USB Serial Driver (например, ветки r1.12 или r1.19) имеют известные проблемы совместимости с современными сборками ОС, которые выражаются в утечках памяти и зависании виртуального порта при длительном отсутствии обращений к нему (режим простоя).
Для исправления ситуации необходимо обновить драйвер до стабильной версии (например, линейки 3.5.x). Проанализируем правильный алгоритм обновления:
UsbDriverVer в ветках устройств Honeywell, если они остались после деинсталляции.Во многих конфигурациях 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-портом.
Если для подключения сканера вы используете драйвер торгового оборудования от компании «АТОЛ» (особенно старых бесплатных версий), вы можете столкнуться со специфическим багом. При каждом программном переподключении или инициализации оборудования драйвер регистрирует новое логическое устройство в системе. Когда количество таких скрытых подключений достигает лимита (99 устройств), драйвер полностью блокирует работу порта, и сканер «отваливается».
Для решения этой проблемы мы можем написать небольшую сервисную обработку в 1С, которая принудительно очистит буфер занятых устройств драйвера. Рассмотрим пример программного кода:
ПрогИД = "AddIn.Scaner45";
ПодключитьВнешнююКомпоненту(ПрогИД);
Драйвер = Новый (ПрогИД);
Сч = 1;
Пока Драйвер.УдалитьУстройство = 0 Цикл
Сообщить("Удалено зависшее устройство драйвера: " + Сч);
Сч = Сч + 1;
КонецЦикла;
Сообщить("Очистка успешно завершена. Всего удалено устройств: " + (Сч - 1));
Этот код инициализирует внешнюю компоненту АТОЛ и в цикле последовательно вызывает метод УдалитьУстройство, пока не будут полностью стерты все неиспользуемые логические соединения, блокирующие работу физического сканера штрихкодов.
Если работа в 1С организована в терминальном режиме через удаленный рабочий стол (RDP), виртуальный COM-порт сканера пробрасывается с локального ПК на удаленный сервер. При любых микросбоях сети или кратковременных переподключениях RDP-сессии виртуальный порт на сервере теряет связь с физическим USB-устройством.
При этом старая сессия 1С на сервере продолжает монопольно удерживать имя COM-порта, но данные из него уже не получает. Для решения этой проблемы рекомендуется использовать специализированное ПО для стабильного проброса USB по сети (например, USB for Remote Desktop от FabulaTech) либо перевести устройство в режим эмуляции клавиатуры.
Наиболее надежным и отказоустойчивым способом подключения сканера Honeywell MS 5145 является его перевод в режим обычной клавиатуры. В отличие от эмуляции COM-порта, клавиатурный интерфейс (HID-устройство) не требует установки сторонних драйверов, не зависает при микросбоях питания и поддерживается операционной системой на базовом уровне.
Многие специалисты избегают этого режима, так как считают, что кассиру придется постоянно нажимать клавишу F7 на клавиатуре перед каждым сканированием. Однако современные конфигурации 1С позволяют полностью автоматизировать этот процесс с помощью программирования префиксов и суффиксов.
Выполним настройку по шагам:
Enter Configuration -> Configure Suffix -> 0 -> 1 -> 3 -> Save Configuration.Ctrl+F7), чтобы 1С однозначно понимала, что ввод данных идет именно от сканера штрихкодов.Теперь при считывании штрихкода сканер сам пошлет в систему запрограммированный префикс, 1С перехватит событие клавиатурного ввода, автоматически откроет форму поиска номенклатуры, заполнит поле штрихкода и закроет форму по суффиксу Enter. Этот метод гарантирует стабильную работу оборудования без зависаний виртуальных COM-портов. При необходимости можно ознакомиться с примером реализации работы сканера в разрыв клавиатуры с генерацией внешнего события.