При переходе на 10-ю версию драйверов АТОЛ (DTO 10) многие специалисты сталкиваются с задачей организации удаленной печати чеков. Традиционные методы через COM-объекты или прямое проброс портов (RDP) часто работают нестабильно. Веб-сервер АТОЛ, входящий в поставку драйвера, предлагает современный подход, однако его настройка в 1С имеет свои нюансы, особенно если речь идет о ранних релизах драйвера или специфических требованиях сети. Рассмотрим подробно, как заставить эту связку работать.
Прежде всего, важно не путать два принципиально разных механизма, доступных в 10-м драйвере. Первый — это прямое сетевое подключение по TCP/IP. В этом случае касса должна иметь собственный сетевой интерфейс (Ethernet или Wi-Fi). В настройках драйвера в 1С выбирается канал связи «Сеть», указывается IP-адрес кассы и порт 5555. При таком подходе касса работает как самостоятельное сетевое устройство.
Второй вариант — это Веб-сервер (fptr10web). Это специальное приложение-прослойка, которое устанавливается на компьютер, к которому ККТ подключена физически (например, по USB). Веб-сервер «слушает» входящие HTTP-запросы в формате JSON и передает их драйверу для исполнения на кассе. Именно этот вариант позволяет организовать очередь печати, когда несколько рабочих мест 1С отправляют чеки на одну кассу одновременно. Веб-сервер сам разруливает очередность, и вы не получаете ошибку «Порт занят».
Для того чтобы веб-сервер стал доступен для 1С, выполним следующие шаги по настройке на компьютере, к которому подключена ККТ:
fptr10web.exe -i.settings.json. Проанализируем важные поля:
"port": по умолчанию 16732. Убедимся, что он открыт в брандмауэре Windows."address": по умолчанию может стоять 127.0.0.1. Чтобы веб-сервер принимал запросы с других компьютеров локальной сети, необходимо изменить это значение на 0.0.0.0.http://[IP_адрес_сервера]:16732. Если открывается веб-интерфейс управления АТОЛ, значит, сетевой доступ настроен верно.Как отмечалось в обсуждении, на ранних этапах (версия 10.2) штатные обработки 1С (БПО) могли не поддерживать работу через веб-сервер в явном виде. В таких случаях, а также для реализации нестандартной логики, используется механизм прямых HTTP-запросов. Это самый гибкий и надежный способ.
Вместо обращения к методам драйвера ОбъектДрайвера.СформироватьЧек(), мы формируем текстовую строку в формате JSON, описывающую задание для кассы, и отправляем её методом POST на адрес сервера.
Посмотрим на пример формирования структуры задания в 1С:
// Пример структуры JSON-задания для веб-сервера АТОЛ
Задание = Новый Структура;
Задание.Вставить("uuid", Строка(Новый УникальныйИдентификатор()));
Задание.Вставить("request", Новый Массив);
Операция = Новый Структура;
Операция.Вставить("type", "sell"); // Тип операции: продажа
Операция.Вставить("taxationType", "osn");
Операция.Вставить("ignoreNonFiscalPrint", Истина);
// Формируем позиции чека
Позиции = Новый Массив;
Товар = Новый Структура("name, price, quantity, amount, tax", "Товар тестовый", 100, 1, 100, "none");
Позиции.Добавить(Товар);
Операция.Вставить("items", Позиции);
// Платежи
Платежи = Новый Массив;
Платеж = Новый Структура("type, amount", "cash", 100);
Платежи.Добавить(Платеж);
Операция.Вставить("payments", Платежи);
Задание.request.Добавить(Операция);
После формирования структуры её необходимо преобразовать в JSON и отправить через HTTPСоединение. Выясним причину, по которой это удобно: 1С не требует установки драйверов на клиентских местах. Достаточно того, что драйвер и веб-сервер стоят на одном «серверном» ПК с кассой.
// Отправка задания на веб-сервер
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Задание);
СтрокаJSON = ЗаписьJSON.Закрыть();
НТТР = Новый HTTPСоединение("192.168.1.10", 16732);
Запрос = Новый HTTPЗапрос("/requests");
Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
Попытка
Ответ = НТТР.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния = 201 Тогда
// Задание принято в очередь
// Нужно периодически опрашивать статус по UUID
КонецЕсли;
Исключение
Сообщить("Ошибка связи с веб-сервером ККТ");
КонецПопытки;
Важно понимать, что веб-сервер работает асинхронно. Когда мы отправляем запрос POST /requests, сервер отвечает кодом 201 Created, что означает лишь то, что задание успешно помещено в очередь. Оно еще не пробито!
Разберем алгоритм получения результата:
uuid.GET запрос по адресу http://[IP]:16732/requests/[uuid].status в ответе. Значение ready означает, что чек пробит. Значение error — произошла ошибка (закончилась бумага, неверный формат данных и т.д.).Такой подход позволяет избежать зависания интерфейса 1С у пользователя, пока касса физически печатает длинный чек или связывается с ОФД.
Если при попытке подключения вы видите сообщение «Нет связи» или «Тест не пройден», выполните следующие действия:
settings.json. Если параметры username и password заполнены, их необходимо передавать в заголовках HTTP-запроса.* для разрешения всех источников.Использование веб-сервера АТОЛ совместно с 1С — это надежный способ организовать работу в распределенной сети. Переход на JSON-взаимодействие делает интеграцию независимой от разрядности операционной системы (32/64 бит) и типа клиента 1С, обеспечивая высокую стабильность всей кассовой системы.