Как устранить медленную печать чеков и обрывы связи с фискальным регистратором в терминальном режиме RDP

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

Работа кассиров в удаленном терминальном режиме (RDP) через интернет часто сопровождается двумя неприятными проблемами: внезапной потерей связи с фискальным регистратором (принтером чеков) и критически медленной печатью чеков. Например, пробитие документа из 15–20 позиций может занимать от 1 до 3 минут вместо нескольких секунд. Разберем по шагам, почему возникают эти сложности и как правильно оптимизировать работу оборудования.

Анализ причин: почему тормозит печать через интернет

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

  1. 1С на терминальном сервере посылает команду открытия чека и ждет подтверждения от ККМ.
  2. Для каждой позиции документа 1С отправляет отдельную команду регистрации строки с ценой, количеством и ставкой налога.
  3. После отправки каждой строки сервер блокирует процесс и ожидает от ККМ подтверждения операции и суммы.
  4. 1С сверяет возвращенную сумму со своими данными и только потом отправляет следующую строку.
  5. В конце отправляется команда закрытия чека и отрезки ленты.

В локальной сети с минимальным временем отклика (пинг менее 1 мс) этот обмен происходит практически мгновенно. Однако при работе через интернет по RDP с пробросом COM-портов каждый системный вызов ввода-вывода (I/O) натыкается на сетевую задержку. Если сетевой пинг составляет 50–100 мс, то с учетом передачи пакетов, подтверждений TCP и алгоритмов буферизации на каждую строку чека уходит от 100 до 300 мс. В результате чек на 20 позиций пробивается недопустимо долго.

Способ 1. Устранение обрывов связи: перенос инициализации порта

В типовых конфигурациях подключение к ККМ нередко выполняется при открытии экранной формы документа или интерфейса кассира, а отключение — только при ее закрытии. При малейшем микроразрыве интернет-соединения RDP-сессия восстанавливается автоматически, но дескриптор проброшенного COM-порта сбрасывается. В итоге при нажатии кнопки оплаты 1С сообщает, что касса недоступна.

Для устранения этой проблемы перенесем логику подключения оборудования: захватывать COM-порт необходимо строго в момент нажатия кнопки пробития чека и освобождать его сразу после завершения печати или снятия отчета.

Посмотрим на пример логики в модуле документа или обработки обслуживания:


Процедура ПробитьЧекНаККМ(СтруктураЧека)
    
    // Подключаем устройство непосредственно перед операцией
    РезультатПодключения = ПолучитьСерверТО().ПодключитьКлиент(ОбъектДрайвера, "ФискальныйРегистратор");
    
    Если Не РезультатПодключения Тогда
        Сообщить("Не удалось установить связь с фискальным регистратором!", СтатусСообщения.Важное);
        Возврат;
    КонецЕсли;
    
    Попытка
        // Выполняем фискализацию
        ПечатьЧекаНаУстройстве(ОбъектДрайвера, СтруктураЧека);
    Исключение
        Сообщить("Ошибка при печати чека: " + ОписаниеОшибки(), СтатусСообщения.Важное);
    КонецПопытки;
    
    // Немедленно освобождаем порт
    ПолучитьСерверТО().ОтключитьКлиент(ОбъектДрайвера);
    
КонецПроцедуры

Такой подход гарантирует, что 1С держит COM-порт занятым только несколько секунд во время печати, минимизируя влияние нестабильного интернет-канала.

Способ 2. Оптимизация сети и системных настроек COM-порта

Если архитектуру взаимодействия нельзя изменить оперативно, проанализируем сетевые и системные параметры, которые снижают задержки при стандартном маппинге портов RDP:

  1. Снижение задержки сети (Ping): Скорость передачи данных (пропускная способность канала) практически не влияет на скорость пробития чека — критичен исключительно пинг. Оптимальное значение задержки до терминального сервера — не более 10–20 мс. Для этого рекомендуется использовать проводное подключение (оптику) и избегать нестабильных Wi-Fi и 3G/4G-модемов.
  2. Настройка Latency Timer виртуального COM-порта: Если касса подключена к локальному ПК через USB-кабель (эмуляция COM), в диспетчере устройств Windows на компьютере кассира откроем свойства соответствующего порта. В дополнительных настройках (Advanced) изменим параметр «Время ожидания (мс)» (Latency Timer) со стандартных 16 мс на 1–2 мс.
  3. Отключение алгоритма Нейгла в реестре: На сервере и клиенте для ускорения передачи мелких TCP-пакетов без ожидания буфера зададим параметры реестра в ветке сетевого интерфейса (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{GUID}): создадим DWORD-параметры TcpAckFrequency = 1 и TCPDelAckTicks = 0.

Способ 3. Переход на пакетную печать чека единой командой

Чтобы исключить постоянную пересылку запросов «строка — ответ — проверка» через интернет, сформируем все данные чека целиком на стороне 1С и передадим их в драйвер одной командой (пакетный режим):

  1. Использование современных версий БПО: В Библиотеке подключаемого оборудования (БПО) для 1С механизм работы переработан — чек собирается в единую XML- или JSON-структуру и передается в кассовый драйвер за один вызов операции фискализации.
  2. Использование локальных HTTP/REST-служб драйвера: На компьютере кассира запускается локальный сервис драйвера ККТ. 1С с сервера формирует чек в виде единого JSON-запроса и отправляет его по HTTP напрямую на локальный IP-адрес службы. Служба принимает весь чек целиком, печатает его локально на максимальной скорости и возвращает серверу 1С итоговый статус операции.

Способ 4. Перевод рабочих мест на Тонкий клиент 1С

Наиболее надежным архитектурным решением при работе удаленных магазинов является отказ от RDP в пользу Тонкого клиента 1С с публикацией базы на веб-сервере (IIS / Apache):

  1. База данных публикуется на веб-сервере и доступна удаленным кассам по протоколу HTTPS.
  2. На рабочем месте кассира запускается Тонкий клиент 1С.
  3. Драйвер торгового оборудования и внешняя компонента ККТ загружаются и выполняются непосредственно на локальном компьютере кассира.
  4. Вся бизнес-логика и проведение документов выполняются на сервере, а обмен с физическим COM-портом кассы происходит локально с нулевой задержкой, что полностью исключает сетевые тормоза при печати.
← На главную