При работе в терминальных сессиях (RDP) системные администраторы и разработчики часто сталкиваются с ситуацией, когда количество виртуальных COM-портов превышает стандартные лимиты. В старых конфигурациях 1С, таких как «Управление торговым предприятием» (УТП) или «Управление производственным предприятием» (УПП), работающих на обычных формах, штатные драйверы часто ограничены выбором порта до COM32. Попытка вручную расширить этот список в обработке обслуживания обычно приводит к ошибке: "Ошибка при подключении устройства. Необходимо убедиться, что устройство правильно настроено". Рассмотрим подробно, почему это происходит и как решить данную проблему несколькими способами.
Основная причина кроется не в самой платформе 1С, а в архитектуре используемого драйвера. Старая внешняя компонента ScanOPOS.dll (версии 8.x и ниже), работающая по технологии COM-объекта, имеет внутреннее жесткое ограничение в программном коде. Разработчики драйвера на тот момент заложили проверку диапазона портов, и если передаваемое значение превышает 32, метод инициализации возвращает отказ. Именно поэтому «Тест устройства» в настройках 1С может показывать корректные данные (так как он может использовать другие механизмы опроса), а реальная форма документа выдает ошибку при попытке захвата порта драйвером.
Наиболее правильный и стабильный метод — отказаться от использования устаревшего COM-драйвера в пользу технологии NativeApi. Начиная с версии 9.0, драйвер 1С «Сканер штрихкода» поддерживает до 255 COM-портов. Однако сложность заключается в том, что старые конфигурации на обычных формах «не умеют» напрямую общаться с Native-компонентами через старые обработки обслуживания.
Для реализации этого метода проанализируем необходимые шаги:
1CScanOPOSScan_v2.epf не подойдет. Нужно найти или адаптировать обработку 1CScanOPOSScan_v3.epf, которая была выпущена позже специально для поддержки новых стандартов работы с оборудованием.AddIn.Scanner, используется другой механизм инициализации.Рассмотрим пример того, как меняется логика инициализации в коде 1С:
// Старый метод (COM), ограниченный 32 портами:
Попытка
ЗагрузитьВнешнююКомпоненту("ScanOPOS.dll");
ОбъектДрайвера = Новый("AddIn.Scanner");
Исключение
Сообщить("Ошибка загрузки драйвера");
КонецПопытки;
// Новый метод (NativeApi), поддерживающий до COM255:
Попытка
УстановитьВнешнююКомпоненту("ОбщийМакет.Драйвер1ССканерШтрихкода"); // Если загружаем из макета
ПодключитьВнешнююКомпоненту("AddIn.1C.Scanner");
ОбъектДрайвера = Новый("AddIn.1C.Scanner");
Исключение
Сообщить("Не удалось подключить Native-компоненту");
КонецПопытки;
Если вмешательство в программный код 1С невозможно или крайне нежелательно, мы можем пойти путем обмана драйвера на уровне операционной системы. Даже если RDP-сессия назначила сканеру COM62, мы можем переназначить его на свободный номер в диапазоне 1–31.
Выполним следующие шаги по шагам:
COM5.После этого в настройках торгового оборудования 1С укажите COM5, и старый драйвер успешно инициализирует устройство, так как значение 5 входит в его допустимый диапазон.
Проблема «высоких» номеров портов часто возникает из-за того, что сервер терминалов не очищает таблицу занятых портов или динамически инкрементирует их для каждой новой сессии. Мы можем проанализировать настройки реестра, чтобы ограничить этот рост.
Рассмотрим путь в реестре Windows Server:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd
Здесь можно управлять параметрами проброса устройств. Однако более эффективным будет использование команды NET USE для связки портов. Вы можете создать скрипт при входе пользователя в систему, который будет «маппить» высокий порт на низкий:
// Пример команды для командной строки (bat-файл)
net use com2: \\tsclient\com62
Это создаст виртуальную связь, и 1С сможет работать с COM2, передавая команды на реальный COM62.
Если специфика бизнес-процесса позволяет, мы рекомендуем рассмотреть самый простой и надежный способ — перевести сканер из режима COM-эмуляции в режим Keyboard Emulation. В этом случае номер порта перестает иметь значение, так как данные будут поступать в активное поле ввода (или перехватываться драйвером клавиатуры).
Преимущества этого подхода:
dll в системе.Для реализации этого метода необходимо отсканировать специальный управляющий штрихкод из инструкции к вашему сканеру (обычно называется USB Keyboard Mode или HID Mode).
Иногда даже после настройки порта выше 32 пользователь получает ошибку о том, что порт занят. Проанализируем, почему это происходит. В старых конфигурациях 1С при открытии каждой формы (например, формы подбора товара и формы чека ККМ одновременно) каждая форма пытается создать свой экземпляр драйвера и подключиться к одному и тому же порту.
Для решения этой ситуации убедитесь, что:
Подводя итог, можно сказать, что наиболее перспективным решением является обновление программного слоя (драйвера и обработки обслуживания). Если же бюджет времени на разработку ограничен, использование Symbolic Links через net use или ручное переназначение номеров портов в диспетчере устройств станут отличным временным решением, позволяющим обойти ограничение ScanOPOS.