При интеграции кассовой техники АТОЛ (например, модели АТОЛ 55Ф) разработчики часто сталкиваются с ситуацией, когда прямое подключение через COM-порт работает без нареканий, но попытка перевести ККТ на работу по сети Ethernet или Wi-Fi через вызов старого метода Open() с массивом настроек завершается ошибкой. Разберем причины такого поведения, выясним, почему массив параметров не подходит для сетевого обмена, и рассмотрим корректные способы подключения кассы по IP-адресу.
Проанализируем причину ошибки при попытке передать сетевые параметры в метод Open(МассивЗначений, ИДУстройства). Этот метод относится к устаревшему стандарту интеграции торгового оборудования (ДТО 6/8 и компоненты вида AddIn.ATOL_KKM_1C). В данной сигнатуре массив строго фиксирован и включает в себя ограниченный набор позиций:
Попытка подставить строку вида "192.168.11.135:5555" в элементы массива приводит к сбою, так как логика устаревшего драйвера ожидает исключительно номер физического или виртуального COM-порта. Механизм передачи IP-адреса через массив параметров в данном интерфейсе не предусмотрен.
Для работы с современными онлайн-кассами по требованиям 54-ФЗ используется стандарт Библиотеки подключаемого оборудования (БПО) или обновленная внешняя компонента (например, AddIn.ATOL_KKM_1C82_54FZ). В этом случае параметры связи передаются не единым массивом, а через установку именованных свойств объекта драйвера.
Посмотрим на пример инициализации и настройки параметров подключения через метод УстановитьПараметр():
// Подключение внешней компоненты драйвера
ProgID = "AddIn.ATOL_KKM_1C82_54FZ";
Если ПодключитьВнешнююКомпоненту(ProgID) Тогда
ОбъектДрайвера = Новый(ProgID);
Иначе
ВызватьИсключение "Не удалось загрузить внешнюю компоненту ККТ!";
КонецЕсли;
// Установка параметров соединения по протоколу TCP/IP
ОбъектДрайвера.УстановитьПараметр("MachineName", "");
ОбъектДрайвера.УстановитьПараметр("IPAdress", "192.168.11.135");
ОбъектДрайвера.УстановитьПараметр("IPPort", 5555); // Стандартный порт ККТ АТОЛ
ОбъектДрайвера.УстановитьПараметр("Model", 62); // Модель устройства
ОбъектДрайвера.УстановитьПараметр("AccessPassword", "");
ОбъектДрайвера.УстановитьПараметр("Password", "");
ОбъектДрайвера.УстановитьПараметр("PrintTax", Истина);
ОбъектДрайвера.УстановитьПараметр("WriteLogFile", Ложь);
// Подключение к устройству
ИДУстройства = "";
Результат = ОбъектДрайвера.Подключить(ИДУстройства);
Если Не Результат Тогда
ОписаниеОшибки = "";
ОбъектДрайвера.ПолучитьОшибку(ОписаниеОшибки);
Сообщить("Ошибка подключения кассы: " + ОписаниеОшибки);
Иначе
Сообщить("Касса успешно подключена, ID: " + ИДУстройства);
КонецЕсли;
После успешной инициализации можно вызывать стандартные команды фискализации и сервисных операций, например печать отчета без гашения (X-отчет):
РезультатОтчета = ОбъектДрайвера.НапечататьОтчетБезГашения(ИДУстройства);
Если интеграция строится напрямую на базе современного драйвера ДТО 10 без использования прослойки БПО, настройка сетевого обмена выполняется через установку предопределенных параметров драйвера:
Попытка
ПодключитьВнешнююКомпоненту("AddIn.Fptr10");
ДрайверККТ = Новый("AddIn.Fptr10");
Исключение
ВызватьИсключение "Драйвер ДТО 10 не установлен в системе.";
КонецПопытки;
// Установка типа подключения: 1 = TCP/IP (LIBFPTR_PORT_TCPIP)
ДрайверККТ.setParam(ДрайверККТ.LIBFPTR_SETTING_PORT, ДрайверККТ.LIBFPTR_PORT_TCPIP);
ДрайверККТ.setParam(ДрайверККТ.LIBFPTR_SETTING_IPADDRESS, "192.168.11.135");
ДрайверККТ.setParam(ДрайверККТ.LIBFPTR_SETTING_IPPORT, 5555);
// Применение настроек и открытие соединения
ДрайверККТ.applySingleSettings();
ДрайверККТ.open();
Если ДрайверККТ.isOpened() Тогда
Сообщить("Связь с кассой по IP установлена успешно.");
Иначе
Сообщить("Не удалось открыть соединение с ККТ по указанному адресу.");
КонецЕсли;
Разберем ключевые моменты, которые необходимо проверить на стороне кассы и локальной сети: