При работе в терминальном режиме (RDP) пользователи конфигурации 1С:Управление торговлей (редакция 10.3) часто сталкиваются с ситуацией, когда при открытии документа «Чек ККМ» или попытке пробития чека выводится ошибка подключения ККТ:
АТОЛ 55Ф: Ошибка при подключении устройства. Необходимо убедиться, что устройство правильно настроено и соответствующий порт не занят другим приложением. Нет связи.
Разберем причины возникновения этой ошибки и проанализируем доступные варианты решения проблемы — от программной доработки 1С до перевода оборудования на сетевые протоколы.
Выясним, почему происходит сбой связи с торговым оборудованием. В типовой конфигурации 1С:Управление торговлей 10.3 логика работы с торговым оборудованием устроена таким образом, что при открытии формы документа (например, формы «Чек ККМ») вызывается процедура подключения фискального регистратора. Внешняя компонента драйвера выполняет захват COM-порта и держит соединение открытым до момента закрытия формы.
Поскольку последовательный (COM) или виртуальный USB-COM порт требует монопольного доступа, операционная система не может предоставить доступ к этому же порту второй сессии RDP. Если у одного кассира открыта форма чека, для всех остальных пользователей порт блокируется, что и вызывает ошибку «Порт занят».
Наиболее эффективным решением в рамках 1С является изменение момента подключения оборудования. Касса должна подключаться не при открытии формы документа, а непосредственно в момент проведения и пробития чека, после чего соединение должно сразу освобождаться.
Рассмотрим по шагам, какие изменения необходимо внести в конфигурацию:
ФормаДокументаКлиент или соответствующую форму чека ККМ.ПриОткрытии и исключим из него вызов типовой процедуры подключения торгового оборудования:
// В типовом коде вызов подключения убираем или комментируем:
// ПолучитьСерверТО().ПодключитьОборудование(Шина, Оборудование);
ПечатьЧека или ПровестиИПробитьЧек).
// Выполняем подключение устройства непосредственно перед печатью чека
РезультатПодключения = ПолучитьСерверТО().ПодключитьОборудование(ВидТорговогоОборудования, Касса);
Если РезультатПодключения Тогда
// Выполняем фискализацию чека через драйвер ККТ
ПечатьФискальногоЧека();
// Обязательно отключаем устройство для освобождения COM-порта
ПолучитьСерверТО().ОтключитьОборудование(ВидТорговогоОборудования, Касса);
КонецЕсли;
Благодаря этому изменению касса будет занята лишь доли секунды на время физической печати чека, что позволит нескольким кассирам параллельно выставлять чеки без конфликтов за доступ к порту.
Если нет возможности изменять конфигурацию 1С, проанализируем архитектурный способ решения проблемы через АТОЛ Веб-сервер (компонент драйвера АТОЛ 10).
В этом случае проброс COM-портов через RDP вообще не требуется. Веб-сервер АТОЛ самостоятельно принимает сетевые запросы от нескольких сессий RDP и выстраивает их в корректную очередь.
Фискальный регистратор АТОЛ 55Ф оснащен физическим интерфейсом Ethernet (LAN). Рассмотрим настройку прямого сетевого подключения:
При таком варианте RDP-сессии обращаются к ККТ напрямую по локальной сети без использования механизма редиректа COM-портов Windows.
При использовании проброса портов через RDP убедимся, что соблюдены следующие условия:
EoU / Ethernet over USB) не занимала тот же виртуальный COM-порт, который выделен для взаимодействия с 1С.