Работа со сканерами штрихкода в терминальном режиме (через RDP) — это классическая задача, которая часто сопровождается техническими трудностями. Особенно остро проблема стоит для устаревших платформ, таких как 1С:Предприятие 7.7, и операционных систем вроде Windows 7. Пользователи часто сталкиваются с тем, что сканер «отваливается», считывает данные через раз или уходит в аварийный режим (загорается красная лампочка). Проанализируем причины этой нестабильности и разберем по шагам проверенные способы решения проблемы.
Прежде всего, выясним причину. Технология проброса (redirection) последовательных портов в протоколе RDP от Microsoft не всегда работает корректно с высокоскоростными потоками данных. Сканер штрихкода передает информацию пакетами, и если канал связи имеет микро-задержки или сервер занят обработкой других задач, пакеты данных могут приходить с разрывами. 1С 7.7 и её стандартные драйверы (например, ScanOPOS.dll) крайне чувствительны к таким задержкам. Если драйвер ожидает окончания передачи, а пакет задерживается в «трубе» RDP, происходит тайм-аут, и устройство переходит в состояние ошибки.
Рассмотрим ситуацию, когда в системе работают несколько терминальных пользователей. Одна из распространенных ошибок — использование одинаковых номеров COM-портов для разных сессий. Несмотря на то, что RDP изолирует сессии, драйверы оборудования на сервере могут конфликтовать. Проанализируем рекомендации опытных администраторов:
Стандартный драйвер от 1С часто не справляется с сетевыми задержками. Посмотрим на альтернативный вариант — использование драйверов от компании АТОЛ (особенно старых версий 6.x, которые были бесплатными и отлично работали с 7.7). Разберем, как это помогает:
В настройках драйвера АТОЛ существует параметр «Тайм-аут». При работе через RDP его рекомендуется увеличить до 500–1000 мс. Это позволяет драйверу «ждать» задержавшиеся пакеты данных из RDP-канала, не разрывая соединение. Кроме того, драйверы АТОЛ позволяют работать со сканерами в режиме «в разрыв клавиатуры», при этом всё равно генерируя ОбработкаВнешнегоСобытия, что критически важно для реализации бизнес-логики в 1С 7.7.
Иногда проблема кроется не в программном обеспечении, а в скорости передачи данных самим «железом». Рассмотрим метод «замедления» сканера. У каждого промышленного сканера есть настроечная таблица (штрихкоды в инструкции). Найдите параметр Inter-character delay (задержка между передачей символов).
Установите значение задержки в районе 20–50 миллисекунд. Это заставит сканер делать крошечные паузы между отправкой каждого символа штрихкода. Для пользователя это будет незаметно (штрихкод отобразится на доли секунды медленнее), но для протокола RDP это обеспечит стабильную упаковку данных в пакеты, что предотвратит переполнение буфера и «красную лампочку».
Если вы используете «пропатченную» Windows 7 для работы в многопользовательском режиме, проблема может быть в самом патче, который разрешает терминальные подключения. Проанализируем решение, связанное с восстановлением системных файлов:
sfc /scannow.termsrv.dll, а работает как прослойка, что обеспечивает гораздо более стабильную работу проброса устройств, включая COM-порты.Если штатные средства Windows бессильны, стоит рассмотреть специализированное ПО для проброса портов. Такие программы создают виртуальный туннель между клиентом и сервером. Посмотрим, как это работает:
Программы типа FabulaTech USB for Remote Desktop или аналоги создают на сервере виртуальный COM-порт, который для 1С выглядит как физически подключенный к серверу. Это полностью исключает нестабильность протокола RDP, так как передача данных идет по собственному оптимизированному протоколу программы-редиректора. Это наиболее надежный, хотя часто и платный способ решения проблемы.
Иногда система «теряет» связь между номером порта в сессии и физическим устройством. Проанализируем метод жесткой привязки порта через net use. Вы можете создать .bat файл, который будет запускаться при входе пользователя в терминал:
net use com1: /delete
net use com1: \\tsclient\com1: /persistent:yes
Этот код принудительно монтирует порт клиента в терминальную сессию, делая его «постоянным» для текущего сеанса связи. Это помогает драйверу 1С быстрее находить устройство при запуске программы.
Выясним еще несколько важных нюансов, которые могут влиять на результат:
Подводя итог, можно сказать, что универсального решения не существует, но комбинация увеличения тайм-аутов в драйвере АТОЛ и установки мессимвольной задержки в самом сканере решает проблему в 90% случаев. Если же бюджет позволяет, переход на специализированные редиректоры портов сэкономит массу времени системному администратору.