Почему не работает внешнее событие при подключении сканера Honeywell 1452g к 1С и как это исправить?

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

При интеграции беспроводного сканера штрихкодов Honeywell Voyageur 1452g (или его проводного аналога 1450g) с конфигурациями на платформе 1С:Предприятие (особенно со старыми решениями вроде УПП 1.3, КА 1.1 или УТ 10.3) часто возникает классическая проблема. Устройство успешно определяется операционной системой, проходит тесты в драйвере торгового оборудования, без проблем считывает данные в Блокнот, но процедура ВнешнееСобытие в модуле формы 1С упорно отказывается запускаться.

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

---

Понимание природы «Внешнего события» в 1С

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

  1. Режим COM-порта (RS-232): Драйвер постоянно слушает определенный COM-порт. Как только в порт приходят данные, драйвер мгновенно упаковывает их и передает в 1С в виде внешнего события.
  2. Режим клавиатуры (HID-эмуляция): Драйвер перехватывает посимвольный ввод с клавиатуры. Чтобы отличить быстрый ввод со сканера от нажатий клавиш пользователем, драйвер ориентируется на специальный маркер окончания посылки — суффикс (обычно это символ возврата каретки Carriage Return — CR, соответствующий коду 13) и настраиваемый таймаут (чувствительность). Если суффикс не настроен на физическом уровне или в драйвере, событие не сгенерируется, а штрихкод просто вставится текстом туда, где в данный момент установлен курсор.

Если вы используете устаревшие драйверы АТОЛ (например, платные версии 6.x/8.x без лицензии), они могут работать в демо-режиме с задержкой в 10 секунд или блокировать генерацию событий для оборудования сторонних производителей (не АТОЛ). Поэтому рекомендуется полностью отказаться от старых драйверов АТОЛ и использовать современные компоненты 1С.

---

Метод 1. Настройка сканера в режиме клавиатуры (HID) с перехватом событий

Этот способ привлекателен тем, что не требует установки специализированных системных драйверов в Windows. Сканер определяется как обычное USB-устройство ввода, а вся магия перехвата реализуется на стороне 1С с помощью стандартной компоненты «1С:Сканеры штрихкода (NativeApi)».

Рассмотрим этот метод по шагам:

Шаг 1. Физический сброс и настройка суффикса на сканере

Для того чтобы 1С понимала, где заканчивается штрихкод, сканер должен физически посылать символ возврата каретки (CR) в конце каждого сканирования. Настроим это:

  1. Найдите оригинальную англоязычную инструкцию к сканеру Honeywell 1452g (Quick Start Guide). Крайне важно использовать именно оригинальный PDF-файл или качественную распечатку с официального сайта, так как в неофициальных русскоязычных руководствах часто нарушены пропорции штрихкодов, и сканер их просто не считает.
  2. Считайте штрихкод Standard Product Defaults (Сброс на заводские настройки). Сканер издаст звуковой сигнал.
  3. Считайте управляющий штрихкод Add CR Suffix (Добавить суффикс возврата каретки) или воспользуйтесь программированием суффикса вручную: считайте штрихкод Add Suffix, затем в таблице программирования последовательно считайте коды цифр 0, 1, 3 и завершите настройку кодом Save.

Шаг 2. Настройка подключения в 1С

Теперь необходимо правильно связать устройство с базой данных:

  1. Откройте 1С и перейдите в меню подключения торгового оборудования.
  2. Добавьте новое устройство, выберите обработчик драйвера «1С:Сканеры штрихкода (NativeApi)».
  3. Перейдите в настройки драйвера. В поле «Порт» выберите значение «Клавиатура» (в некоторых версиях отображается как Порт 0).
  4. В поле «Суффикс» обязательно укажите значение 13 (или выберите символ 'CR' из выпадающего списка).
  5. Установите параметр «Таймаут» (чувствительность) в диапазоне от 50 до 100 мс. Это время, в течение которого драйвер ожидает завершения ввода пакета символов. Если таймаут будет слишком мал, 1С разобьет один штрихкод на несколько частей и внешнее событие не сработает корректно.

---

Метод 2. Подключение через эмуляцию виртуального COM-порта (USB Serial)

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

Рассмотрим детальный алгоритм настройки виртуального COM-порта:

Шаг 1. Подготовка операционной системы и установка драйвера

