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

Системный администратор 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Торговля и дистрибуция
← На главную

Многие специалисты сталкиваются с весьма специфической проблемой при настройке терминалов сбора данных (ТСД) или обычных сканеров штрихкодов для работы с 1С через удаленный рабочий стол (RDP). Ситуация выглядит следующим образом: несколько лет все работало стабильно, но после перехода на новый сервер (например, Windows Server 2022) и новую платформу 1С, при сканировании штрихкода программа начинает «проглатывать» одинаковые цифры, стоящие рядом. Например, вместо штрихкода 12234556 в 1С попадает 123456.

Самое интересное в этой ситуации то, что если отсканировать тот же штрихкод в обычный Блокнот (Notepad) на том же самом удаленном сервере, данные передаются абсолютно корректно. Проанализируем эту ситуацию подробнее и выясним причину такого избирательного поведения системы, а также разберем по шагам рабочие способы решения проблемы.

Разберем физику проблемы: почему обрезаются дубли в RDP?

Посмотрим на то, как работает передача данных. Когда сканер настроен на работу без специальных драйверов (так называемый режим «разрыва клавиатуры» или Keyboard Wedge), он эмулирует нажатия клавиш. Устройство считывает штрихкод и передает символы в операционную систему как серию очень быстрых последовательных нажатий клавиатуры.

При работе через RDP эти нажатия преобразуются в сетевые пакеты. В современных версиях ОС и новых клиентах RDP используются продвинутые механизмы оптимизации и сжатия трафика. Если сканер передает два одинаковых символа с очень высокой скоростью, RDP-сессия может интерпретировать это не как два отдельных нажатия, а как одно «залипание» клавиши. В целях сжатия трафика система передает по сети не два события нажатия, а одно событие, снабженное специальным параметром — полем повтора (количеством повторений).

Выясним причину: почему в Блокноте работает, а в 1С — нет

Возникает резонный вопрос: почему Блокнот не обрезает цифры? Рассмотрим механизмы получения ввода. Блокнот получает текстовые данные через стандартные высокоуровневые очереди сообщений Windows, которые легко обрабатывают события с полем повтора, разворачивая их обратно в серию символов.

В отличие от Блокнота, платформа 1С:Предприятие для программного перехвата данных со сканеров (особенно когда используется сканирование без установленного драйвера торгового оборудования) часто обращается к более низкоуровневым функциям операционной системы, например, API RawInput. Этот низкоуровневый механизм может просто проигнорировать блок повтора, переданный через RDP. В результате 1С фиксирует только одно нажатие из двух, и повторяющийся символ теряется.

Посмотрим на варианты решения проблемы

Разберем несколько надежных способов устранения этой ошибки. В зависимости от возможностей вашего оборудования (модели ТСД или сканера) вам может подойти один из предложенных вариантов.

Способ 1. Изменение режима вывода данных на терминале (ТСД)

Если вы используете терминалы сбора данных с операционной системой Android (Zebra, Honeywell, Атол и др.), у них есть встроенные утилиты сканирования (DataWedge, ScanWedge и их аналоги). По умолчанию они настроены на стандартный клавиатурный ввод. Изменим эти настройки:

  1. Откройте утилиту настройки сканера на самом ТСД.
  2. Найдите раздел настроек вывода — Keystroke Output.
  3. Измените режим отправки данных. Вместо стандартного нажатия выберите альтернативный вариант. Обычно это Virtual Key (Safe) или отправка через буфер обмена — Clipboard.
  4. Сохраните настройки и проверьте работу в 1С через RDP. Передача через буфер обмена полностью исключает проблему потери символов, так как штрихкод вставляется в систему как единый текстовый блок, а не посимвольно.

Именно изменение режима вывода клавиатуры на самом устройстве решает проблему в большинстве случаев при работе на новых серверах.

Способ 2. Увеличение задержки между символами (Inter-character delay)

Если вы используете обычный ручной сканер без сложной операционной системы, который работает только как эмулятор клавиатуры, мы можем решить проблему путем замедления скорости передачи символов. Это не позволит RDP "склеить" дублирующиеся символы.

  1. Найдите инструкцию (руководство пользователя) к вашей модели сканера.
  2. Найдите раздел настройки задержек (Inter-character delay).
  3. Отсканируйте специальные сервисные штрихкоды, чтобы установить паузу между передаваемыми символами на уровне 10–20 миллисекунд.

После увеличения таймаута сканер будет "печатать" символы чуть медленнее, операционная система перестанет считать двойные цифры залипанием, и 1С сможет корректно перехватить каждый символ через RawInput.

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

Работа сканеров в режиме разрыва клавиатуры через RDP официально считается нестабильной практикой, зависящей от сетевых задержек, включенных фильтров Windows (например, FilterKeys) и текущей раскладки клавиатуры. Рассмотрим наиболее надежный, профессиональный подход — использование виртуального COM-порта.

  1. Переведите сканер в режим Virtual COM (эмуляция RS-232), считав соответствующий управляющий штрихкод из инструкции.
  2. Установите драйверы виртуального COM-порта от производителя на тот компьютер (или ТСД), к которому физически подключен сканер. В диспетчере устройств должен появиться новый COM-порт.
  3. В настройках клиента RDP (Подключение к удаленному рабочему столу) перейдите на вкладку "Локальные ресурсы", нажмите "Подробнее" и поставьте галочку напротив Порты. Это пробросит локальный COM-порт на удаленный сервер.
  4. На сервере зайдите в 1С, откройте справочник ПодключаемоеОборудование.
  5. Добавьте новое устройство (Сканер штрихкода), выберите драйвер (например, "1С:Сканеры штрихкода (NativeApi)") и в настройках драйвера укажите проброшенный COM-порт.

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

Подведем итоги

Мы проанализировали интересную архитектурную особенность взаимодействия RDP, низкоуровневых функций Windows и платформы 1С. Если вы столкнулись с обрезкой дублирующихся цифр штрихкода на новых серверах, первым делом проверьте настройки утилиты сканирования на ТСД и переключите ее на вывод через буфер обмена (Clipboard). Если это невозможно, увеличьте межлитерную задержку (таймаут) на устройстве. А для достижения максимальной стабильности системы всегда старайтесь настраивать торговое оборудование в режиме эмуляции COM-порта с пробросом в терминальную сессию.

← На главную