При работе в терминальных сессиях (RDP) со сканерами штрихкодов (например, популярной моделью Zebra / Symbol LS2208) пользователи нередко сталкиваются с ситуацией, когда штрихкод считывается не целиком. В документ 1С попадает только часть кода: пропадают первые 2–3 цифры либо отсекается окончание последовательности. При этом при сканировании в текстовый редактор «Блокнот» код считывается полностью и без ошибок.
Проанализируем природу этой проблемы и подробно разберем все способы ее устранения.
Когда сканер подключен в режиме эмуляции клавиатуры (USB-HID / USB-KB), он передает весь считанный штрихкод в операционную систему в виде непрерывного потока нажатий клавиш с минимальной задержкой. В среде RDP передача нажатий клавиш через сеть подвержена сетевым задержкам (джиттеру), буферизации пакетов и влиянию фоновых процессов терминального сервера.
Компонента интеграции подключаемого оборудования 1С использует специальный клавиатурный перехватчик (хук). Она ожидает поступления символов с определенной частотой. Если из-за сетевого лага интервал между двумя соседними символами превышает установленный тайм-аут, драйвер 1С считает ввод штрихкода завершенным. В результате во внешнее событие передается только первая порция символов, а остаток кода либо теряется, либо сбрасывается в активное поле как ручной ввод с клавиатуры. В «Блокноте» потерь нет, так как текстовый редактор не анализирует интервалы между нажатиями и выводит всё, что попадает в очередь сообщений Windows.
Это самый надежный и технически грамотный вариант интеграции торгового оборудования для работы в терминале. Передача данных через последовательный интерфейс не зависит от скорости набора на клавиатуре, сетевых лагов RDP и текущей раскладки клавиатуры.
Разберем процесс настройки по шагам:
Порты (COM и LPT) появится новое устройство с назначенным номером порта (например, COM3).mstsc), перейдем на вкладку Локальные ресурсы, нажмем кнопку Подробнее... в блоке «Локальные устройства и ресурсы» и установим флаг напротив пункта Порты.НСИ и администрирование → РМК и оборудование → Подключаемое оборудование. Откроем карточку сканера, выберем драйвер 1С:Сканеры штрихкода (NativeApi) или 1C:Сканеры штрихкода (COM), в параметрах укажем проброшенный номер COM-порта, скорость 9600 и протестируем считывание.Если перевод в режим COM-порта по каким-либо причинам невозможен и сканер должен оставаться в режиме клавиатуры (USB-KB), устранить рассинхронизацию можно аппаратной задержкой.
По умолчанию сканер шлет символы слишком быстро, из-за чего буфер клавиатуры RDP-клиента захлебывается. В руководстве по программированию LS2208 найдем раздел Intercharacter Delay / Keystroke Delay и установим задержку между отправкой символов (рекомендуемое значение — от 5 до 20 миллисекунд). Это замедлит эмуляцию печати, сделает передачу данных через сетевой стек равномерной и предотвратит разрыв штрихкода.
Рассмотрим настройку параметров компоненты сканера внутри конфигурации 1С:
30 до 75 мс. Если символы теряются, последовательно протестируем уменьшение интервала (например, 20–30 мс) либо его увеличение (до 100–120 мс) в зависимости от используемой версии драйвера и стабильности канала связи.CR (код 13) или CRLF, как в самом сканере, так и в таблице префиксов/суффиксов в 1С.Если в одной базе (например, 1С:Бухгалтерия предприятия 3.0) сканер работает стабильно, а в 1С:Управление торговлей 11 происходят сбои, проанализируем версию используемой компоненты БПО (Библиотеки подключаемого оборудования):
1C:Сканеры штрихкода (NativeApi) версии 9.x / 10.x).