При автоматизации складского учета и внедрении обязательной маркировки («Честный Знак», ЕГАИС) технические специалисты часто сталкиваются со следующей проблемой: терминал сбора данных (ТСД), например Honeywell ScanPal EDA50K, отлично сканирует сложные двумерные коды DataMatrix локально (в блокнот на устройстве), но при попытке сканирования внутри сессии удаленного рабочего стола (RDP) часть символов бесследно исчезает. В результате учетная система (например, 1С) не может распознать код маркировки, выдает ошибку или некорректно разбирает структуру штрихкода.
В этой статье мы подробно разберем, почему возникает данная проблема, проанализируем физику процесса передачи данных через протокол RDP и рассмотрим по шагам все возможные способы устранения этой неисправности: от тонкой настройки самого ТСД до перевода инфраструктуры на специализированное программное обеспечение.
Для того чтобы найти верное решение, сначала выясним техническую причину происходящего. По умолчанию сканирующий модуль ТСД работает в режиме эмуляции клавиатуры (этот режим часто называется Keyboard Wedge). Когда вы нажимаете кнопку сканирования, ТСД считывает штрихкод и мгновенно «впечатывает» его в активное текстовое поле операционной системы Android.
В этот момент в процесс вмешивается RDP-клиент. Передача нажатий клавиш через удаленный рабочий стол имеет свои ограничения:
GS1 DataMatrix содержит скрытый управляющий символ разделения групп данных — GS (Group Separator, ASCII-код 29). На физической клавиатуре компьютера такой клавиши не существует. Когда RDP-клиент на Android встречает этот символ, он не знает, как его интерпретировать, и просто отбрасывает его. Без символа GS 1С не может понять, где заканчивается серийный номер и начинается так называемый «криптохвост» (код проверки).Shift. Из-за сетевых задержек RDP-клиент часто путает регистр букв штрихкода.Рассмотрим по шагам, как можно решить эти проблемы программными и аппаратными методами.
Первое, что необходимо сделать — изменить режим эмуляции ввода данных в системных настройках самого терминала. Нам нужно заставить устройство передавать символы медленнее, имитируя нажатия реальных физических клавиш.
Разберем алгоритм настройки для ТСД Honeywell:
Standard или Normal. Измените его на Keyboard. Это переключит логику работы устройства на посимвольную эмуляцию клавиатурного ввода.9,10,13, соответствующие клавишам Tab и Enter). Обязательно полностью очистите это поле (сделайте его пустым). Если этого не сделать, данные управляющие символы будут вырезаться при передаче в режиме клавиатуры.Даже при переключении в режим Keyboard скорость эмуляции может оставаться слишком высокой для вашего интернет-соединения с RDP-сервером. Чтобы сервер успевал обрабатывать каждую букву штрихкода, необходимо принудительно замедлить передачу.
Для этого в настройках профиля сканирования ТСД (в том же меню Data Processing Settings или через утилиту ScanWedge) найдите параметр Inter-character delay (Задержка между символами).
Установите значение задержки экспериментальным путем:
Как мы уже выяснили, символ GS теряется при передаче через RDP, так как не имеет клавиатурного аналога. Чтобы обойти это ограничение, мы можем настроить ТСД таким образом, чтобы он автоматически заменял невидимый символ GS на любой другой печатный символ перед отправкой данных в RDP-клиент. Также для восстановления пропущенных разделителей на стороне конфигурации можно использовать расширение для восстановления символов GS в считанных кодах маркировки.
Рекомендуем использовать в качестве подмены символ решетки #, вертикальной черты | или тильды ~.
Для настройки замены выполните следующие действия:
Decode Filter Script, либо через встроенную таблицу замены символов Symbology-Specific). Нам нужно указать правило: заменить символ с ASCII-кодом 29 на печатный символ, например, #.#). Теперь 1С будет корректно понимать, где в полученной строке находится разделитель групп данных, и сможет без проблем разобрать маркировку.Если стандартными средствами Android и RDP-клиента добиться стабильной работы не удается, отличным выходом будет использование сторонней утилиты-транспортера. На рынке существуют специализированные бесплатные и коммерческие приложения, которые перехватывают данные сканера на ТСД и передают их на сервер не в виде эмуляции клавиатуры, а по сетевому протоколу (TCP/IP) напрямую в специальную службу-приемник на сервере.
Одним из таких решений является утилита ScanCodeTransport (ТранспортШтрихкодов).
Для организации работы по этой схеме настроим интеграцию:
Action (строка действия): scan.rcv.message
String extra (дополнительные данные): dataBytes
Если штрихкоды передаются полностью, но буквы приходят в неверном регистре (строчные вместо прописных), проанализируем настройки клавиатуры вашего RDP-клиента:
Будем откровенны: использование ТСД в качестве «глупой клавиатуры» через RDP — это технологический костыль, из-за которого бизнес регулярно несет убытки при сбоях связи на складе. При малейшем пропадании Wi-Fi или задержке сети RDP-сессия зависает, а работа кладовщика останавливается.
Наиболее надежным решением проблемы является переход на архитектуру прямого взаимодействия через специализированное мобильное ПО (например, продукты линеек Клеверенс / Mobile SMARTS или мобильный клиент 1С). В качестве готового варианта работы на ТСД подойдёт решение для проверки и подбора маркируемой продукции через мобильный клиент 1С.
Рассмотрим, почему этот подход работает безупречно:
Подводя итог, отметим: если вы ограничены бюджетом и обязаны настроить работу именно через RDP — последовательно выполните рекомендации по переводу ТСД Honeywell в режим эмуляции Keyboard, очистите поле Wedge as keys, настройте задержку Inter-character delay на уровне 30 мс и настройте замену символа GS. Это позволит решить проблему потери данных в большинстве стандартных сценариев.