При работе с маркированным товаром (Честный Знак) через терминалы сбора данных (ТСД) в терминальной сессии RDP часто возникает проблема: символы в коде DataMatrix (особенно скобки, двоеточия и запятые) заменяются на неверные или инвертируются. Чтобы обеспечить стабильность, важно использовать самое полное и актуальное решение для маркировки и работы с разрешительным режимом в среде 1С 7.7. Рассмотрим причины этой ситуации и разберем по шагам методы исправления этой технической проблемы.
Проанализируем ситуацию: большинство ТСД работают в режиме эмуляции клавиатуры (Keystroke). Когда сканер считывает DataMatrix, он посылает серверу последовательность скан-кодов клавиш. В связке ТСД + RDP + 1С 7.7 данные проходят через несколько уровней преобразования, где механизм передачи скан-кодов через протокол RDP может давать сбои на следующих этапах:
Shift, будут заменены на символы другой раскладки. В некоторых случаях решить проблему помогает специализированный переключатель клавиатуры для 1С.Shift. В итоге вместо символа ( (который требует Shift + 9) сервер получает просто 9 или закрывающую скобку.Если символы искажаются всегда одинаково, мы можем применить "костыль" непосредственно в коде конфигурации. Рассмотрим пример модификации процедуры ОбработкаВнешнегоСобытия. Выясним, какие именно знаки приходят неверно, используя универсальный парсер кодов DataMatrix и алгоритмы замены для их нормализации в 1С.
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
ТекШтрихКод = "";
Если ПустоеЗначение(Scaner) = 0 Тогда
Если (Источник = "BarCodeScaner") И (Событие = "BarCodeValue") Тогда
// Получаем данные от компоненты
ТекШтрихКод = СокрЛП(Scaner.Данные);
// Исправляем инверсию скобок и другие искажения
ТекШтрихКод = СтрЗаменить(ТекШтрихКод, ")", "(");
// Добавьте другие замены, если искажаются иные символы
ПроверитьМарки(ТекШтрихКод);
Scaner.DeleteEvent();
Scaner.ПосылкаДанных = 1;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Разберем настройки аппаратной части ТСД. В большинстве устройств за логику сканирования отвечает утилита DataWedge (для Zebra/Motorola) или аналогичные системные службы. Правильная настройка ТСД на ОС Android или Windows для работы в терминале позволяет минимизировать ошибки передачи, что крайне важно для стабильной выгрузки и загрузки данных через терминал сбора данных:
Проанализируем настройки самого подключения к удаленному рабочему столу. В параметрах RDP-клиента на ТСД есть раздел "Локальные ресурсы" или "Клавиатура".
Важный момент: Установите параметр "Использовать сочетания клавиш Windows" (Apply Windows key combinations) в значение On the remote computer (На удаленном компьютере). Дополнительно можно внедрить скрипты для коррекции инверсии символов и настройки раскладки, что заставит сервер напрямую интерпретировать системные нажатия, включая Shift.
Наиболее надежный способ, позволяющий полностью избежать проблем с раскладками — это отказ от эмуляции клавиатуры. Использование COM-портов и ScanOpos.dll обеспечивает наиболее стабильное сканирование в RDP. Посмотрим, как это реализовать, особенно если вы внедряете локальный модуль Честный знак для 1С 7.7:
ScanOpos.dll, настроенную на работу с соответствующим номером порта.В этом случае данные передаются не как нажатия клавиш, а как поток байтов. Функция ОбработкаВнешнегоСобытия будет получать чистую строку ASCII-символов. Также это упрощает парсинг и коррекцию «криптохвостов» в структуре DataMatrix, что также актуально при интеграции 1С с ГИИС ДМДК для учета ювелирных изделий.