Как обеспечить стабильную работу сканера штрихкода в режиме COM-порта через RDP в 1С 7.7?

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

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

Почему возникают проблемы при пробросе COM-порта?

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

Способ 1: Настройка уникальных номеров портов

Рассмотрим ситуацию, когда в системе работают несколько терминальных пользователей. Одна из распространенных ошибок — использование одинаковых номеров COM-портов для разных сессий. Несмотря на то, что RDP изолирует сессии, драйверы оборудования на сервере могут конфликтовать. Проанализируем рекомендации опытных администраторов:

  1. На каждом локальном компьютере (клиенте) назначьте сканеру уникальный номер COM-порта в диспетчере устройств (например, Пользователь 1 — COM 5, Пользователь 2 — COM 6).
  2. В настройках RDP-клиента (mstsc) убедитесь, что установлена галочка «Порты» на вкладке «Локальные ресурсы».
  3. На стороне сервера в 1С 7.7 в настройках торгового оборудования укажите соответствующий номер порта.

Способ 2: Увеличение тайм-аутов и использование драйверов АТОЛ

Стандартный драйвер от 1С часто не справляется с сетевыми задержками. Посмотрим на альтернативный вариант — использование драйверов от компании АТОЛ (особенно старых версий 6.x, которые были бесплатными и отлично работали с 7.7). Разберем, как это помогает:

В настройках драйвера АТОЛ существует параметр «Тайм-аут». При работе через RDP его рекомендуется увеличить до 500–1000 мс. Это позволяет драйверу «ждать» задержавшиеся пакеты данных из RDP-канала, не разрывая соединение. Кроме того, драйверы АТОЛ позволяют работать со сканерами в режиме «в разрыв клавиатуры», при этом всё равно генерируя ОбработкаВнешнегоСобытия, что критически важно для реализации бизнес-логики в 1С 7.7.

Способ 3: Настройка аппаратной задержки на самом сканере

Иногда проблема кроется не в программном обеспечении, а в скорости передачи данных самим «железом». Рассмотрим метод «замедления» сканера. У каждого промышленного сканера есть настроечная таблица (штрихкоды в инструкции). Найдите параметр Inter-character delay (задержка между передачей символов).

Установите значение задержки в районе 20–50 миллисекунд. Это заставит сканер делать крошечные паузы между отправкой каждого символа штрихкода. Для пользователя это будет незаметно (штрихкод отобразится на доли секунды медленнее), но для протокола RDP это обеспечит стабильную упаковку данных в пакеты, что предотвратит переполнение буфера и «красную лампочку».

Способ 4: Программный ремонт RDP-стека и использование RDP Wrapper

Если вы используете «пропатченную» Windows 7 для работы в многопользовательском режиме, проблема может быть в самом патче, который разрешает терминальные подключения. Проанализируем решение, связанное с восстановлением системных файлов:

  1. Запустите командную строку от имени администратора и выполните проверку системных файлов: sfc /scannow.
  2. После завершения процедуры файлы RDP-сервиса вернутся к исходному (заводскому) состоянию.
  3. Вместо старых патчей используйте RDP Wrapper Library. Это решение не изменяет сам файл termsrv.dll, а работает как прослойка, что обеспечивает гораздо более стабильную работу проброса устройств, включая COM-порты.

Способ 5: Использование сторонних редиректоров (Virtual Serial Port)

Если штатные средства Windows бессильны, стоит рассмотреть специализированное ПО для проброса портов. Такие программы создают виртуальный туннель между клиентом и сервером. Посмотрим, как это работает:

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

Способ 6: Командная перенастройка портов через скрипт

Иногда система «теряет» связь между номером порта в сессии и физическим устройством. Проанализируем метод жесткой привязки порта через net use. Вы можете создать .bat файл, который будет запускаться при входе пользователя в терминал:


net use com1: /delete
net use com1: \\tsclient\com1: /persistent:yes

Этот код принудительно монтирует порт клиента в терминальную сессию, делая его «постоянным» для текущего сеанса связи. Это помогает драйверу 1С быстрее находить устройство при запуске программы.

Дополнительные рекомендации по стабильности

Выясним еще несколько важных нюансов, которые могут влиять на результат:

Подводя итог, можно сказать, что универсального решения не существует, но комбинация увеличения тайм-аутов в драйвере АТОЛ и установки мессимвольной задержки в самом сканере решает проблему в 90% случаев. Если же бюджет позволяет, переход на специализированные редиректоры портов сэкономит массу времени системному администратору.

← На главную