При организации работы кассиров в терминальном режиме (RDP) технические специалисты часто сталкиваются с крайне медленной печатью чеков. Классический проброс COM-портов средствами RDP работает побайтово, из-за чего отправка команд на ККТ происходит с огромными задержками. Печать одного чека может занимать от 15 до 40 секунд, что полностью останавливает работу торговой точки. Если нужен готовый способ уйти от медленного проброса COM-портов и организовать сетевую печать на ККТ через RDP, VPN или интернет, можно использовать «Сервер ККМ» для удаленной многопользовательской печати чеков.
Для решения этой проблемы компания АТОЛ разработала технологию Сервера удаленного подключения (RPC-сервер) в составе Драйвера ККТ 10.х. Она позволяет передавать команды на кассу по сети TCP/IP, сокращая время печати чека до 1–2 секунд. Однако при попытке связать эту службу со старыми конфигурациями 1С (например, 1С:Управление торговлей 10.3) разработчики сталкиваются с тем, что 1С «не видит» удаленную кассу или выдает ошибку о недоступности порта. В этой статье мы подробно разберем, как решить данную проблему стандартными методами и с помощью доработки кода 1С.
Сервер удаленного подключения (служба ATOL Fiscal Printer Remote Server или процесс atol-fptr-rpc-server) устанавливается на локальном компьютере, к которому физически (по USB или COM) подключена онлайн-касса. Эта служба открывает на компьютере порт 19524 и слушает входящие сетевые запросы. Драйвер АТОЛ, установленный на удаленном сервере RDP, отправляет команды на печать не в виртуальный COM-порт, а напрямую в виде TCP-пакетов на IP-адрес локального компьютера кассира. Локальная служба принимает пакеты и мгновенно перенаправляет их на кассу. Это полностью исключает медленные механизмы проброса портов RDP.
Если мы работаем в современных конфигурациях на управляемых формах (например, УТ 11, Розница 2.3/3.0, УНФ) со свежими версиями интеграционных компонент АТОЛ, то поддержка удаленного сервера уже встроена в интерфейс. Давайте по шагам разберем процесс настройки этой связки.
Шаг 1. Настройка на локальном компьютере кассира (где касса подключена физически)
Шаг 2. Настройка на стороне сервера 1С (в сеансе RDP)
COM3).Выясним, почему этот способ работает. Когда интеграционная компонента 1С видит заполненный IP-адрес в поле «Компьютер», драйвер АТОЛ внутри себя автоматически переключается в режим клиента RPC-сервера. Он направляет запрос на указанный IP-адрес (порт 19524), просит локальный сервер открыть порт COM3 непосредственно на клиентской машине и транслирует туда команды.
В старых конфигурациях 1С на обычных формах (таких как Управление торговлей 10.3, УПП 1.3) стандартная обработка обслуживания Atolkkt.epf не содержит полей для ввода IP-адреса удаленного компьютера. Она пытается инициализировать кассу строго локально, возвращая ошибку «Порт недоступен». Чтобы решить эту проблему, нам потребуется вручную доработать обработку обслуживания в Конфигураторе. Если не хочется вносить эту доработку вручную, можно использовать готовую обработку обслуживания ККТ АТОЛ для УТ 10.3 и УПП 1.3 — в ней предусмотрена отдельная настройка адреса подключения к удаленному ПК.
Проанализируем структуру интеграционной компоненты АТОЛ 10. Драйвер ожидает от 1С передачи определенных XML-параметров или вызова методов установки свойств. Для настройки удаленного подключения отвечают два ключевых параметра:
RemoteServerAddr (соответствует системной константе драйвера LIBFPTR_SETTING_REMOTE_SERVER_ADDR) — строка с IP-адресом удаленной машины.RemoteServerConnectionTimeout (соответствует константе LIBFPTR_SETTING_REMOTE_SERVER_CONNECTION_TIMEOUT) — таймаут ожидания ответа от сервера в миллисекундах (рекомендуется устанавливать 5000–10000).Рассмотрим, как внедрить эти параметры непосредственно в код обработки обслуживания Atolkkt.epf. Откроем обработку в конфигураторе и найдем модуль объекта.
Нам необходимо отредактировать функцию, которая подготавливает XML-строку с параметрами подключения устройства. Обычно эта функция называется ПолучитьПараметрыПодключения() или ПолучитьТаблицуПараметров(). Мы можем добавить параметры прямо в XML-описание, чтобы они появились в стандартном окне настроек 1С:
// Пример добавления параметров удаленного подключения в структуру параметров обработки
Функция ПолучитьТаблицуПараметров() Экспорт
ТаблицаПараметров = Новый ТаблицаЗначений;
ТаблицаПараметров.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка"));
ТаблицаПараметров.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
ТаблицаПараметров.Колонки.Добавить("Тип", Новый ОписаниеТипов("Строка"));
ТаблицаПараметров.Колонки.Добавить("ЗначениеПоУмолчанию");
// Добавляем новые строки для параметров RPC-сервера АТОЛ
НоваяСтрока = ТаблицаПараметров.Добавить();
НоваяСтрока.Имя = "RemoteServerAddr";
НоваяСтрока.Наименование = "Адрес удаленного сервера RPC";
НоваяСтрока.Тип = "Строка";
НоваяСтрока.ЗначениеПоУмолчанию = "";
НоваяСтрока = ТаблицаПараметров.Добавить();
НоваяСтрока.Имя = "RemoteServerConnectionTimeout";
НоваяСтрока.Наименование = "Таймаут подключения к RPC (мс)";
НоваяСтрока.Тип = "Число";
НоваяСтрока.ЗначениеПоУмолчанию = 5000;
Возврат ТаблицаПараметров;
КонецФункции
Если мы хотим жестко прописать адрес подключения в коде (например, для конкретного рабочего места, чтобы не менять XML-структуру), мы можем перехватить процедуру инициализации устройства и передать эти параметры напрямую в объект драйвера перед вызовом метода открытия соединения open(). Найдем в модуле функцию подключения ККТ (обычно это ПодключитьУстройство()) и добавим туда следующие строки:
// Программная установка параметров RPC-сервера непосредственно перед подключением
Функция ПодключитьУстройство(ОбъектДрайвера, ПараметрыПодключения) Экспорт
ОчиститьОшибку();
// Устанавливаем стандартные параметры (порт, скорость и т.д.)
ОбъектДрайвера.УстановитьПараметр("Port", ПараметрыПодключения.Порт);
ОбъектДрайвера.УстановитьПараметр("BaudRate", ПараметрыПодключения.Скорость);
// Добавляем параметры для работы через Сервер удаленного подключения АТОЛ
// Значения можно получать из сохраненных настроек пользователя или прописать программно
IP_Адрес_Кассира = "192.168.1.105"; // Укажите реальный IP-адрес компьютера кассира
ТаймаутПодключения = 5000;
ОбъектДрайвера.УстановитьПараметр("RemoteServerAddr", IP_Адрес_Кассира);
ОбъектДрайвера.УстановитьПараметр("RemoteServerConnectionTimeout", ТаймаутПодключения);
// Выполняем попытку соединения
Результат = ОбъектДрайвера.Подключить();
Если Не Результат Тогда
ОписаниеОшибки = ОбъектДрайвера.ПолучитьОшибку();
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
После внесения этих изменений сохраним обработку Atolkkt.epf и загрузим ее в справочник «Обработки обслуживания подключаемого оборудования» в 1С. Теперь драйвер при инициализации кассы будет обращаться по сети к локальному компьютеру, и касса успешно заработает в сеансе RDP. Если вместе с этим нужно продолжать эксплуатацию УТ 10.3 с актуальными драйверами торгового оборудования, можно использовать пакет обновлений и поддержки для УТ 10.3, в котором предусмотрены драйверы АТОЛ 10.x и обработки обслуживания ККТ и эквайринга.
Если у вас нет возможности или квалификации для изменения кода конфигурации 1С либо обработки обслуживания, можно прибегнуть к системному решению. Оно заключается в создании виртуального туннеля для COM-порта.
Для этого используется стороннее программное обеспечение (утилиты класса *COM port redirector* или *Serial to Ethernet Connector*, а также бесплатные аналоги вроде *kkmspeter* или *HW VSP*). Схема настройки выглядит следующим образом:
COM10), который перенаправляет весь трафик по сети на IP-адрес локального компьютера кассира.COM10. Программа 1С считает, что работает с локальной кассой, в то время как виртуальный порт незаметно для системы транслирует все данные по сети.Этот способ позволяет обойти любые ограничения старых конфигураций 1С, но требует настройки дополнительного программного обеспечения на каждом рабочем месте кассира и сервере.
Важным нюансом при работе ККТ АТОЛ в терминальном режиме является отправка чеков оператору фискальных данных (ОФД). При использовании Сервера удаленного подключения АТОЛ служба Ethernet-over-USB (EoU) должна быть запущена и настроена на локальном компьютере кассира, а не на терминальном сервере.
Поскольку физический разъем USB ККТ подключен к локальной машине, именно локальная служба EoU имеет доступ к COM-порту ККТ для передачи данных в интернет. На удаленном сервере RDP службу EoU запускать и настраивать не нужно. Убедитесь, что в локальном файле настроек службы EoU (settings.xml) прописан правильный номер COM-порта (обычно это второй виртуальный COM-порт, создаваемый драйвером АТОЛ при подключении кассы по USB).
Использование Сервера удаленного подключения АТОЛ (RPC-сервера) — это наиболее современный, быстрый и стабильный способ организации работы онлайн-касс в RDP-сессиях. При возникновении проблем с подключением в 1С:
telnet [IP-адрес] 19524.Atolkkt.epf для передачи параметров RemoteServerAddr и RemoteServerConnectionTimeout в драйвер АТОЛ 10.