При работе в клиент-серверном режиме или при размещении базы 1С на удаленном VPS/VDS-сервере системные администраторы часто сталкиваются с проблемой подключения торгового оборудования. Типичная ситуация: база 1С находится «в облаке» или на удаленном сервере в терминальном режиме (RDP), а онлайн-касса (фискальный регистратор, например, АТОЛ fprint 22ПТК) подключена к локальному компьютеру кассира через USB.
В этой статье мы подробно разберем, почему старые методы сетевого подключения касс перестают работать на современных драйверах, как правильно настроить подключение ККТ по сетевому протоколу Ethernet (TCP/IP), и как решить проблему медленной печати чеков, возникающую из-за сетевых задержек (пинга).
Чтобы понять суть проблемы, проанализируем поведение драйверов разных версий. В старой линейке драйверов АТОЛ ДТО 8.х существовала специализированная служба FDSVC, которая позволяла расшарить COM-порт локального компьютера, к которому подключена касса, в сеть по порту 6220. Это позволяло удаленному серверу 1С обращаться к кассе по IP-адресу хоста.
Однако при переходе на новые форматы фискальных данных (ФФД 1.05 и ФФД 1.2) использование драйвера версии 8.х стало невозможным по следующим причинам:
FDSVC. Попытка подключиться к удаленной кассе через порт 6220 с помощью 9-й версии драйвера завершится ошибкой связи, поскольку данный функционал в новой архитектуре не поддерживается.Для решения этой проблемы необходимо отказаться от трансляции USB-порта через локальную службу и перевести саму кассу на работу по сетевому интерфейсу.
Для того чтобы кассу видели новые драйверы (9.х и 10.х), установленные как на сервере, так и на клиентской машине, переведем фискальный регистратор на работу по интерфейсу TCP/IP (клиент-серверный режим работы кассы). Рассмотрим процесс по шагам.
Для смены интерфейса с USB на Ethernet необходимо войти в сервисный режим кассы АТОЛ fprint 22ПТК:
После переключения физического канала подключите кассу сетевым кабелем (LAN) к локальному роутеру или коммутатору. Нам необходимо назначить ККТ статический IP-адрес в локальной сети кассира.
Запустите утилиту «Тест драйвера ККТ» (версии 9.х или 10.х) на локальном компьютере и выполните настройку свойств соединения:
5555).После успешной проверки связи на локальном компьютере перейдите к настройке на удаленном сервере 1С.
В базе 1С (например, УПП 1.3, УТ 10.3 или ERP) перейдите в справочник «Подключаемое оборудование» и добавьте новое устройство:
5555.Нажмите кнопку «Тест устройства». Касса должна успешно определиться, выдав сообщение с указанием модели ККТ, ее заводского номера и версии прошивки.
После успешного подключения ККТ по TCP/IP к удаленной базе вы можете столкнуться со следующей проблемой: печать чека происходит крайне медленно (от 5 до 15 секунд на один чек). Выясним причину этого поведения.
При прямой печати через сетевой драйвер платформа 1С не отправляет весь чек одной командой. Драйвер выполняет последовательный диалог с кассой, отправляя десятки микрокоманд:
Каждая из этих операций требует отправки сетевого пакета туда и обратно (Round Trip). Если пинг между удаленным сервером 1С (например, VPS в дата-центре) и локальным компьютером ККТ составляет 50–100 мс, то суммарная задержка на обработку одного чека из 10 позиций составит несколько секунд. При нестабильном интернет-канале касса может зависать, выдавая ошибки таймаута.
Рассмотрим три наиболее эффективных способа оптимизации скорости печати.
Этот способ является наиболее технологичным и современным. Начиная с 10-й версии драйверов, АТОЛ поставляет встроенную веб-службу. Схема работы выглядит следующим образом:
Пример структуры JSON-запроса, отправляемого на Веб-сервер АТОЛ для печати чека:
{
"uuid": "8bf73d52-7b56-42d3-9f87-2470949d8c9a",
"request": [
{
"type": "sell",
"taxationType": "osn",
"operator": {
"name": "Иванов И.И.",
"vatin": "123456789012"
},
"items": [
{
"type": "position",
"name": "Товарная позиция 1",
"price": 100.00,
"quantity": 1,
"amount": 100.00,
"department": 1,
"tax": {
"type": "vat20"
}
}
],
"payments": [
{
"type": "electronically",
"sum": 100.00
}
]
}
]
}
Если конфигурация 1С старая и не поддерживает интеграцию с Веб-сервером АТОЛ из коробки, можно реализовать файловый обмен. При этом на сервере 1С программируется выгрузка данных чека в файл XML или JSON, а на локальном компьютере кассира запускается фоновая утилита (скрипт или легкая база 1С на файловой платформе).
Рассмотрим пример кода на стороне сервера 1С для выгрузки данных чека во временную папку обмена:
Процедура ЗаписатьЧекДляЛокальнойПечати(ДанныеЧека, УникальныйИдентификатор) Экспорт
ПутьКФайлу = "\\ServerExchange\Cheques\" + УникальныйИдентификатор + ".json";
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ОткрытьФайл(ПутьКФайлу, , , Новый ПараметрыЗаписиJSON(,,, Истина));
ЗаписатьJSON(ЗаписьJSON, ДанныеЧека);
ЗаписьJSON.Закрыть();
КонецПроцедуры
Локальный скрипт на ПК кассира постоянно мониторит сетевую папку обмена \\ServerExchange\Cheques\. Как только появляется новый файл, скрипт считывает его, мгновенно отправляет команды на локально подключенный драйвер ККТ и удаляет файл из папки. Это полностью исключает влияние пинга интернет-соединения на скорость печати.
Если архитектура решения требует исключительно прямого TCP/IP подключения ККТ к серверу, необходимо минимизировать влияние сетевых задержек:
5000–10000 мс, чтобы предотвратить разрывы соединения при пиковых нагрузках на канал связи.