При организации работы торговых точек или складов через терминальный сервер RDP часто возникает специфика в работе торгового оборудования: клавиатурный сканер штрихкодов начинает считывать данные некорректно. Вместо одного полного кода (например, 2000000000046) в 1С поступают обрезанные фрагменты — 000000000046, 2 или 0046. При этом проверка оборудования в локальном текстовом редакторе на клиентском компьютере показывает идеальное чтение без обрывов.
Проанализируем механику работы клавиатурных сканеров в терминальном режиме и разберем по шагам, как устранить эту ошибку.
Работа дешевых сканеров штрихкодов по умолчанию строится на эмуляции нажатия клавиш клавиатуры (режим Wedge/HID). В отличие от оборудования с виртуальным COM-портом, пересылающего весь штрихкод единым пакетом через последовательный порт, клавиатурный сканер последовательно отправляет символы один за другим с высокой скоростью.
Драйвер сканера штрихкода в 1С распознает ввод со сканера по интервалу времени между нажатиями клавиш:
ВнешнееСобытие.При подключении через RDP сетевые задержки, алгоритмы буферизации TCP-пакетов и нестабильность канала связи могут разрывать единый поток символов. Если интервал между соседними цифрами в процессе передачи по сети превышает критический порог, установленный в 1С, платформа решает, что ввод штрихкода завершен, генерирует внешнее событие с первой частью кода, а оставшиеся символы либо отбрасываются, либо отправляются в следующее событие.
Основной способ решения проблемы — увеличить время ожидания между символами в параметрах подключения драйвера 1С. По умолчанию в стандартных внешних компонентах этот интервал может составлять от 30 до 75 мс, чего недостаточно при нестабильном пинге до RDP-сервера.
В коде модуля подключения оборудования или обработки внешнего события необходимо увеличить значение свойства Таймаут (интервал ожидания ввода следующего символа):
// Устанавливаем увеличенный интервал ожидания между символами (в миллисекундах)
Драйвер.Таймаут = 350;
Значение 350 мс позволяет драйверу 1С склеивать символы, приходящие с задержками через сетевой RDP-канал, не вызывая ложного завершения считывания.
Если используемый универсальный драйвер 1С не поддерживает управление таймаутом через свойства объекта, рекомендуем использовать сторонний драйвер торгового оборудования (например, драйвер сканера АТОЛ классических версий). В настройках этого драйвера предусмотрены отдельные параметры:
CR / LF) позволяет драйверу точно фиксировать начало и окончание штрихкода независимо от скорости передачи символов по сети.Самым надежным инженерным решением для работы через RDP является отказ от клавиатурного режима в пользу виртуального COM-порта (RS-232 / VCP). Многие недорогие сканеры поддерживают переключение в режим виртуального COM-порта, даже если это не описано в кратком руководстве пользователя.
Рассмотрим порядок действий для перевода устройства:
Если перевести устройство в COM-порт невозможно, а программное увеличение таймаута в 1С вызывает задержки интерфейса, можно настроить само физическое устройство.
В сервисной документации сканера найдите управляющие штрихкоды настройки Inter-character delay (задержка между символами) и установите фиксированное значение в 5–10 мс. Это выровняет интервалы генерации сигналов самим сканером и снизит вероятность того, что клиентский RDP-модуль разобьет поток данных на отдельные пакеты.