При работе с терминалами сбора данных (ТСД) на базе операционной системы Android системные администраторы часто сталкиваются с неприятной особенностью: при сканировании штрихкода внутри удаленной сессии (RDP) первый символ кода бесследно исчезает. При этом локально на самом устройстве (например, в текстовом редакторе или строке поиска) штрихкод считывается полностью и корректно. Это создает серьезные препятствия для складского учета, так как данные в учетную систему 1С поступают в искаженном виде.
В данной статье мы подробно разберем причины возникновения этой проблемы и рассмотрим несколько эффективных способов ее решения, основываясь на практическом опыте участников сообщества и технических особенностях протокола передачи данных.
Проанализируем ситуацию: когда сканер ТСД считывает штрихкод, он имитирует быстрый ввод с клавиатуры. Протокол RDP (Remote Desktop Protocol) передает эти нажатия клавиш на сервер. Проблема заключается в том, что при поступлении первого символа системе часто требуется время на «пробуждение» канала ввода или перенос фокуса в активное окно приложения. В результате первый символ «съедается» механизмом синхронизации клавиатурного ввода между Android-клиентом и Windows-сервером.
Интересно заметить, что в некоторых приложениях, таких как cmd.exe (командная строка), символ может не теряться, в то время как в Notepad или поле ввода 1С потеря происходит стабильно. Это подтверждает теорию о том, что графический интерфейс Windows обрабатывает события ввода иначе, чем консольный.
Выясним, как можно «обмануть» систему передачи данных. Один из самых простых и действенных методов — заставить сканер отправлять «пустой» или системный символ перед основным кодом. Рассмотрим этот метод по шагам:
Alt на виртуальной клавиатуре ТСД непосредственно перед сканированием. Если после этого штрихкод передается целиком, значит, проблема в инициализации ввода. Клавиша Alt как бы «подготавливает» канал передачи.F10 в настройках встроенной утилиты сканирования (обычно это приложение Barcode Scanner, Keyboard Emulator или DataWedge) позволяет полностью решить проблему. Процесс выглядит так: при сканировании сначала отправляется сигнал F10, который активирует меню окна или просто фокусирует систему на вводе, а затем передается сам штрихкод.Для реализации этого в коде (например, если вы используете мобильное приложение или кастомизированный драйвер) можно использовать программную вставку символа:
// Пример логики вставки префикса перед передачей ШК
Штрихкод = "123456789";
СимволПрефикса = Символы.ВК + "F10"; // Условная схема
ИтоговаяСтрока = СимволПрефикса + Штрихкод;
Разберем еще один важный параметр, который часто скрыт в глубоких настройках ТСД. Посмотрим на работу сканера: он выбрасывает всю последовательность цифр штрихкода мгновенно. RDP не всегда успевает обработать такой поток.
Попробуем найти в настройках приложения для сканирования параметр Inter-character delay (межсимвольная задержка). Установка значения в 20-50 миллисекунд заставит устройство делать микропаузу между каждым символом. Этого времени серверу достаточно, чтобы обработать первый символ и подготовиться к приему остальных. Хотя это немного замедляет процесс сканирования, стабильность данных значительно возрастает.
Проанализируем режимы работы сканирующего модуля. Большинство ТСД по умолчанию работают в режиме эмуляции клавиатуры (Keyboard Mode). Это самый конфликтный режим для RDP.
Если ваше устройство поддерживает Clipboard Mode, мы рекомендуем переключиться на него. В этом режиме сканер считывает код, копирует его в буфер обмена Android и программно отправляет команду Ctrl+V (вставить) в удаленную сессию. Поскольку данные передаются единым блоком через буфер обмена протокола RDP, риск потери первого или любого другого символа сводится к нулю.
Если штатные настройки «безымянного» ТСД не позволяют гибко управлять префиксами или задержками, проанализируем возможность использования стороннего софта. Существуют приложения типа External Keyboard Helper или специализированные Keyboard Wedge драйверы.
Эти утилиты позволяют перехватывать поток данных от сканера и модифицировать его:
Scancode вместо Unicode, что более понятно для Windows-сервера.Рассмотрим долгосрочную перспективу. Работа через RDP на Android-устройствах — это зачастую использование технологий, предназначенных для других задач. Для современных конфигураций, таких как 1С:Управление торговлей или 1С:ERP, правильным решением будет использование Мобильного клиента или Мобильной платформы 1С.
В этом случае обмен данными происходит через веб-сервисы или HTTP-запросы, а работа со сканером осуществляется через встроенные средства платформы 1С:
// Пример подключения сканера в мобильном приложении 1С
СредстваМультимедиа.ПодключитьСканерШтрихкодов(Новый ОписаниеОповещения("ОбработкаСканирования", ЭтотОбъект));
Процедура ОбработкаСканирования(Данные, ДополнительныеПараметры) Экспорт
Если Данные.Результат Тогда
Сообщить("Считан код: " + Данные.Баркод);
КонецЕсли;
КонецПроцедуры
Такой подход полностью исключает сетевые задержки клавиатурного ввода и проблемы с раскладками или «съеденными» символами, так как 1С получает данные напрямую от драйвера сканера устройства.
Подводя итог, если вам необходимо оперативно решить проблему в текущей RDP-инфраструктуре:
Следование этим шагам позволит стабилизировать работу складского персонала и избежать ошибок при вводе данных в систему.