Как исправить ошибку «Порт занят / Нет связи» при работе с кассой АТОЛ в 1С:Управление торговлей 10.3 через RDP?

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

При работе в терминальном режиме (RDP) пользователи конфигурации 1С:Управление торговлей (редакция 10.3) часто сталкиваются с ситуацией, когда при открытии документа «Чек ККМ» или попытке пробития чека выводится ошибка подключения ККТ:

АТОЛ 55Ф: Ошибка при подключении устройства. Необходимо убедиться, что устройство правильно настроено и соответствующий порт не занят другим приложением. Нет связи.

Разберем причины возникновения этой ошибки и проанализируем доступные варианты решения проблемы — от программной доработки 1С до перевода оборудования на сетевые протоколы.

Причина возникновения проблемы

Выясним, почему происходит сбой связи с торговым оборудованием. В типовой конфигурации 1С:Управление торговлей 10.3 логика работы с торговым оборудованием устроена таким образом, что при открытии формы документа (например, формы «Чек ККМ») вызывается процедура подключения фискального регистратора. Внешняя компонента драйвера выполняет захват COM-порта и держит соединение открытым до момента закрытия формы.

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

Способ 1. Доработка конфигурации 1С:УТ 10.3 (Изменение логики подключения)

Наиболее эффективным решением в рамках 1С является изменение момента подключения оборудования. Касса должна подключаться не при открытии формы документа, а непосредственно в момент проведения и пробития чека, после чего соединение должно сразу освобождаться.

Рассмотрим по шагам, какие изменения необходимо внести в конфигурацию:

  1. Откроем модуль формы документа ФормаДокументаКлиент или соответствующую форму чека ККМ.
  2. Найдем обработчик события ПриОткрытии и исключим из него вызов типовой процедуры подключения торгового оборудования:
    
    // В типовом коде вызов подключения убираем или комментируем:
    // ПолучитьСерверТО().ПодключитьОборудование(Шина, Оборудование);
    
  3. Найдем процедуру пробития чека на фискальном регистраторе (например, ПечатьЧека или ПровестиИПробитьЧек).
  4. Добавим явный вызов подключения оборудования перед печатью и отключения после завершения операции:
    
    // Выполняем подключение устройства непосредственно перед печатью чека
    РезультатПодключения = ПолучитьСерверТО().ПодключитьОборудование(ВидТорговогоОборудования, Касса);
    
    Если РезультатПодключения Тогда
        // Выполняем фискализацию чека через драйвер ККТ
        ПечатьФискальногоЧека();
        
        // Обязательно отключаем устройство для освобождения COM-порта
        ПолучитьСерверТО().ОтключитьОборудование(ВидТорговогоОборудования, Касса);
    КонецЕсли;
    

Благодаря этому изменению касса будет занята лишь доли секунды на время физической печати чека, что позволит нескольким кассирам параллельно выставлять чеки без конфликтов за доступ к порту.

Способ 2. Использование АТОЛ Веб-сервера (Без доработки кода 1С)

Если нет возможности изменять конфигурацию 1С, проанализируем архитектурный способ решения проблемы через АТОЛ Веб-сервер (компонент драйвера АТОЛ 10).

  1. На локальном компьютере (или бездисковой станции), к которому физически подключена касса АТОЛ 55Ф, устанавливается служба АТОЛ Веб-сервер.
  2. Служба локально захватывает COM-порт устройства и принимает внешние команды по HTTP-протоколу в формате JSON.
  3. В настройках торгового оборудования 1С на терминальном сервере выбирается тип подключения по TCP/HTTP и указывается IP-адрес локальной станции.

В этом случае проброс COM-портов через RDP вообще не требуется. Веб-сервер АТОЛ самостоятельно принимает сетевые запросы от нескольких сессий RDP и выстраивает их в корректную очередь.

Способ 3. Перевод ККТ на сетевой интерфейс TCP/IP (Ethernet)

Фискальный регистратор АТОЛ 55Ф оснащен физическим интерфейсом Ethernet (LAN). Рассмотрим настройку прямого сетевого подключения:

  1. Подключим кассу сетевым кабелем к локальной сети торговой точки.
  2. Через утилиту «Утилита ввода заводского номера / Настройка ККТ» или драйвер ККТ зададим фискальному регистратору статический IP-адрес.
  3. В 1С:Управление торговлей в параметрах подключения устройства укажем канал связи TCP/IP вместо COM-порта, выставив IP-адрес и порт устройства (по умолчанию 5555).

При таком варианте RDP-сессии обращаются к ККТ напрямую по локальной сети без использования механизма редиректа COM-портов Windows.

Рекомендации по настройке RDP и виртуальных портов

При использовании проброса портов через RDP убедимся, что соблюдены следующие условия:

← На главную