Как настроить эмуляцию COM-порта для USB-сканера Honeywell (Metrologic) Eclipse MS5145 в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При подключении торгового оборудования к платформе 1С:Предприятие 7.7 часто возникает ситуация, когда USB-сканер штрихкодов по умолчанию работает в режиме эмуляции клавиатуры (HID). В таком режиме сканируемые данные имитируют ручной ввод с клавиатуры и не вызывают штатную процедуру ОбработкаВнешнегоСобытия. Это критично для большинства нетиповых и отраслевых конфигураций, где алгоритм обработки завязан исключительно на перехват асинхронных событий от виртуального последовательного порта. Разберем по шагам, как перевести сканер Honeywell (Metrologic) Eclipse MS5145 в режим эмуляции COM-порта, правильно установить драйверы в операционной системе и корректно настроить прием данных в 1С 7.7.

Шаг 1. Перевод сканера в режим эмуляции COM-порта (USB Serial Emulation)

Для того чтобы сканер перестал определяться операционной системой как стандартная HID-клавиатура и начал работать как виртуальный последовательный порт, выполним аппаратную перенастройку с помощью управляющих сервисных штрихкодов из официального руководства (MetroSelect Configuration Guide):

  1. Считаем штрихкод сброса настроек к заводским значениям: Recall Defaults. Это гарантирует очистку ранее записанных конфликтующих параметров.
  2. Считаем управляющий штрихкод перевода в режим эмуляции COM-порта: Enable Uni-Directional USB Serial Emulation Mode (в некоторых версиях мануалов код называется USB Serial Emulation).
  3. Отключим сканер от разъема USB и подключим его повторно, чтобы операционная система заново инициализировала устройство с новыми дескрипторами.

Шаг 2. Установка системных драйверов виртуального COM-порта

После перевода устройства в новый режим Windows обнаружит новое непознанное устройство, для которого необходимо установить официальный драйвер виртуального порта производителя. Проанализируем правильный порядок действий:

  1. Установим специализированный драйвер Honeywell (Metrologic) USB Serial Driver (например, HSM USB Serial Driver).
  2. Откроем Диспетчер устройств Windows и развернем ветку Порты (COM и LPT). Убедимся, что там появилось устройство, например Honeywell Bidirectional Device (COMx).
  3. Важное ограничение старых компонент 1С: если для подключения используется стандартная библиотека SCANOPOS.DLL, она зачастую не может работать с номерами портов выше COM4. Если системе автоматически назначен порт, например, COM5 или выше, откроем свойства устройства в Диспетчере устройств, перейдем на вкладку Параметры порта → Дополнительно и вручную изменим номер порта на свободный в диапазоне от COM1 до COM4.
  4. Предотвращение сброса настроек при перезагрузке: чтобы сканер при выключении ПК не сбрасывался обратно в HID-режим, в Диспетчере устройств откроем свойства всех Корневых USB-концентраторов и на вкладке Управление электропитанием снимем флажок «Разрешить отключение этого устройства для экономии энергии».

Шаг 3. Выбор и настройка внешней компоненты для 1С 7.7

Платформа 1С 7.7 не умеет напрямую обращаться к портам без внешних COM-объектов. Для работы со сканером применяются два основных варианта библиотек:

  1. Стандартная компонента 1С (SCANOPOS.DLL): бесплатная библиотека из комплекта ИТС. Требует строгого соблюдения номера порта (COM1–COM4) и корректной регистрации в системе.
  2. Драйвер устройств ввода АТОЛ: отлично работает с любыми номерами портов и нестандартными префиксами. Для бесплатного использования без задержки в 10 секунд (которая появляется в демо-режиме новых версий) рекомендуется использовать релизы до 2010 года (например, DTO6_2009_02_11).

Выясним причину возможных проблем при регистрации библиотек в современных ОС: поскольку клиент 1С 7.7 является 32-разрядным приложением, в 64-битных версиях Windows внешнюю компоненту необходимо регистрировать через 32-битную утилиту командой из командной строки от имени администратора:

C:\Windows\SysWOW64\regsvr32.exe "C:\PathToDll\Scaner1C.dll"

Шаг 4. Проверка считывания и настройка префиксов/суффиксов

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

  1. В настройках подключения укажем правильный номер виртуального COM-порта, скорость (по умолчанию для сканеров обычно 9600) и параметры четности.
  2. Выполним поиск оборудования и отсканируем штрихкод.
  3. Посмотрим на возвращаемую строку: сканер должен передавать суффикс перевода строки (символ с кодом 13 — CR или 10 — LF). Если суффикса нет, необходимо настроить его через сервисные штрихкоды сканера (штрихкод Add CR Suffix), так как драйвер завершает прием пакета именно по символу суффикса.

Шаг 5. Архитектура обработки внешнего события в коде 1С 7.7

Разберем типичную ошибку, из-за которой в нетиповых конфигурациях (например, в «Квартплата для ТСЖ, ЖСК») штрихкод успешно считывается в тесте оборудования, но не обрабатывается в формах справочников и документов.

В платформе 1С 7.7 внешнее событие от оборудования никогда не приходит напрямую в модуль документа или справочника. Событие всегда сначала перехватывается предопределенной процедурой в Глобальном модуле. Если в ней не реализована маршрутизация в активное окно, форма события не увидит.

Рассмотрим пример реализации маршрутизации события в Глобальном модуле:


Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    // Источник - имя источника события (например, "Scanner")
    // Событие - тип события (например, "BarCodeRead")
    // Данные - считанный штрихкод

    Если Событие = "BarCodeRead" Тогда
        // Очищаем считанную строку от возможных служебных символов
        СчитанныйШК = СокрЛП(Данные);
        
        // Передаем управление в процедуру активной открытой формы
        Форма = АктивноеОкно();
        Если ПустоеЗначение(Форма) = 0 Тогда
            Попытка
                // Вызываем экспортную процедуру обработки в модуле текущей формы
                Форма.ОбработатьЧтениеШтрихкода(СчитанныйШК);
            Исключение
                // Если в открытой форме процедура не предусмотрена
            КонецПопытки;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Посмотрим на реализацию принимающей процедуры непосредственно в модуле формы справочника или документа:


Процедура ОбработатьЧтениеШтрихкода(Знач Штрихкод) Экспорт
    Если ПустаяСтрока(Штрихкод) = 1 Тогда
        Возврат;
    КонецЕсли;
    
    // Выполняем поиск элемента по штрихкоду
    Спр = СоздатьОбъект("Справочник.ЛицевыеСчета");
    Если Спр.НайтиПоРеквизиту("Штрихкод", Штрихкод, 1) = 1 Тогда
        ТекущийЭлемент = Спр.ТекущийЭлемент();
    Иначе
        Предупреждение("Элемент со штрихкодом " + Штрихкод + " не найден!");
    КонецЕсли;
КонецПроцедуры

Чек-лист для диагностики проблем

  1. Проверка активности порта: убедимся, что при открытии рабочей формы в 1С вызывается метод инициализации и включения оборудования (свойство УстройствоВключено = 1 или соответствующий метод внешней компоненты). Если компонента выключена, события генерироваться не будут.
  2. Модальные диалоги: проанализируем, не открыто ли в системе модальное окно. В 1С 7.7 любое модальное окно полностью блокирует очередь внешних событий платформы.
  3. Точка останова в отладчике: установим точку останова в самом начале процедуры ОбработкаВнешнегоСобытия в Глобальном модуле. Если отладчик не останавливается при сканировании — проблема в драйвере или COM-объекте. Если останавливается — проверяем корректность логики поиска и заполнения реквизитов формы.
← На главную