Как исправить некорректное сканирование спецсимволов в кодах маркировки на ТСД через RDP в 1С 7.7?

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

При работе с маркированным товаром (Честный Знак) через терминалы сбора данных (ТСД) в терминальной сессии RDP часто возникает проблема: символы в коде DataMatrix (особенно скобки, двоеточия и запятые) заменяются на неверные или инвертируются. Чтобы обеспечить стабильность, важно использовать самое полное и актуальное решение для маркировки и работы с разрешительным режимом в среде 1С 7.7. Рассмотрим причины этой ситуации и разберем по шагам методы исправления этой технической проблемы.

Причины возникновения проблемы

Проанализируем ситуацию: большинство ТСД работают в режиме эмуляции клавиатуры (Keystroke). Когда сканер считывает DataMatrix, он посылает серверу последовательность скан-кодов клавиш. В связке ТСД + RDP + 1С 7.7 данные проходят через несколько уровней преобразования, где механизм передачи скан-кодов через протокол RDP может давать сбои на следующих этапах:

  1. Конфликт раскладок: Если на ТСД установлена русская раскладка, а на сервере английская (или наоборот), спецсимволы, вводимые через Shift, будут заменены на символы другой раскладки. В некоторых случаях решить проблему помогает специализированный переключатель клавиатуры для 1С.
  2. Задержки RDP: Протокол RDP может не успевать обрабатывать нажатие и отпускание клавиши Shift. В итоге вместо символа ( (который требует Shift + 9) сервер получает просто 9 или закрывающую скобку.
  3. Скорость передачи: Слишком быстрая передача символов из буфера сканера в RDP-канал приводит к "залипанию" или пропуску управляющих сигналов.

Решение 1: Программная коррекция в 1С 7.7

Если символы искажаются всегда одинаково, мы можем применить "костыль" непосредственно в коде конфигурации. Рассмотрим пример модификации процедуры ОбработкаВнешнегоСобытия. Выясним, какие именно знаки приходят неверно, используя универсальный парсер кодов DataMatrix и алгоритмы замены для их нормализации в 1С.


Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    ТекШтрихКод = ""; 
    Если ПустоеЗначение(Scaner) = 0 Тогда
        Если (Источник = "BarCodeScaner") И (Событие = "BarCodeValue") Тогда
            // Получаем данные от компоненты
            ТекШтрихКод = СокрЛП(Scaner.Данные);
            
            // Исправляем инверсию скобок и другие искажения
            ТекШтрихКод = СтрЗаменить(ТекШтрихКод, ")", "(");
            // Добавьте другие замены, если искажаются иные символы
            
            ПроверитьМарки(ТекШтрихКод);
            
            Scaner.DeleteEvent();
            Scaner.ПосылкаДанных = 1;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Решение 2: Настройка параметров сканирования на ТСД

Разберем настройки аппаратной части ТСД. В большинстве устройств за логику сканирования отвечает утилита DataWedge (для Zebra/Motorola) или аналогичные системные службы. Правильная настройка ТСД на ОС Android или Windows для работы в терминале позволяет минимизировать ошибки передачи, что крайне важно для стабильной выгрузки и загрузки данных через терминал сбора данных:

  1. Найдите в настройках сканера параметр Inter-character delay (межсимвольная задержка). Установите значение в диапазоне 20–50 мс. Это немного замедлит визуальное появление кода, но гарантирует стабильность передачи каждого знака.
  2. В настройках KeyStroke output проверьте способ отправки данных. Попробуйте переключить режимы между Send Characters as Events и Send Key Messages. Часто режим событий (Events) работает с терминальными клиентами более корректно.
  3. Убедитесь, что на ТСД и на сервере по умолчанию установлена одна и та же раскладка клавиатуры (рекомендуется English US).

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

Проанализируем настройки самого подключения к удаленному рабочему столу. В параметрах RDP-клиента на ТСД есть раздел "Локальные ресурсы" или "Клавиатура".

Важный момент: Установите параметр "Использовать сочетания клавиш Windows" (Apply Windows key combinations) в значение On the remote computer (На удаленном компьютере). Дополнительно можно внедрить скрипты для коррекции инверсии символов и настройки раскладки, что заставит сервер напрямую интерпретировать системные нажатия, включая Shift.

Решение 4: Переход на использование COM-порта

Наиболее надежный способ, позволяющий полностью избежать проблем с раскладками — это отказ от эмуляции клавиатуры. Использование COM-портов и ScanOpos.dll обеспечивает наиболее стабильное сканирование в RDP. Посмотрим, как это реализовать, особенно если вы внедряете локальный модуль Честный знак для 1С 7.7:

  1. Настройте ТСД так, чтобы он передавал данные в виртуальный COM-порт (Serial Port Emulation).
  2. Пробросьте этот порт в RDP-сессию.
  3. В 1С 7.7 используйте стандартную компоненту ScanOpos.dll, настроенную на работу с соответствующим номером порта.

В этом случае данные передаются не как нажатия клавиш, а как поток байтов. Функция ОбработкаВнешнегоСобытия будет получать чистую строку ASCII-символов. Также это упрощает парсинг и коррекцию «криптохвостов» в структуре DataMatrix, что также актуально при интеграции 1С с ГИИС ДМДК для учета ювелирных изделий.

← На главную