Как решить проблему долгой печати чеков на ККТ из терминального сеанса RDP?

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

Проблема долгой печати чеков при работе в терминальном режиме (RDP) — одна из самых частых и неприятных при автоматизации розничной торговли. Кассиры и клиенты вынуждены ожидать выхода чека по 2–3 минуты, что полностью парализует работу кассовой зоны. Особенно остро эта проблема стоит в старых конфигурациях на обычных формах (например, Управление торговлей 10.3, Управление производственным предприятием 1.3), где сложно использовать современные механизмы платформы.

В этой статье мы подробно проанализируем, почему возникает эта задержка, и рассмотрим наиболее эффективные практические способы решения проблемы, предложенные техническими специалистами.

---

Выясняем причину: почему тормозит печать через RDP?

Чтобы найти правильное решение, давайте разберем физику процесса передачи данных от сервера к кассовому аппарату. Когда мы подключаем ККТ (контрольно-кассовую технику) через стандартный механизм проброса последовательных портов (COM-портов) в клиенте mstsc (RDP), происходит следующее:

  1. Протоколы ККТ (в частности, драйверы АТОЛ и Штрих-М) являются диалоговыми и пакетными. Они не отправляют весь чек одной транзакцией.
  2. Вместо этого драйвер посылает на кассу сотни микрозапросов: проверка связи, открытие чека, передача каждой строки товара отдельно, отправка признаков маркировки, проверка статуса фискального накопителя, печать QR-кода, закрытие чека.
  3. Для каждого микрозапроса драйвер на сервере ожидает подтверждения получения от устройства на клиенте.
  4. Если касса подключена локально, задержка (пинг) составляет менее 1 мс, и чек выходит мгновенно. Но если сервер находится в облаке или удаленном дата-центре, а касса — в магазине, пинг через интернет составляет 30–80 мс.
  5. Умножив сотни мелких пакетов «вопрос-ответ» на величину пинга, мы получаем итоговую задержку в 1,5–3 минуты на один чек. Ситуация критически усугубилась с введением обязательной маркировки «Честный Знак», так как объем проверочных данных в чеке вырос в разы.

Стандартный виртуальный COM-порт RDP совершенно не оптимизирован под такой характер трафика. Он передает данные байтами и после отправки каждого пакета ждет тайм-аут, проверяя, не придут ли еще данные. Это делает печать невыносимо медленной.

---

Способ 1. Подключение ККТ по интерфейсу TCP/IP (Ethernet / Wi-Fi)

Самый логичный шаг для ухода от медленного проброса COM-портов — использование сетевого интерфейса ККТ. Большинство современных касс оснащены сетевым портом Ethernet, модулем Wi-Fi или поддерживают работу по USB-кабелю в режиме эмуляции сетевой карты (технологии EoU — Ethernet over USB или EoT — Ethernet over Transport).

Рассмотрим по шагам, как настроить эту схему:

  1. Переведите ККТ в режим работы по TCP/IP (через таблицу настроек или утилиту драйвера производителя).
  2. Организуйте защищенный VPN-канал между локальной сетью торговой точки и терминальным сервером (например, по протоколам L2TP, IPsec или OpenVPN на роутерах Mikrotik). Это необходимо, чтобы сервер «видел» локальную сеть магазина.
  3. Назначьте кассовому аппарату фиксированный (статический) IP-адрес в локальной сети магазина.
  4. В настройках торгового оборудования в 1С на сервере укажите тип подключения «TCP/IP» (или «IP-адрес»), введите IP-адрес кассы и порт (например, порт 5555 для касс АТОЛ).

Важный нюанс: Если пинг внутри VPN-канала остается высоким (более 70–100 мс), небольшие задержки (до 10–15 секунд) при печати по «чистому» TCP/IP все равно могут сохраняться из-за того же диалогового характера протокола. Если этот результат вас не устроит, переходите к следующим способам.

---

Способ 2. Использование HTTP Web-сервера кассы (АТОЛ Web-сервер)

Если между точкой и сервером поднят VPN, наиболее производительным решением будет использование протокола HTTP вместо TCP. Современные версии драйверов (например, АТОЛ ДТО 10) имеют встроенную службу веб-сервера.

Разберем, как работает эта схема:

  1. На локальном компьютере, к которому физически подключена касса по USB, запускается служба «Веб-сервер АТОЛ».
  2. Эта служба слушает определенный порт на локальном ПК и ожидает входящих запросов по протоколу HTTP (принимает структурированные JSON-пакеты).
  3. В терминальной сессии 1С отправляет на IP-адрес локального компьютера всего один готовый JSON-пакет, содержащий все параметры чека.
  4. Локальная служба моментально принимает этот пакет, обрабатывает его силами локального процессора и передает на кассу по быстрому локальному USB-каналу. Чек выходит за 1–2 секунды, так как сетевая задержка (пинг) срабатывает ровно один раз для передачи всего файла.

