При работе с несколькими контрольно-кассовыми машинами (ККТ) АТОЛ, подключенными по Ethernet, в терминальном режиме (RDP) пользователи 1С:УТ 10.3 часто сталкиваются с неприятными проблемами. Разберем типичные симптомы: долгое открытие нового чека или реализации, зависание интерфейса программы, появление ошибки «Ошибка при подключении устройства. Необходимо убедиться, что устройство правильно настроено и соответствующий порт не занят другим приложением». Также в момент пробития чека может возникать сбой связи с сообщением «Не удалось получить объект драйвера».
Проанализируем ситуацию и выясним причину. По умолчанию в старых конфигурациях 1С, таких как УТ 10.3, торговое оборудование привязывается к имени компьютера (сервера), а монопольный захват порта происходит сразу при открытии формы документа. Если один пользователь открыл чек, порт кассы блокируется, и другие пользователи RDP встают в очередь или получают ошибки. Рассмотрим подробнее, как системно решить эти проблемы и настроить стабильную работу.
Чтобы 1С корректно различала пользователей, работающих на одном терминальном сервере, необходимо доработать механизм определения рабочего места. Типовой код берет имя сервера, а нам нужно получать имя физического компьютера клиента, который подключился по RDP. Посмотрим на пример реализации в обработке ТОСервер.
Необходимо заменить типовую функцию ПолучитьИмяКомпьютераТО() на следующий вариант:
Функция ПолучитьИмяКомпьютераТО() Экспорт
// Если мИмяКомпьютера = Неопределено Тогда
// мИмяКомпьютера = ВРег(ИмяКомпьютера());
// КонецЕсли;
Если мИмяКомпьютера = Неопределено Тогда
WSS = Новый COMОбъект("WScript.Shell");
WSSE = WSS.Environment("Process");
мИмяКомпьютера = ВРег(WSSE.Item("ClientName"));
Если ПустаяСтрока(мИмяКомпьютера) Тогда
мИмяКомпьютера = ВРег(ИмяКомпьютера());
КонецЕсли;
КонецЕсли;
// Если зайти в терминальной сессии консольно, то получим "CONSOLE"
// В этом случае применяем типовую функцию
Если мИмяКомпьютера = "CONSOLE" Тогда
мИмяКомпьютера = ВРег(ИмяКомпьютера());
КонецЕсли;
Возврат мИмяКомпьютера;
КонецФункции
Важный нюанс: учитывайте, что если пользователь переподключится к открытой RDP-сессии с другого компьютера, функция может вернуть имя компа от первого подключения. Альтернативным вариантом идентификации может служить связка ИмяКомпьютера + ИмяПользователя.
Разберем по шагам логику захвата оборудования. Ошибки занятого порта возникают из-за того, что 1С держит соединение с ККТ всё время, пока открыт документ. На терминальном сервере это недопустимо. Переработаем механизм: касса не должна опрашиваться при открытии формы.
ПриОткрытии форм документов (Чек ККМ, ПКО, Оплата от покупателя платежной картой).Если вы используете современные драйверы (ДТО 10), рассмотрим более продвинутый архитектурный подход. Компания АТОЛ добавила функционал собственного веб-сервера. Вместо прямого COM-соединения, которое работает монопольно, терминальная сессия 1С может отправлять HTTP-запросы в формате JSON.
Веб-сервер АТОЛ выступает в роли диспетчера очереди: он прозрачно собирает чеки от всех пользователей на терминальном сервере и поочередно отправляет их на физическую ККТ. Аналогичным образом работают сторонние решения, такие как KKMServer. Этот подход гарантированно решает конфликты доступа к портам.
Проанализируем фоновые процессы на сервере. Часто внезапная потеря связи («Не удалось получить объект драйвера») вызвана тем, что параллельные службы пытаются опросить кассу. Вместе с драйверами АТОЛ устанавливается служба EoU (Ethernet over USB). Даже при работе по чистому Ethernet эта служба может периодически перехватывать связь.
Зайдите в управление службами Windows на терминальном сервере. Найдите службу EoU (или ComProxy, если она установлена), остановите ее и переведите тип запуска в состояние «Отключена». Это избавит систему от внутренних конфликтов за доступ к оборудованию.
Поскольку 1С:УТ 10.3 — старая конфигурация, на сервере часто остаются компоненты от прошлых версий драйверов (ДТО 8 или ДТО 9). Система может путаться в версиях dll-библиотек.
Применив эти решения в комплексе — изменив логику определения рабочего места, настроив подключение только в момент печати и наведя порядок в драйверах и службах — вы получите стабильно работающую связку касс АТОЛ и 1С на терминальном сервере без зависаний и потери чеков.