При работе с контрольно-кассовой техникой (ККТ) в терминальных сессиях (RDP) системные администраторы и программисты часто сталкиваются с критической проблемой: огромными задержками при печати чеков. Чек, который на локальном компьютере печатается за секунду, в терминале может выходить несколько минут. В этой статье мы подробно разберем, почему это происходит и как внедрить решение, которое обеспечит мгновенную печать даже через нестабильный интернет.
Рассмотрим физику процесса. Традиционный метод подключения подразумевает перенаправление (проброс) последовательных портов (COM-портов) рабочей станции в терминальный сеанс. Протокол RS-232, на котором базируется работа большинства ККТ, предполагает синхронный обмен данными: драйвер отправляет короткий пакет данных и ждет подтверждения от устройства, что пакет получен. Только после этого отправляется следующий пакет.
Проанализируем ситуацию: если между сервером и клиентом есть задержка (пинг) в 50 мс, то каждый цикл «запрос-ответ» будет занимать минимум эти 50 мс. Для печати одного чека требуется передать сотни или даже тысячи таких пакетов. В результате общее время ожидания суммируется и превращается в минуты. Особенно остро это проявляется при подключении через интернет или VPN с нестабильным каналом.
Для решения проблемы мы предлагаем отказаться от проброса портов в пользу передачи задания на печать по протоколу HTTP/JSON. Суть метода заключается в следующем:
Поскольку данные передаются одним пакетом, влияние сетевых задержек (пинга) сводится к минимуму. Время передачи задания составляет доли секунды.
Рассмотрим этапы внедрения данной технологии в вашу инфраструктуру.
Шаг 1: Подготовка локальной станции
На компьютере, где установлена касса, необходимо установить драйвер производителя (например, Атол 10) и саму службу сервера ККМ. Служба должна иметь доступ к порту (обычно 4398), по которому она будет принимать запросы от 1С. Если компьютер находится за роутером, необходимо настроить Port Forwarding (проброс портов) или использовать VPN-канал для прямой видимости IP-адреса.
Шаг 2: Настройка на терминальном сервере
На стороне Windows Server в систему 1С устанавливается специальный «виртуальный драйвер» или обработка обслуживания. Она будет выступать в роли моста между 1С и удаленной службой. В настройках торгового оборудования в 1С вместо выбора COM-порта указывается IP-адрес рабочей станции и порт службы.
Выясним, как это выглядит со стороны кода. Если вы используете современную конфигурацию (например, 1С:Розница 2.3), работа происходит через штатную библиотеку подключаемого оборудования (БПО). Если же вам нужно интегрировать решение в старую конфигурацию (например, 1С 7.7 или старые редакции 8.2), можно использовать прямой вызов через HTTPСоединение.
Посмотрим на пример логики формирования запроса для печати (упрощенно):
// Пример формирования структуры задания для сервера ККМ
Задание = Новый Структура;
Задание.Вставить("Command", "PrintCheck");
Задание.Вставить("IsFiscal", Истина);
Задание.Вставить("TypeCheck", 0); // Продажа
Товары = Новый Массив;
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
Товар = Новый Структура("Name, Quantity, Price, Amount, Tax",
СтрокаТЧ.Номенклатура.Наименование,
СтрокаТЧ.Количество,
СтрокаТЧ.Цена,
СтрокаТЧ.Сумма,
"none");
Товары.Добавить(Товар);
КонецЦикла;
Задание.Вставить("CheckStrings", Товары);
// Далее преобразуем в JSON и отправляем через HTTPСоединение
Проанализируем ситуацию с обрывом связи. В отличие от RDP-проброса, где обрыв связи в момент печати часто «вешает» драйвер, HTTP-протокол позволяет реализовать механизм подтверждения. Каждому чеку присваивается уникальный идентификатор (GUID или ID задачи).
ID = "123".ID.ID = "123" уже был напечатан, он просто вернет фискальные данные (номер чека, ФПД) без повторной печати.Это исключает риск «двойных» чеков или их непробития при плохом интернете.
Одной из уникальных возможностей сетевого сервера является печать с нескольких рабочих мест на один аппарат. В стандартном RDP-режиме COM-порт монопольно захватывается одной сессией. Сетевой сервер же выстраивает запросы в очередь. Рассмотрим пример: три продавца в терминале нажимают «Пробить чек» одновременно. Сервер ККМ примет все три запроса и распечатает их один за другим без конфликтов доступа к порту.
При работе с маркированным товаром (Честный ЗНАК) касса должна проверять коды маркировки. Использование сетевого сервера позволяет драйверу на локальной машине самостоятельно выполнять эти запросы в ОФД и систему маркировки. 1С в терминале получает уже итоговый статус проверки, что значительно сокращает нагрузку на терминальный канал связи.
Важный момент для системных администраторов: при использовании Windows Server 2003 для работы современных драйверов может потребоваться установка .Net Framework 4.0. В более современных версиях (2012, 2016, 2019) всё необходимое уже присутствует в системе.
Подводя итог, переход на сетевую печать через HTTP — это наиболее эффективный способ забыть о проблемах медленной кассы в RDP. Скорость печати становится практически неотличимой от локальной, а стабильность работы возрастает за счет правильной обработки сетевых таймаутов.