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

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

Проблема подключения торгового оборудования в 1С — одна из самых распространенных задач, с которыми сталкивается разработчик или системный администратор. Ситуация, когда сканер Honeywell 1450g успешно проходит тест в настройках, но отказывается реагировать в документах или справочниках, является классической. Разберем подробно, почему процедура ВнешнееСобытие может не вызываться, и какие шаги необходимо предпринять для устранения этой неисправности.

Анализ причин отсутствия внешнего события

Для начала проанализируем, как работает механизм внешнего события. Когда сканер считывает штрихкод, драйвер (например, 1С:Сканеры штрихкода) получает данные из порта (COM или клавиатурного буфера) и инициирует событие в платформе 1С. Если процедура ВнешнееСобытие в модуле формы не срабатывает, это может означать одно из трех: данные не считаются завершенными (нет суффикса), драйвер не «слушает» порт в конкретной форме или процедура обработчика объявлена некорректно.

Шаг 1. Настройка суффикса в сканере и драйвере

Это критически важный момент. Для того чтобы 1С поняла, что передача штрихкода завершена, сканер должен передать специальный символ — суффикс. Чаще всего это символ возврата каретки (CR — Carriage Return), который соответствует коду ASCII 13.

Рассмотрим порядок действий:

  1. Возьмите инструкцию (Programming Chart) к вашему сканеру Honeywell 1450g.
  2. Найдите и отсканируйте управляющий штрихкод "Add CR Suffix". Это заставит сканер добавлять символ #13 в конце каждого считанного кода.
  3. Перейдите в 1С в настройки торгового оборудования. В параметрах сканера укажите суффикс 13 (CR).
  4. Проверьте работу в окне "Тест устройства". Вы должны увидеть считанный штрихкод, за которым следует символ #13.

Важно: Если сканер работает в режиме эмуляции клавиатуры, убедитесь, что в настройках драйвера в 1С также выбран порт «Клавиатура», а суффикс установлен в значение 13. Без этого драйвер может «бесконечно» ждать продолжения ввода данных, и событие не будет сгенерировано.

Шаг 2. Проверка сигнатуры процедуры ВнешнееСобытие

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

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


Процедура ВнешнееСобытие(Источник, Событие, Данные)
    // Сообщим параметры для проверки связи
    Сообщить("Источник: " + Источник);
    Сообщить("Событие: " + Событие);
    Сообщить("Данные: " + Данные);
    
    // Здесь должна быть логика обработки штрихкода
КонецПроцедуры

Если вы используете обычные формы (как в УТ 10.3), убедитесь, что в свойствах формы в строке "Внешнее событие" указано имя этой процедуры. Если поле пустое — событие игнорируется.

Шаг 3. Особенности управляемых форм (БПО)

В современных конфигурациях (УТ 11, БП 3.0, Розница 2.x) на управляемых формах используется Библиотека Подключаемого Оборудования (БПО). В этом случае недостаточно просто иметь процедуру в модуле. Сканер нужно программно «подключить» при открытии формы, чтобы драйвер начал перехватывать данные.

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


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    // Подключаем сканер при открытии формы
    ОповещенияПриПодключении = Новый ОписаниеОповещения("ПодключитьСканерШКЗавершение", ЭтотОбъект);
    МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПоТипу(ОповещенияПриПодключении, УникальныйИдентификатор, "СканерШтрихкода");
КонецПроцедуры

&НаКлиенте
Процедура ПодключитьСканерШКЗавершение(РезультатВыполнения, ДополнительныеПараметры) Экспорт
    // Если результат Истина, сканер готов к работе
    СканерШтрихкодаПодключен = РезультатВыполнения.Результат;
КонецПроцедуры

Этот код инициализирует подписку формы на события от сканеров. Без вызова НачатьПодключениеОборудованиеПоТипу платформа не будет транслировать данные в ВнешнееСобытие конкретной формы, даже если сканер настроен верно в системе.

Шаг 4. Режим работы: COM-эмуляция vs Клавиатура

Выясним причину, почему COM-порт может быть предпочтительнее. Сканеры Honeywell 1450g часто переводят в режим USB Serial (COM-эмуляция). Это позволяет 1С работать со сканером монопольно и стабильно.

Однако здесь есть подводные камни:

Шаг 5. Работа в терминальном режиме (RDP)

Если вы работаете через удаленный рабочий стол, проброс COM-порта может быть нестабильным. В этом случае часто помогает перевод сканера в режим клавиатуры, но с использованием драйвера NativeApi от 1С. Современный драйвер NativeApi умеет перехватывать клавиатурный ввод сканера (HID-устройство) и преобразовывать его во внешнее событие без использования виртуальных COM-портов. Это избавляет от проблем с занятыми портами и их пробросом через RDP.

Для этого в настройках оборудования 1С выберите драйвер "1С:Сканеры штрихкода (NativeApi)" и установите порт "Клавиатура".

Резюме

Для восстановления работоспособности Honeywell 1450g выполните следующие действия: сбросьте настройки сканера к заводским, добавьте суффикс CR (#13) с помощью управляющего штрихкода, проверьте наличие этого суффикса в настройках 1С и убедитесь, что процедура ВнешнееСобытие в вашей форме не только существует, но и вызывается за счет корректного подключения оборудования при открытии. Соблюдение этих правил гарантирует стабильную работу торгового оборудования.

← На главную