Почему ТСД Motorola искажает данные DataMatrix при сканировании в 1С через RDP?

Системный администратор 1С v7.7 Торговля и дистрибуция
← На главную

Работа со старым парком оборудования, таким как Motorola MC65 на базе Windows Mobile, в связке с современными требованиями маркировки «Честный Знак» часто преподносит неприятные сюрпризы. Одной из самых распространенных проблем является «кореженье» или искажение данных при передаче считанного кода DataMatrix в терминальную сессию 1С (особенно на платформе 7.7). Символы могут меняться местами, заменяться на другие (например, вместо : появляется ; или буквы другого регистра) или вовсе пропадать.

В этой статье мы подробно разберем, почему это происходит, и проанализируем пошаговые алгоритмы настройки оборудования и программного обеспечения для стабильной работы.

Причина проблемы: Почему «скачет» код?

Прежде чем переходить к настройкам, проанализируем ситуацию. Когда сканер работает в режиме эмуляции клавиатуры (HID), он «вбрасывает» считанную последовательность символов в буфер клавиатуры так, будто их очень быстро набрал человек. При работе через RDP (Remote Desktop Protocol) эта последовательность упаковывается в пакеты и отправляется на сервер.

Здесь возникают три критических фактора:

  1. Задержки сети и переполнение буфера: RDP не всегда успевает обрабатывать поток символов, идущий сплошным массивом. Символы начинают перемешиваться.
  2. Конфликт раскладок: Если на ТСД включена английская раскладка, а на сервере в момент сканирования — русская, спецсимволы DataMatrix будут преобразованы согласно текущей кодировке Windows.
  3. Управляющие символы: Коды DataMatrix содержат непечатные символы (например, GS — Group Separator, ASCII 29). Система может интерпретировать их как нажатие функциональных клавиш (например, CTRL), что приводит к непредсказуемому поведению формы 1С.

Решение 1: Настройка межсимвольной задержки (Inter-Character Delay)

Это первое, что необходимо сделать. Нам нужно заставить сканер делать микроскопические паузы между передачей каждого знака. Это позволит RDP-клиенту корректно упаковать каждый символ, а серверу — своевременно его обработать.

Рассмотрим процесс настройки в утилите DataWedge (стандартное ПО для управления сканером на Motorola):

  1. Откроем DataWedge на ТСД.
  2. Перейдем в настройки профиля (обычно это Profile0 или Basic Configuration).
  3. Найдем пункт Keystroke Output или Keyboard Output.
  4. Ищем параметр Inter-Character Delay. По умолчанию он может быть равен 0.
  5. Установим значение в диапазоне от 10 до 50 мс.

Важно: Слишком большая задержка сделает сканирование медленным, слишком маленькая — не решит проблему. Начните с 20 мс и тестируйте стабильность.

Решение 2: Передача данных как событий (Send Characters as Events)

Если простая задержка не помогает, попробуем изменить способ передачи данных в ОС. В настройках той же утилиты DataWedge в разделе Keyboard Output часто присутствует опция Send Characters as Events.

Разберем, что это дает: вместо имитации нажатия физических клавиш, драйвер будет генерировать программные события ввода символов. Это позволяет игнорировать текущую раскладку клавиатуры (RU/EN) и передавать символы «как есть». Если эта опция доступна в вашей версии DataWedge — обязательно включите её.

Решение 3: Обработка непечатных символов (GS1 Group Separator)

Коды маркировки часто содержат символ-разделитель ASCII 29. В режиме клавиатуры он часто превращается в CTRL, что заставляет 1С открывать случайные окна или выполнять команды вместо ввода текста. Проанализируем ситуацию в 1С 7.7. Поскольку это «самописка», мы можем настроить предобработку.

Нам необходимо в настройках DataWedge через Advanced Data Formatting (ADF) заменить символ ASCII 29 на печатный символ, который не встречается в коде, например, на решетку #.

После этого в коде 1С мы сможем обработать полученную строку:


// Пример обработки строки в 1С 7.7
Функция ОбработатьШтрихкод(СчитанныйКод)
    // Заменяем наш суррогатный разделитель обратно на стандартный, если нужно
    ТекстКода = СтрЗаменить(СчитанныйКод, "#", Симв(29));
    
    // Или просто отсекаем лишнее, если нам нужен только серийный номер
    // ... логика разбора DataMatrix
КонецФункции

Решение 4: Настройка RDP-клиента на Windows Mobile

Иногда проблема кроется в самом клиенте удаленного рабочего стола. Рассмотрим настройки стандартного Remote Desktop Mobile:

  1. Проверьте параметры передачи сочетаний клавиш. В настройках RDP выберите «Использовать сочетания клавиш только на удаленном компьютере».
  2. Если стандартный клиент продолжает искажать данные, рекомендуется рассмотреть специализированное ПО, такое как CETerm или Naurtech. Эти клиенты созданы специально для ТСД и имеют встроенные механизмы «проброса» данных сканера минуя буфер клавиатуры.

Решение 5: Переход на эмуляцию COM-порта (рекомендуемый метод)

Как справедливо отмечено в обсуждении, режим клавиатуры — это всегда компромисс. Для промышленной эксплуатации лучше всего использовать режим Serial Port Emulation.

Разберем этот метод по шагам:

  1. В настройках сканера на ТСД переключаем режим с Keyboard HID на Serial (COM) Emulation.
  2. В настройках RDP-подключения на ТСД (вкладка «Локальные ресурсы») ставим галочку Порты (Ports).
  3. Теперь сервер увидит сканер как виртуальный COM-порт (например, COM4).
  4. В 1С 7.7 подключаем стандартную компоненту Scaner1C.dll.

При таком подходе данные будут попадать не в активное поле ввода, а в процедуру ОбработкаВнешнегоСобытия. Это полностью исключает влияние раскладки, задержек и фокуса ввода.

Пример кода в 1С для приема данных:


Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    Если (Источник = "Scanner") И (Событие = "BarCodeValue") Тогда
        // Данные приходят в чистом виде, без искажений RDP
        СчитанныйКод = СокрЛП(Данные);
        ПроверитьКодМаркировки(СчитанныйКод);
    КонецЕсли;
КонецПроцедуры

Дополнительные советы для Motorola MC65

Проанализируем специфику модели MC65. Это устройство обладает ограниченными ресурсами процессора. Выясним, что еще может влиять на качество сканирования:

Подводя итог: если терминал «корежит» данные, в 90% случаев это лечится установкой Inter-Character Delay на 30-40 мс. Если это не помогает — единственный надежный путь заключается в уходе от эмуляции клавиатуры в сторону проброса COM-порта.

← На главную