Почему не срабатывает процедура ВнешнееСобытие при считывании штрихкода сканером в 1С?

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

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

Суть проблемы и механизм работы торгового оборудования

Для подключения торгового оборудования в обычных формах традиционно используется Сервер торгового оборудования. В модуле формы прописывается подключение клиента при открытии и отключение при закрытии:


Процедура ПриОткрытии()
    ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
КонецПроцедуры

Процедура ПриЗакрытии()
    ПолучитьСерверТО().ОтключитьКлиента(ЭтаФорма);
КонецПроцедуры

Функция ПоддерживаетсяВидТО(Вид) Экспорт
    Результат = Ложь;
    Если Вид = Перечисления.ВидыТорговогоОборудования.СканерШтрихКода Тогда
        Результат = Истина;
    КонецЕсли;
    Возврат Результат;
КонецФункции

Ожидается, что при считывании штрихкода платформа автоматически вызовет процедуру ВнешнееСобытие(Источник, Событие, Данные). Если этого не происходит, разберем основные причины и способы их устранения.

Причина 1. Отсутствие привязки обработчика к событию формы

Простое добавление процедуры Процедура ВнешнееСобытие(Источник, Событие, Данные) в модуль формы вручную или путем копирования из другого объекта не связывает её с событием формы автоматически.

Для решения этой проблемы выполним следующие шаги:

  1. Откроем форму обработки или документа в режиме Конфигуратора.
  2. Перейдем в палитру свойств самой формы (нажав Alt + Enter на корневом элементе формы).
  3. В списке событий найдем строку Внешнее событие.
  4. Убедимся, что в поле напротив события выбрано имя нашей процедуры ВнешнееСобытие. Если поле пустое, выберем процедуру из выпадающего списка.

Причина 2. Режим работы сканера (USB-HID / Эмуляция клавиатуры)

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

Рассмотрим два основных варианта работы со сканером в зависимости от требуемого режима:

Вариант А. Перевод сканера в режим эмуляции COM-порта (Virtual COM)

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

  1. Переведем сканер в режим эмуляции COM-порта с помощью считывания управляющего штрихкода из инструкции к устройству (например, USB Serial Emulation).
  2. Установим виртуальный COM-драйвер от производителя сканера в операционной системе.
  3. В настройках торгового оборудования в 1С укажем созданный виртуальный COM-порт и загрузим необходимую внешнюю компоненту.
  4. Зададим суффикс завершения ввода (обычно символ CR с кодом ASCII 13) в настройках драйвера в 1С.

Вариант Б. Работа в режиме клавиатуры с префиксом горячей клавиши (F7)

Если нет возможности перевести сканер в режим COM-порта, можно настроить работу через эмуляцию нажатия клавиш. В типовых конфигурациях на обычных формах (например, УТ 10.3, КА 1.1) предусмотрен стандартный механизм диалогового ввода штрихкода по клавише F7.

  1. Запрограммируем сканер так, чтобы перед отправкой самого штрихкода он передавал префикс F7, а после штрихкода — суффикс Enter.
  2. При сканировании устройство отправит нажатие F7, что вызовет типовое окно «Ввод штрихкода», затем передаст цифры штрихкода и завершающий Enter для подтверждения ввода.

Дополнительные факторы, влияющие на перехват событий

Проанализируем еще несколько нюансов, о которых важно помнить при настройке:

  1. Разрядность клиента и внешней компоненты: Если используется 64-разрядный клиент 1С, используемая внешняя компонента драйвера торгового оборудования также должна быть 64-разрядной.
  2. Права доступа для регистрации компоненты: При первичной настройке драйвера однократно запустим платформу 1С от имени администратора, чтобы компонента смогла зарегистрироваться в системе.
  3. Фокус окна: Внешние события от драйверов перехватываются только в том случае, если форма 1С является активным окном в данный момент.
← На главную