Почему обрезается DataMatrix код при сканировании в 1С 7.7 через RDP и как это исправить?

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

При внедрении системы маркировки владельцы систем на базе 1С 7.7 часто сталкиваются со специфической проблемой: при сканировании кода DataMatrix в блокнот данные приходят полностью, но внутри 1С код оказывается «обрезанным» или неполным. Особенно остро эта проблема проявляется при работе через удаленный рабочий стол (RDP) и использовании сканера в режиме эмуляции клавиатуры (USB-HID). Рассмотрим подробнее причины этого явления и разберем по шагам все доступные методы решения.

Выясним причину: почему RDP и эмуляция клавиатуры конфликтуют с DataMatrix

Для начала проанализируем ситуацию с технической точки зрения. Код DataMatrix, используемый для маркировки товаров («Честный ЗНАК»), содержит гораздо больше информации, чем привычный EAN-13. Если в EAN всего 13 цифр, то в DataMatrix может быть более 80 символов, включая служебные знаки. Когда сканер работает в режиме «в разрыв клавиатуры», он имитирует нажатие клавиш со скоростью, превышающей человеческие возможности.

Протокол RDP передает нажатия клавиш пакетами. При высокой скорости ввода и большом объеме данных в одном коде пакеты могут группироваться или, наоборот, теряться из-за задержек сети (latency). 1С 7.7, используя драйвер ScanOPOS.dll, ожидает определенные тайминги между символами. Если поток данных прерывается или «заикается», 1С считает, что ввод завершен, и инициирует событие ОбработкаВнешнегоСобытия, не дождавшись окончания всей строки. В результате мы видим в программе только часть кода.

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

Как отмечают специалисты, использование режима эмуляции клавиатуры для маркировки в терминальных сессиях — это путь, полный ошибок. Рассмотрим, как перевести сканер (на примере Honeywell 1450g) в режим Virtual COM Port.

  1. Перевод сканера в режим COM: Необходимо отсканировать специальный управляющий штрихкод из руководства (обычно называется «USB Serial» или «TRMUSB130»). После этого устройство переопределится в системе как виртуальный последовательный порт.
  2. Установка драйверов: На локальном компьютере, к которому физически подключен сканер, должен быть установлен драйвер виртуального COM-порта от производителя (Honeywell JPOS/USB Serial Driver).
  3. Проброс порта в RDP: В настройках подключения к удаленному рабочему столу (mstsc.exe) на вкладке «Локальные ресурсы» нажмите кнопку «Подробнее» и установите флажок напротив пункта «Порты».
  4. Настройка в 1С 7.7: В самой 1С в меню «Сервис» — «Настройка торгового оборудования» выберите вкладку «Сканер штрихкода». Укажите номер COM-порта, который проброшен с локальной машины (обычно он совпадает по номеру, если порт не занят на сервере).

Преимущество: Данные передаются не через поток нажатий клавиш, а как единый массив байтов. Драйвер ScanOPOS.dll корректно принимает всю строку целиком, исключая потерю символов.

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

Если по каким-то причинам переход на COM-порт невозможен, попробуем заставить RDP «успевать» за сканером. Для этого нужно замедлить передачу данных самим сканером. Проанализируем, как это работает: сканер будет вставлять микропаузу после каждого отправленного символа.

Для сканеров Honeywell 1450g найдите в инструкции раздел «Intercharacter Delay». Рекомендуется установить значение от 20 до 50 миллисекунд. Это существенно замедлит «визуальное» появление штрихкода на экране, но позволит протоколу RDP гарантированно доставить каждый символ до сервера без потерь. Посмотрим на алгоритм действий:

  1. Найдите штрихкод «Delay Duration».
  2. Установите цифровое значение (например, 50).
  3. Сохраните настройки.

Решение 3: Прямой ввод в текстовое поле (обходной путь)

Проанализируем ситуацию, когда стандартная ОбработкаВнешнегоСобытия работает некорректно. Как вариант, можно использовать «костыль», который часто оказывается самым живучим в среде 1С 7.7. Вместо того чтобы полагаться на драйвер сканера, мы можем считывать данные напрямую в активное поле ввода.

Для этого в форме документа или обработки создается текстовое поле. Пользователь устанавливает туда курсор и сканирует код. Поскольку поле ввода Windows (Edit control) нативно обрабатывает поток клавиатуры лучше, чем внешнее событие 1С, код часто залетает целиком.

Посмотрим на пример кода для обработки такого ввода в модуле формы:


Процедура ПриСканированииВПоле()
    // Предположим, переменная ТекстКода связана с полем ввода на форме
    Если ПустаяСтрока(ТекстКода) = 0 Тогда
        // Вызываем функцию разбора DataMatrix
        ОбработатьМаркировку(ТекстКода);
        // Очищаем поле для следующего сканирования
        ТекстКода = "";
    КонецЕсли;
КонецПроцедуры

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

Решение 4: Проблема спецсимвола GS (Group Separator)

DataMatrix коды содержат невидимый символ GS (ASCII 29), который отделяет идентификаторы применения (AI). В режиме клавиатуры сканеры часто либо пропускают его, либо заменяют на странные комбинации клавиш. Рассмотрим, как это влияет на 1С 7.7.

Если ваш программный код в 1С ожидает символ GS для корректного разбора (например, чтобы отделить серийный номер от ключа проверки), а сканер его не передает, код будет считаться «неверным» или «обрезанным» по первому разделителю. Рекомендуем перенастроить сканер так, чтобы он заменял символ GS на печатный символ, например, на «|» (вертикальная черта) или «#» (решетка). Это делается через настройку префиксов/суффиксов или через таблицу замены символов (Data Formatting) в утилите Honeywell EZConfig.

Решение 5: Использование альтернативных драйверов

Стандартный ScanOPOS.dll имеет жесткие ограничения по длине принимаемой строки и таймаутам. В профессиональной среде для 1С 7.7 часто рекомендуют использовать старые версии драйверов от АТОЛ (например, версию 6.5.3, которая была бесплатной и корректно работала с терминальными сессиями). Они позволяют более гибко настроить чувствительность и префиксы, что критически важно для длинных строк DataMatrix.

Рассмотрим порядок настройки альтернативного драйвера:

  1. Зарегистрируйте библиотеку в системе через regsvr32.
  2. В настройках торгового оборудования 1С выберите «АТОЛ: Сканер штрихкода».
  3. В параметрах установите «Чувствительность» (таймаут) на значение 50-100 мс. Это даст драйверу время «дособирать» пакеты, пришедшие через RDP, прежде чем передать их в программу.

Подводя итог, можно сказать, что для стабильной работы 1С 7.7 с маркировкой в терминальной сессии, лучшим решением остается использование виртуального COM-порта в сочетании с качественным драйвером. Это исключает влияние раскладки клавиатуры и сетевых задержек RDP на целостность данных.

← На главную