Почему клавиатурный сканер штрихкодов режет или разбивает код при работе через RDP в 1С и как это исправить?

Программист IT и автоматизация бизнеса
← На главную

При организации работы торговых точек или складов через терминальный сервер RDP часто возникает специфика в работе торгового оборудования: клавиатурный сканер штрихкодов начинает считывать данные некорректно. Вместо одного полного кода (например, 2000000000046) в 1С поступают обрезанные фрагменты — 000000000046, 2 или 0046. При этом проверка оборудования в локальном текстовом редакторе на клиентском компьютере показывает идеальное чтение без обрывов.

Проанализируем механику работы клавиатурных сканеров в терминальном режиме и разберем по шагам, как устранить эту ошибку.

Выясним причину обрыва штрихкодов при передаче по RDP

Работа дешевых сканеров штрихкодов по умолчанию строится на эмуляции нажатия клавиш клавиатуры (режим Wedge/HID). В отличие от оборудования с виртуальным COM-портом, пересылающего весь штрихкод единым пакетом через последовательный порт, клавиатурный сканер последовательно отправляет символы один за другим с высокой скоростью.

Драйвер сканера штрихкода в 1С распознает ввод со сканера по интервалу времени между нажатиями клавиш:

  1. Обычный ввод человеком с клавиатуры имеет относительно большие паузы между символами (более 100 мс).
  2. Аппаратный сканер генерирует нажатия с задержкой 10–30 мс.
  3. Если поток символов поступает быстрее установленного в драйвере порога чувствительности (таймаута), 1С считает всю последовательность единым штрихкодом и генерирует ВнешнееСобытие.

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

Способ 1. Изменение программного таймаута внешнего драйвера в 1С

Основной способ решения проблемы — увеличить время ожидания между символами в параметрах подключения драйвера 1С. По умолчанию в стандартных внешних компонентах этот интервал может составлять от 30 до 75 мс, чего недостаточно при нестабильном пинге до RDP-сервера.

В коде модуля подключения оборудования или обработки внешнего события необходимо увеличить значение свойства Таймаут (интервал ожидания ввода следующего символа):


// Устанавливаем увеличенный интервал ожидания между символами (в миллисекундах)
Драйвер.Таймаут = 350;

Значение 350 мс позволяет драйверу 1С склеивать символы, приходящие с задержками через сетевой RDP-канал, не вызывая ложного завершения считывания.

Способ 2. Использование драйверов с тонкой настройкой чувствительности

Если используемый универсальный драйвер 1С не поддерживает управление таймаутом через свойства объекта, рекомендуем использовать сторонний драйвер торгового оборудования (например, драйвер сканера АТОЛ классических версий). В настройках этого драйвера предусмотрены отдельные параметры:

  1. Чувствительность / Таймаут символа: Параметр задает максимальную паузу в миллисекундах между символами, при которой они объединяются в одну строку. Увеличение параметра до 200–300 мс решает проблему разрыва.
  2. Префиксы и суффиксы: Четкое указание префикса и суффикса (например, CR / LF) позволяет драйверу точно фиксировать начало и окончание штрихкода независимо от скорости передачи символов по сети.

Способ 3. Перевод сканера в режим эмуляции COM-порта

Самым надежным инженерным решением для работы через RDP является отказ от клавиатурного режима в пользу виртуального COM-порта (RS-232 / VCP). Многие недорогие сканеры поддерживают переключение в режим виртуального COM-порта, даже если это не описано в кратком руководстве пользователя.

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

  1. Найдите полные сервисные управляющие штрихкоды производителя сканера (часто доступны на англоязычных ресурсах или сайте производителя контроллера сканера).
  2. Считайте управляющий штрихкод перевода в режим USB Virtual COM.
  3. Установите на локальном компьютере соответствующий CDC/VCP драйвер.
  4. Пробросьте полученный COM-порт в сеанс RDP через стандартные настройки MSTSC (вкладка «Локальные ресурсы» -> «Устройства»).
  5. В 1С настройте сканер как устройство, подключенное к COM-порту. При таком режиме данные передаются цельным буфером и сетевые задержки RDP перестают влиять на целостность штрихкода.

Способ 4. Настройка межсимвольной задержки (Inter-character delay) в самом сканере

Если перевести устройство в COM-порт невозможно, а программное увеличение таймаута в 1С вызывает задержки интерфейса, можно настроить само физическое устройство.

В сервисной документации сканера найдите управляющие штрихкоды настройки Inter-character delay (задержка между символами) и установите фиксированное значение в 5–10 мс. Это выровняет интервалы генерации сигналов самим сканером и снизит вероятность того, что клиентский RDP-модуль разобьет поток данных на отдельные пакеты.

← На главную