Как отловить внешнее событие при сканировании штрихкода на ТСД через RDP в 1С?

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

При использовании терминалов сбора данных (ТСД) под управлением Windows Mobile / Windows 10 IoT, подключающихся к терминальному серверу по протоколу RDP, разработчики часто сталкиваются с проблемой: штрихкод успешно сканируется в Блокнот или текстовый документ, но процедура ОбработкаВнешнегоСобытия() в 1С не вызывается.

Разберем подробно причины такого поведения оборудования и проанализируем основные способы решения этой задачи.

Почему не срабатывает внешнее событие в RDP-сессии

Проанализируем ситуацию с технической стороны. Когда сканер ТСД работает в режиме эмуляции клавиатуры («в разрыв клавиатуры»), утилита сканирования (например, Honeywell ScanWedge или DataCollection) отправляет прочитанный штрихкод как последовательный набор нажатий клавиш клавиатуры. RDP-клиент транслирует эти нажатия на сервер, где они поступают напрямую в активный элемент фокуса Windows.

Для того чтобы в 1С сработало внешнее событие через стандартный драйвер устройства ввода (например, АТОЛ или нативный драйвер 1С), система должна понять, где начинается и где заканчивается ввод штрихкода. Если префиксы и суффиксы не заданы явно или драйвер на сервере не может перехватить клавиатурный поток в терминальной сессии, 1C воспринимает сканирование как обычный ручной ввод с клавиатуры пользователем.

Способ 1. Создание специализированной формы для ТСД с выделенным полем ввода

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

Рассмотрим по шагам алгоритм реализации данного подхода:

  1. Создаем специализированную форму для терминала с минимальным количеством элементов управления, крупными кнопками и понятным интерфейсом.
  2. Размещаем на форме текстовое поле ввода, в которое будет попадать штрихкод.
  3. Обеспечиваем постоянный фокус на этом поле ввода (поле можно сделать единственным активным элементом или поместить его за пределы видимой области экрана).
  4. Настраиваем суффикс сканирования в утилите ТСД на отправку клавиши Enter (CR).
  5. При сканировании штрихкод мгновенно влетает в поле ввода, а завершающий суффикс Enter вызывает событие ПриИзменении или нажатие кнопки по умолчанию, в котором запускается алгоритм обработки товара.

При таком подходе внешнее событие не требуется вовсе, так как обработка штрихкода происходит штатным образом через события элементов формы 1С.

Способ 2. Настройка префиксов и суффиксов в ScanWedge и торговом оборудовании 1С

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

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

  1. В утилите сканирования на ТСД (ScanWedge) добавляем нехарактерный управляющий префикс и суффикс. Например, в качестве префикса можно задать сочетание клавиш или управляющий символ STX (или горячую клавишу F12), а в качестве суффикса — ETX или Enter.
  2. В 1С открываем настройки подключаемого оборудования (раздел «Сканеры штрихкода»).
  3. Выбираем тип подключения «Клавиатура» или «Сканер в разрыве клавиатуры».
  4. В настройках драйвера 1С указываем точно такие же значения префикса и суффикса, которые были настроены на ТСД.

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

Способ 3. Перевод сканера в режим виртуального COM-порта (Virtual COM)

Самым отказоустойчивым техническим решением для работы с ТСД по RDP является передача данных через последовательный порт, а не через эмуляцию клавиатуры.

Разберем последовательность действий для реализации этого метода:

  1. В утилите управления сканером на ТСД переводим вывод данных из режима «Keyboard Wedge» в режим «Virtual COM» (создание виртуального последовательного порта на устройстве).
  2. В параметрах RDP-клиента на ТСД включаем проброс портов (Serial ports / COM ports) в терминальную сессию.
  3. На серверной стороне Windows Server убеждаемся, что проброшенный порт отображается в диспетчере устройств или виртуальных портах сессии.
  4. В 1С в настройках торгового оборудования выбираем драйвер сканера штрихкода и указываем номер проброшенного COM-порта и скорость передачи.

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

← На главную