Этот способ полностью решает проблему сетевых задержек и поддерживается нативным интеграционным ПО производителей ККТ.

---

Способ 3. Перехват печати через виртуальный принтер ("Generic / Text Only")

Если у вас нет возможности настроить VPN или использовать современные веб-серверы ККТ (например, на старых кассах или операционных системах), можно применить оригинальное архитектурное решение с перехватом печати. Схема работает без проброса COM-портов и использует стандартный механизм проброса принтеров RDP, который работает быстро даже на слабых интернет-каналах.

Рассмотрим алгоритм настройки:

  1. На кассовом компьютере (клиенте) создается виртуальный принтер с драйвером Generic / Text Only. Данный принтер настраивается на вывод в файл или напрямую связывается со специальной утилитой-обработчиком на клиенте (например, Print2FR).
  2. При подключении к терминальному серверу этот принтер автоматически пробрасывается в сессию под именем Generic / Text Only (перенаправлено).
  3. В 1С на сервере вместо отправки команд на фискальный регистратор настраивается печать текстового макета или XML-пакета чека (по стандарту 1С CheckPackage) на этот виртуальный принтер.
  4. Файл моментально улетает по RDP-каналу на клиентский ПК. Специализированная утилита, работающая в фоне на кассовом компьютере, перехватывает этот файл, парсит XML/JSON-структуру и локально через установленный драйвер ККТ дает команду на печать чека.

Для реализации этого метода можно использовать следующий шаблон выгрузки данных чека в XML-формат из 1С на сервере:


Процедура ВыгрузитьЧекДляЛокальнойПечати(ОбъектДанныхЧека, ПутьКФайлу) Export
    
    ЗаписьXML = Новый ЗаписьXML;
    ПараметрыЗаписи = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Истина);
    ЗаписьXML.ОткрытьФайл(ПутьКФайлу, ПараметрыЗаписи);
    
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    ЗаписьXML.ЗаписатьНачалоЭлемента("CheckPackage");
    
    // Спецификация параметров чека
    ЗаписьXML.ЗаписатьАтрибут("Fiscal", "True");
    ЗаписьXML.ЗаписатьАтрибут("Type", "Sale");
    
    // Запись позиций чека
    ЗаписьXML.ЗаписатьНачалоЭлемента("Positions");
    Для Каждого СтрокаТовара Из ОбъектДанныхЧека.Товары Цикл
        ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString");
        ЗаписьXML.ЗаписатьАтрибут("Name", СтрокаТовара.Номенклатура.Наименование);
        ЗаписьXML.ЗаписатьАтрибут("Quantity", Строка(СтрокаТовара.Количество));
        ЗаписьXML.ЗаписатьАтрибут("Price", Строка(СтрокаТовара.Цена));
        ЗаписьXML.ЗаписатьАтрибут("Amount", Строка(СтрокаТовара.Сумма));
        ЗаписьXML.ЗаписатьАтрибут("Department", "1");
        ЗаписьXML.ЗаписатьАтрибут("Tax", "None");
        ЗаписьXML.ЗаписатьКонецЭлемента(); // FiscalString
    КонецЦикла;
    ЗаписьXML.ЗаписатьКонецЭлемента(); // Positions
    
    ЗаписьXML.ЗаписатьКонецЭлемента(); // CheckPackage
    ЗаписьXML.Закрыть();
    
КонецПроцедуры

Минус данного решения: Отсутствует прямая интерактивная обратная связь от ККТ внутри сессии 1С (например, если в кассе закончилась бумага, 1С об этом сразу не узнает). Но это окупается колоссальной скоростью печати.

---

Способ 4. Проброс портов через сторонний TCP-туннель

Если стандартный проброс портов в RDP работает медленно, мы можем отключить его и использовать стороннее специализированное программное обеспечение для трансляции портов по TCP/IP. Эти программы оптимизируют буферизацию пакетов и работают стабильнее стандартного mstsc.

Популярные программные продукты:

Такой подход снижает накладные расходы протокола RDP на обслуживание портов и значительно ускоряет реакцию ККТ.

---

Способ 5. Архитектурное решение: Переход на «Тонкий клиент»

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

Проанализируем преимущества этой схемы:

---

Резюме и рекомендации

Выбор оптимального метода решения проблемы долгой печати зависит от вашей текущей архитектуры:

  1. Если у вас современная конфигурация на управляемых формах — используйте исключительно Тонкий клиент. Это снимет все вопросы с торговым оборудованием.
  2. Если у вас старая конфигурация на обычных формах (УТ 10.3) и есть возможность настроить VPN — переводите кассу на TCP/IP или используйте локальный Web-сервер АТОЛ/Штрих-М, обращаясь к нему по протоколу HTTP.
  3. Если каналы связи нестабильны, отсутствует возможность настройки VPN и выделенных IP-адресов — используйте схему с виртуальным принтером и локальной утилитой перехвата файлов печати.
← На главную