Очень важно соблюдать последовательность действий, иначе Windows сопоставит сканеру стандартный драйвер клавиатуры, и COM-порт не создастся:

  1. Полностью отключите физическую базу сканера Honeywell 1452g от USB-порта компьютера.
  2. Загрузите с официального сайта Honeywell или надежного источника драйвер HSM USB Serial Driver (рекомендуется версия x64 3.5.9 или стабильная ветка 2.1.9).
  3. Запустите установку драйвера строго с правами администратора. Завершите процесс установки.
  4. Подключите базовую станцию сканера к USB-порту компьютера. Windows должна обнаружить новое устройство и сопоставить ему установленный драйвер.

Шаг 2. Перевод сканера в режим COM-эмуляции

Сам сканер по умолчанию работает в режиме клавиатуры. Переведем его в режим эмуляции последовательного интерфейса:

  1. Возьмите настроечную инструкцию Honeywell.
  2. Считайте штрихкод USB Serial Emulation (в некоторых версиях руководств он имеет технический код TRMUSB130).
  3. После этого сканер перезагрузится (издаст характерную трель). В Диспетчере устройств Windows в ветке «Порты (COM и LPT)» должно появиться устройство с именем вида Honeywell Charge & Communication Base (COM3). Запомните номер выделенного COM-порта.

Шаг 3. Проверка параметров порта и суффикса

Даже в режиме COM-порта сканеру необходим суффикс возврата каретки для корректной отсечки данных драйвером 1С. Повторите процедуру программирования суффикса 13 (CR), описанную в Меоде 1.

Также откройте свойства созданного COM-порта в Диспетчере устройств и убедитесь, что скорость передачи данных (Baud rate), четность и стоповые биты соответствуют настройкам, которые вы укажете в 1С (стандартно: 9600 bps, 8 data bits, no parity, 1 stop bit).

---

Программные настройки на стороне платформы 1С

Если физически сканер настроен верно, но 1С по-прежнему игнорирует сканирование, проблема кроется в коде конфигурации или привязке событий в форме.

1. Регистрация внешних компонент

Если вы используете старый драйвер ScanOPOS.dll, убедитесь, что его разрядность соответствует разрядности клиента 1С. Для 32-битного клиента 1С (даже на 64-битной Windows) библиотека должна быть зарегистрирована в системе через командную строку от имени администратора:

regsvr32 "C:\PathToDll\ScanOPOS.dll"

2. Активация прослушивания порта формой

Для того чтобы форма начала принимать внешние события от торгового оборудования, при её открытии должен инициализироваться механизм работы со сканером. Проанализируем правильный шаблон написания кода инициализации в модуле формы (для обычных форм, таких как в УПП):


Процедура ПриОткрытии()
    // Проверим подключение торгового оборудования и зарегистрируем форму как получателя событий
    Если ПолучитьСерверТО() <> Неопределено Тогда
        ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
    КонецЕсли;
КонецПроцедуры

Процедура ПриЗакрытии()
    // Обязательно отключаем прослушивание при закрытии формы, чтобы освободить порт
    Если ПолучитьСерверТО() <> Неопределено Тогда
        ПолучитьСерверТО().ОтключитьКлиента(ЭтаФорма);
    КонецЕсли;
КонецПроцедуры

3. Проверка привязки обработчика «ВнешнееСобытие»

Это одна из самых частых ошибок начинающих разработчиков 1С. Процедура ВнешнееСобытие может быть написана в коде модуля формы абсолютно корректно, но если в свойствах самой формы (в палитре свойств на вкладке «События») поле «Внешнее событие» пустое — платформа никогда не передаст управление в эту процедуру. Обязательно выберите имя вашей процедуры в свойствах формы!

Шаблон обработки события в модуле формы должен выглядеть следующим образом:


Процедура ВнешнееСобытие(Источник, Событие, Данные)
    
    // Проверяем, что событие сгенерировано именно сканером штрихкода
    Если ПолучитьСерверТО().ПолучитьСобытиеОтСканера(Событие) Тогда
        
        // Временно приостанавливаем прослушивание, чтобы избежать дребезга или повторного сканирования
        ПолучитьСерверТО().ИсключитьПрослушивание(ЭтаФорма);
        
        Штрихкод = СокрЛП(Данные);
        
        // Наша функция обработки полученного штрихкода
        ОбработатьПолученныйШтрихкод(Штрихкод);
        
        // Возвращаем форму в режим прослушивания событий сканера
        ПолучитьСерверТО().ВключитьПрослушивание(ЭтаФорма);
        
    КонецЕсли;
    
КонецПроцедуры

---

Особенности беспроводных моделей (Honeywell 1452g)

Поскольку модель 1452g является беспроводной (Bluetooth), у нее есть несколько специфических аппаратных нюансов, которые могут влиять на генерацию событий:

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

← На главную