При настройке удаленного рабочего места кассира часто возникает задача: запустить базу 1С на одном компьютере (например, на сервере или ноутбуке в офисе), а саму онлайн-кассу АТОЛ физически подключить к другому компьютеру (например, к ПК кассира на торговой точке). Пытаясь настроить подключение по сети, многие технические специалисты совершают одну и ту же ошибку — указывают в настройках 1С порт 16732 (стандартный порт Веб-сервера АТОЛ) и получают ошибку отсутствия связи.
В этой статье мы подробно разберем, почему стандартный механизм интеграции 1С отказывается работать с Веб-сервером напрямую, и покажем пошаговые сценарии настройки удаленного подключения — как с помощью штатного RPC-сервера без программирования, так и через HTTP-запросы (JSON).
Давайте проанализируем ситуацию. Утилита ДТО 10 (Драйвер торгового оборудования АТОЛ) имеет встроенный компонент Web-Server. По умолчанию он действительно ожидает входящие соединения по порту 16732. Однако этот сервер предназначен исключительно для обработки HTTP-запросов, содержащих задания в формате JSON.
Типичная ошибка администратора заключается в попытке указать в стандартном интерфейсе подключения оборудования 1С параметры:
Стандартная интеграционная компонента 1С, поставляемая фирмой «1С» и сертифицированная АТОЛ, не умеет общаться с ККТ по протоколу HTTP с отправкой JSON-заданий. Она ожидает прямого бинарного соединения по сети, используя классический низкоуровневый протокол драйвера. Попытка направить бинарный поток 1С на порт Веб-сервера приводит к закономерной ошибке соединения.
Для решения этой проблемы существует два пути:
Рассмотрим каждый из этих вариантов подробнее.
Если вам нужно настроить работу 1С на удаленном компьютере так, чтобы касса определялась стандартной обработкой обслуживания, мы должны запустить на ПК с кассой службу удаленного подключения (RPC-сервер). Этот сервер принимает стандартные бинарные команды от драйвера 1С по сети и транслирует их на кассу.
Разберем процесс настройки по шагам:
Шаг 1. Настройка на компьютере, к которому физически подключена касса (сервер кассы)
ATOL Fiscal Printer Remote Server (исполняемый файл atol-fptr-rpc-server.exe). Убедитесь, что служба запущена и настроена на автоматический запуск.Шаг 2. Настройка на компьютере, где установлена 1С (клиентский ПК)
Если перед вами стоит задача разработать веб-сервис или встроить в конфигурацию 1С прямое управление кассой без использования стандартных библиотек сопряжения (например, при работе в веб-клиенте 1С без возможности установить локальные компоненты), вы можете использовать Веб-сервер АТОЛ. Но этот механизм потребует написания кода. В качестве готового решения можно использовать готовое рабочее место кассира с поддержкой ДТО Web-сервер и Web Requests.
Прежде чем приступать к разработке интеграции через порт 16732, проанализируем важные технические нюансы и современные ограничения платформы АТОЛ:
[96] Отсутствует лицензия на работу с Web-сервером / Web Requests.atol-fptr-web-server-users.exe на компьютере с кассой и передавать авторизационные заголовки (Basic Auth) при каждом запросе из 1С.Если все требования соблюдены, вы можете отправлять JSON-задания на кассу. Рассмотрим пример программного кода на языке 1С для отправки запроса состояния ККТ на веб-сервер АТОЛ:
// Определяем параметры подключения к веб-серверу АТОЛ
АдресСервера = "1.1.1.1";
ПортСервера = 16732;
// Создаем HTTP-соединение
HTTPСоединение = Новый HTTPСоединение(АдресСервера, ПортСервера, , , , 10);
// Формируем JSON-запрос (например, получение статуса ККТ)
СтруктураЗапроса = Новый Структура;
СтруктураЗапроса.Вставить("uuid", Строка(Новый УникальныйИдентификатор));
СтруктураЗапроса.Вставить("request", Новый Массив);
// Заполняем массив команд ККТ
Команда = Новый Структура;
Команда.Вставить("type", "getDeviceStatus");
СтруктураЗапроса.request.Добавить(Команда);
// Записываем структуру в строку JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, СтруктураЗапроса);
СтрокаJSON = ЗаписьJSON.Закрыть();
// Готовим HTTP-запрос к веб-серверу
HTTPЗапрос = Новый HTTPЗапрос("/api/v2/requests");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
// Если настроена авторизация, добавляем заголовок авторизации Basic Auth
// ИмяПользователя и Пароль должны быть предварительно созданы в утилите АТОЛ
ИмяПользователя = "admin";
Пароль = "password";
РазделительКодирования = ИмяПользователя + ":" + Пароль;
ДвоичныеДанныеСтроки = ПолучитьДвоичныеДанныеИзСтроки(РазделительКодирования, КодировкаТекста.UTF8);
СтрокаBase64 = ПолучитьBase64СтрокуИзДвоичныхДанных(ДвоичныеДанныеСтроки);
HTTPЗапрос.Заголовки.Вставить("Authorization", "Basic " + СтрокаBase64);
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Попытка
// Отправляем запрос на веб-сервер ККТ
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Если HTTPОтвет.КодСостояния = 201 Тогда // Задание принято в очередь веб-сервера
Сообщить("Задание успешно отправлено на ККТ. UUID запроса: " + СтруктураЗапроса.uuid);
Иначе
Сообщить("Ошибка отправки запроса. Код состояния HTTP: " + HTTPОтвет.КодСостояния);
Сообщить("Ответ сервера: " + HTTPОтвет.ПолучитьТелоКакСтроку());
КонецЕсли;
Исключение
Сообщить("Не удалось установить связь с веб-сервером ККТ: " + ОписаниеОшибки());
КонецПопытки;
При использовании веб-сервера важно помнить, что обмен происходит асинхронно. Веб-сервер принимает ваше JSON-задание методом POST на адрес /api/v2/requests, помещает его в очередь, возвращает статус 201 Created и начинает отправку команд физической кассе. Чтобы получить результат выполнения (например, номер пробитого чека или фискальный признак), ваша 1С должна периодически отправлять запросы методом GET по адресу /api/v2/requests/{uuid} до тех пор, пока статус задания не изменится на выполненный.
Выбор варианта подключения ККТ зависит от поставленных перед вами задач автоматизации: