Приветствуем вас, уважаемые коллеги! Сегодня мы совместно разберем одну из самых распространенных и неприятных проблем, с которой сталкиваются системные администраторы и специалисты по автоматизации при внедрении маркировки «Честный Знак» (в частности, для табачной продукции). Речь идет о ситуации, когда современный двумерный сканер Datalogic QuickScan QD2430, прекрасно работающий на локальном компьютере, начинает искажать данные при передаче через сессию удаленного рабочего стола (RDP) на операционной системе Windows 10.
В рамках этой статьи мы детально проанализируем физические и программные причины этой неполадки, а также рассмотрим пошаговые практические методы ее решения — от простых корректировок параметров RDP-клиента до перевода оборудования в профессиональный режим работы.
Давайте выясним первопричину происходящего. Когда сканер штрихкодов настроен в режиме эмуляции клавиатуры (режимы USB Keyboard или Keyboard Wedge), операционная система воспринимает его как обычное устройство ввода. Процесс сканирования выглядит для компьютера так, словно оператор со сверхчеловеческой скоростью нажимает клавиши на клавиатуре.
Двумерный код маркировки сигарет (DataMatrix) устроен очень сложно. Он содержит буквы разного регистра (строчные и заглавные), цифры и специальные управляющие символы. Чтобы передать, например, заглавную букву «D» или специальный символ, сканер должен сымитировать нажатие управляющей клавиши Shift, затем нажать клавишу буквы, а после — отпустить Shift. Весь этот цикл передачи одного символа занимает миллисекунды.
А теперь посмотрим, что происходит при работе через RDP на разных операционных системах:
mstsc.exe была существенно изменена для повышения безопасности и поддержки новых функций ОС. При передаче высокоскоростного потока данных от сканера через сеть микрозадержки (пинг) приводят к рассинхронизации пакетов. Сервер получает команду «нажать Shift» с опозданием, либо команда «отпустить Shift» теряется в очереди.В результате на стороне сервера мы наблюдаем хаотичное изменение регистра букв (строчные становятся заглавными, и наоборот), а также появление неверных спецсимволов. Например, вместо косой черты / в блокнот или форму 1С передается знак вопроса ?, поскольку в английской раскладке клавиатуры клавиша / при зажатом Shift выдает именно ?.
Ниже мы подробно разберем четыре эффективных метода устранения этой проблемы.
Использование клавиатурного режима для кодов маркировки — это в принципе компромиссный и нестабильный вариант. Код маркировки сигарет содержит скрытый символ разделителя групп данных — GS (ASCII 29). В клавиатурном режиме сканер чаще всего не может передать его корректно, что делает невозможным правильную проверку кода в 1С и системе маркировки.
Самым надежным и правильным решением является перевод сканера в режим эмуляции COM-порта с последующим пробросом порта в RDP-сессию. В этом режиме данные передаются не как нажатия клавиш, а как единый массив (строка данных) напрямую в порт. Давайте разберем этот процесс по шагам:
Порты (COM и LPT). Убедитесь, что устройство успешно определилось и ему назначен номер (например, COM3).mstsc.exe, нажмите кнопку Показать параметры, перейдите на вкладку Локальные ресурсы. В нижней части в блоке «Локальные устройства и ресурсы» нажмите кнопку Подробнее.... Установите галочку напротив пункта Порты и нажмите «ОК».COM3 (перенаправлено...)).При таком подходе данные будут передаваться мгновенно и без малейших искажений, независимо от раскладки клавиатуры и скорости сети.
Для понимания того, как 1С обрабатывает данные, поступающие из COM-порта, рассмотрим концептуальный пример кода на стороне платформы:
// Пример обработки внешнего события от сканера в модуле управляемого приложения
Процедура ПриВнешнемСобытии(Источник, Событие, Данные) Экспорт
// Проверяем, что событие пришло именно от нашего сканера
Если Источник = "BarCodeScanner" Или Событие = "BarCode" Тогда
ОчищенныеДанные = СокрЛП(Данные);
// Передаем штрихкод в модуль обработки маркировки
ОбработкаМаркировкиКлиент.ОбработатьКодМаркировки(ОчищенныеДанные);
КонецЕсли;
КонецПроцедуры
Если специфика вашей учетной системы или архитектура сети категорически не позволяют использовать виртуальный COM-порт, и вам приходится оставаться в клавиатурном режиме, необходимо искусственно «замедлить» сканер. Это нужно для того, чтобы буфер клавиатурного ввода Windows 10 и RDP-клиент успевали синхронизировать нажатия клавиш-модификаторов (таких как Shift).
Для этого в сканере Datalogic QD2430 предусмотрен параметр Intercharacter Delay (задержка между отправкой отдельных символов штрихкода):
Визуально для кассира или кладовщика скорость сканирования практически не изменится, но микроскопические паузы позволят RDP-клиенту стабильно обрабатывать каждый символ маркировки.
Иногда решить проблему удается локальной перенастройкой самого клиента подключения к удаленному рабочему столу на компьютере пользователя с Windows 10. По умолчанию RDP-клиент перехватывает и обрабатывает многие комбинации клавиш особым образом.
Проанализируем шаги по изменению этих параметров:
mstsc.exe).Это заставит локальную систему Windows 10 перехватывать системные хуки клавиатуры на локальном уровне до отправки их в виртуальный канал RDP, что существенно разгрузит клавиатурный буфер удаленной сессии и уменьшит количество ошибок с некорректным регистром.
У сканеров Datalogic есть уникальная встроенная функция обхода проблем с раскладками клавиатуры и управляющими клавишами. Этот режим называется USB-KBD-ALT (эмуляция ввода через Alt-коды).
При активации этого режима сканер перестает имитировать нажатие обычных клавиш букв. Вместо этого он преобразует каждый символ штрихкода в числовой ASCII-код и передает его путем быстрой имитации зажатой клавиши Alt и ввода цифр на цифровой клавиатуре (Numpad). Этот метод обладает следующими преимуществами:
Shift, так как она вообще не участвует в передаче данных.Для перевода сканера в этот режим найдите в руководстве программирования штрихкод с названием Select USB-KBD-ALT (или аналогичный режим эмуляции Alt-последовательностей) и сосканируйте его.
В сложных корпоративных сетях с жесткими политиками безопасности Active Directory проброс стандартных COM-портов средствами RDP может быть заблокирован групповыми политиками. В этом случае на помощь приходят специализированные программные продукты для виртуализации USB-портов.
Примером такого решения является программа USB Redirector RDP Edition:
Это позволяет использовать любые локальные драйверы непосредственно внутри удаленной сессии без применения встроенных механизмов проброса Microsoft.
Мы подробно разобрали причины некорректного считывания DataMatrix и несколько способов исправления ситуации. Для наглядности сопоставим предложенные методы в таблице:
| Метод решения | Сложность настройки | Надежность для маркировки | Рекомендуемый сценарий |
|---|---|---|---|
| USB-COM (Решение 1) | Средняя | Максимальная (100%) | Основной промышленный стандарт для работы с маркировкой в 1С. |
| Intercharacter Delay (Решение 2) | Низкая | Средняя | Когда нет возможности установить драйверы виртуального COM-порта. |
| Параметры RDP (Решение 3) | Очень низкая | Низкая | Как быстрый вспомогательный шаг в дополнение к другим методам. |
| USB-KBD-ALT (Решение 4) | Низкая | Высокая | Когда критически важна независимость от раскладки клавиатуры. |
Внедряйте профессиональный подход с виртуальными COM-портами, настраивайте оборудование правильно, и пусть ваши системы маркировки работают бесперебойно и точно!