При автоматизации складских операций с использованием терминалов сбора данных (ТСД), работающих в терминальной сессии (RDP), нередко возникает плавающая ошибка: при считывании штрихкода процедура ВнешнееСобытие не вызывается. Вместо этого символы штрихкода попадают в активный элемент интерфейса как обычный клавиатурный ввод. Если в этот момент курсор находится в табличной части на числовой колонке, платформа 1С активизирует механизм быстрого поиска, открывая окно ввода символов. После этого дальнейшее сканирование блокируется до тех пор, пока оператор вручную не закроет режим поиска.
Разберем детально технические причины такого поведения и рассмотрим проверенные способы настройки оборудования и платформы для стабильной работы сканера.
Для понимания корня проблемы проанализируем, как работает сканер в режиме клавиатурного клина (Keyboard Wedge / КБД) внутри сессии RDP:
WH_KEYBOARD или WH_KEYBOARD_LL). Если штрихкод передается без явных аппаратных префиксов, драйвер определяет начало сканирования по скорости поступления символов (интервал между нажатиями). При сетевых всплесках Wi-Fi пакетизация протокола RDP нарушается, символы приходят пачками с неравномерными интервалами. Если пауза между первым и вторым символом превышает установленный порог, драйвер считает первый знак ручным вводом пользователя и пропускает его в операционную систему.LowLevelHooksTimeout. Если терминальный сервер кратковременно перегружен или обработчик хука не успевает ответить системе в отведенный тайм-аут, Windows автоматически отключает данный хук или пропускает необработанные нажатия напрямую в окно с фокусом.Esc или клика мыши.Перевод сканера ТСД из режима эмуляции клавиатуры в режим виртуального COM-порта — наиболее надежное архитектурное решение. В этом случае поток данных вообще не использует клавиатурный буфер Windows и не зависит от текущего фокуса элементов формы 1С.
COM3).ВнешнееСобытие с параметрами события.Если перевод в COM-порт невозможен и приходится использовать режим эмуляции клавиатуры, необходимо исключить определение штрихкода по тайм-аутам между символами. Для этого задействуем непечатные управляющие символы.
STX с кодом 02 или специальную клавишу вроде F12) и суффикс (символ перевода каретки CR или код 13).Если используется драйвер с распознаванием по скорости ввода, необходимо настроить чувствительность (порог срабатывания) под особенности RDP-соединения:
30–50 мс до 100–150 мс, чтобы сетевые задержки RDP не приводили к дроблению штрихкода.
HKEY_CURRENT_USER\Control Panel\Desktop
проверяем или создаем строковый/DWORD параметр LowLevelHooksTimeout и устанавливаем значение 5000 (время ожидания в миллисекундах), чтобы предотвратить принудительное отключение хуков операционной системой.Устаревшие внешние компоненты, разработанные по технологии COM, подвержены конфликтам в многопользовательской среде терминального сервера. Рекомендуется обновить компоненты интеграции:
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
Если Источник = "СканерШтрихкода" ИЛИ Событие = "Штрихкод" Тогда
ОбработатьШтрихкод(Данные);
КонецЕсли;
КонецПроцедуры
При регулярных проблемах с RDP-сессиями на мобильных устройствах стоит рассмотреть изменение архитектуры взаимодействия: