Проблема долгой печати чеков при работе в терминальном режиме (RDP) — одна из самых частых и неприятных при автоматизации розничной торговли. Кассиры и клиенты вынуждены ожидать выхода чека по 2–3 минуты, что полностью парализует работу кассовой зоны. Особенно остро эта проблема стоит в старых конфигурациях на обычных формах (например, Управление торговлей 10.3, Управление производственным предприятием 1.3), где сложно использовать современные механизмы платформы.
В этой статье мы подробно проанализируем, почему возникает эта задержка, и рассмотрим наиболее эффективные практические способы решения проблемы, предложенные техническими специалистами.
---
Чтобы найти правильное решение, давайте разберем физику процесса передачи данных от сервера к кассовому аппарату. Когда мы подключаем ККТ (контрольно-кассовую технику) через стандартный механизм проброса последовательных портов (COM-портов) в клиенте mstsc (RDP), происходит следующее:
Стандартный виртуальный COM-порт RDP совершенно не оптимизирован под такой характер трафика. Он передает данные байтами и после отправки каждого пакета ждет тайм-аут, проверяя, не придут ли еще данные. Это делает печать невыносимо медленной.
---
Самый логичный шаг для ухода от медленного проброса COM-портов — использование сетевого интерфейса ККТ. Большинство современных касс оснащены сетевым портом Ethernet, модулем Wi-Fi или поддерживают работу по USB-кабелю в режиме эмуляции сетевой карты (технологии EoU — Ethernet over USB или EoT — Ethernet over Transport).
Рассмотрим по шагам, как настроить эту схему:
5555 для касс АТОЛ).Важный нюанс: Если пинг внутри VPN-канала остается высоким (более 70–100 мс), небольшие задержки (до 10–15 секунд) при печати по «чистому» TCP/IP все равно могут сохраняться из-за того же диалогового характера протокола. Если этот результат вас не устроит, переходите к следующим способам.
---
Если между точкой и сервером поднят VPN, наиболее производительным решением будет использование протокола HTTP вместо TCP. Современные версии драйверов (например, АТОЛ ДТО 10) имеют встроенную службу веб-сервера.
Разберем, как работает эта схема:
Этот способ полностью решает проблему сетевых задержек и поддерживается нативным интеграционным ПО производителей ККТ.
---
Если у вас нет возможности настроить VPN или использовать современные веб-серверы ККТ (например, на старых кассах или операционных системах), можно применить оригинальное архитектурное решение с перехватом печати. Схема работает без проброса COM-портов и использует стандартный механизм проброса принтеров RDP, который работает быстро даже на слабых интернет-каналах.
Рассмотрим алгоритм настройки:
Generic / Text Only. Данный принтер настраивается на вывод в файл или напрямую связывается со специальной утилитой-обработчиком на клиенте (например, Print2FR).Generic / Text Only (перенаправлено).CheckPackage) на этот виртуальный принтер.Для реализации этого метода можно использовать следующий шаблон выгрузки данных чека в 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С об этом сразу не узнает). Но это окупается колоссальной скоростью печати.
---
Если стандартный проброс портов в RDP работает медленно, мы можем отключить его и использовать стороннее специализированное программное обеспечение для трансляции портов по TCP/IP. Эти программы оптимизируют буферизацию пакетов и работают стабильнее стандартного mstsc.
Популярные программные продукты:
Такой подход снижает накладные расходы протокола RDP на обслуживание портов и значительно ускоряет реакцию ККТ.
---
Если конфигурация вашей 1С написана на управляемых формах (или поддерживает смешанный режим запуска), лучшим решением является полный отказ от терминального сервера для кассиров в пользу Тонкого клиента.
Проанализируем преимущества этой схемы:
---
Выбор оптимального метода решения проблемы долгой печати зависит от вашей текущей архитектуры: