Работа со старым парком оборудования, таким как Motorola MC65 на базе Windows Mobile, в связке с современными требованиями маркировки «Честный Знак» часто преподносит неприятные сюрпризы. Одной из самых распространенных проблем является «кореженье» или искажение данных при передаче считанного кода DataMatrix в терминальную сессию 1С (особенно на платформе 7.7). Символы могут меняться местами, заменяться на другие (например, вместо : появляется ; или буквы другого регистра) или вовсе пропадать.
В этой статье мы подробно разберем, почему это происходит, и проанализируем пошаговые алгоритмы настройки оборудования и программного обеспечения для стабильной работы.
Прежде чем переходить к настройкам, проанализируем ситуацию. Когда сканер работает в режиме эмуляции клавиатуры (HID), он «вбрасывает» считанную последовательность символов в буфер клавиатуры так, будто их очень быстро набрал человек. При работе через RDP (Remote Desktop Protocol) эта последовательность упаковывается в пакеты и отправляется на сервер.
Здесь возникают три критических фактора:
CTRL), что приводит к непредсказуемому поведению формы 1С.Это первое, что необходимо сделать. Нам нужно заставить сканер делать микроскопические паузы между передачей каждого знака. Это позволит RDP-клиенту корректно упаковать каждый символ, а серверу — своевременно его обработать.
Рассмотрим процесс настройки в утилите DataWedge (стандартное ПО для управления сканером на Motorola):
Profile0 или Basic Configuration).Важно: Слишком большая задержка сделает сканирование медленным, слишком маленькая — не решит проблему. Начните с 20 мс и тестируйте стабильность.
Если простая задержка не помогает, попробуем изменить способ передачи данных в ОС. В настройках той же утилиты DataWedge в разделе Keyboard Output часто присутствует опция Send Characters as Events.
Разберем, что это дает: вместо имитации нажатия физических клавиш, драйвер будет генерировать программные события ввода символов. Это позволяет игнорировать текущую раскладку клавиатуры (RU/EN) и передавать символы «как есть». Если эта опция доступна в вашей версии DataWedge — обязательно включите её.
Коды маркировки часто содержат символ-разделитель ASCII 29. В режиме клавиатуры он часто превращается в CTRL, что заставляет 1С открывать случайные окна или выполнять команды вместо ввода текста. Проанализируем ситуацию в 1С 7.7. Поскольку это «самописка», мы можем настроить предобработку.
Нам необходимо в настройках DataWedge через Advanced Data Formatting (ADF) заменить символ ASCII 29 на печатный символ, который не встречается в коде, например, на решетку #.
После этого в коде 1С мы сможем обработать полученную строку:
// Пример обработки строки в 1С 7.7
Функция ОбработатьШтрихкод(СчитанныйКод)
// Заменяем наш суррогатный разделитель обратно на стандартный, если нужно
ТекстКода = СтрЗаменить(СчитанныйКод, "#", Симв(29));
// Или просто отсекаем лишнее, если нам нужен только серийный номер
// ... логика разбора DataMatrix
КонецФункции
Иногда проблема кроется в самом клиенте удаленного рабочего стола. Рассмотрим настройки стандартного Remote Desktop Mobile:
Как справедливо отмечено в обсуждении, режим клавиатуры — это всегда компромисс. Для промышленной эксплуатации лучше всего использовать режим Serial Port Emulation.
Разберем этот метод по шагам:
Scaner1C.dll.При таком подходе данные будут попадать не в активное поле ввода, а в процедуру ОбработкаВнешнегоСобытия. Это полностью исключает влияние раскладки, задержек и фокуса ввода.
Пример кода в 1С для приема данных:
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
Если (Источник = "Scanner") И (Событие = "BarCodeValue") Тогда
// Данные приходят в чистом виде, без искажений RDP
СчитанныйКод = СокрЛП(Данные);
ПроверитьКодМаркировки(СчитанныйКод);
КонецЕсли;
КонецПроцедуры
Проанализируем специфику модели MC65. Это устройство обладает ограниченными ресурсами процессора. Выясним, что еще может влиять на качество сканирования:
Подводя итог: если терминал «корежит» данные, в 90% случаев это лечится установкой Inter-Character Delay на 30-40 мс. Если это не помогает — единственный надежный путь заключается в уходе от эмуляции клавиатуры в сторону проброса COM-порта.