При использовании терминалов сбора данных (ТСД) под управлением Windows Mobile / Windows 10 IoT, подключающихся к терминальному серверу по протоколу RDP, разработчики часто сталкиваются с проблемой: штрихкод успешно сканируется в Блокнот или текстовый документ, но процедура ОбработкаВнешнегоСобытия() в 1С не вызывается.
Разберем подробно причины такого поведения оборудования и проанализируем основные способы решения этой задачи.
Проанализируем ситуацию с технической стороны. Когда сканер ТСД работает в режиме эмуляции клавиатуры («в разрыв клавиатуры»), утилита сканирования (например, Honeywell ScanWedge или DataCollection) отправляет прочитанный штрихкод как последовательный набор нажатий клавиш клавиатуры. RDP-клиент транслирует эти нажатия на сервер, где они поступают напрямую в активный элемент фокуса Windows.
Для того чтобы в 1С сработало внешнее событие через стандартный драйвер устройства ввода (например, АТОЛ или нативный драйвер 1С), система должна понять, где начинается и где заканчивается ввод штрихкода. Если префиксы и суффиксы не заданы явно или драйвер на сервере не может перехватить клавиатурный поток в терминальной сессии, 1C воспринимает сканирование как обычный ручной ввод с клавиатуры пользователем.
На практике стандартные типовые документы и формы 1С не предназначены для маленьких экранов ТСД. Наиболее удобным и надежным решением для работы в разрыв клавиатуры является разработка отдельной формы (обработки) под разрешение экрана терминала.
Рассмотрим по шагам алгоритм реализации данного подхода:
Enter (CR).Enter вызывает событие ПриИзменении или нажатие кнопки по умолчанию, в котором запускается алгоритм обработки товара.При таком подходе внешнее событие не требуется вовсе, так как обработка штрихкода происходит штатным образом через события элементов формы 1С.
Если необходимо генерировать именно внешнее событие ВнешнееСобытие(Источник, Событие, Данные), требуется жестко разделить обычный ввод с клавиатуры и сканирование штрихкода.
Рассмотрим порядок настройки параметров:
STX (или горячую клавишу F12), а в качестве суффикса — ETX или Enter.Получив префикс, драйвер 1С перехватывает последующий поток символов, накапливает его до получения суффикса и генерирует штатное внешнее событие, передавая штрихкод в параметр Данные.
Самым отказоустойчивым техническим решением для работы с ТСД по RDP является передача данных через последовательный порт, а не через эмуляцию клавиатуры.
Разберем последовательность действий для реализации этого метода:
При использовании виртуального COM-порта данные сканирования транслируются напрямую в драйвер 1С. Это полностью исключает зависимость от фокуса элементов формы, раскладки клавиатуры и сетевых задержек RDP-протокола, гарантируя 100% вызов процедуры ОбработкаВнешнегоСобытия().