При переходе на современное взаимодействие с контрольно-кассовой техникой (ККТ) АТОЛ через веб-сервер (ДТО 10), разработчики часто сталкиваются с ситуацией: запрос в формате JSON уходит успешно, сервер возвращает корректный идентификатор задания (UUID), но физически касса ничего не печатает. Рассмотрим подробно, почему это происходит, как диагностировать проблему и какие нюансы работы с JSON API необходимо учитывать для стабильной автоматизации.
Самая распространенная причина «молчания» кассы — это конфликт программного обеспечения за доступ к COM-порту или USB-интерфейсу. Разберем ситуацию: веб-сервер АТОЛ является своего рода «прослойкой», которая постоянно держит связь с кассой. Однако, если у вас открыта стандартная утилита «Тест драйвера ККТ» и в ней установлена галочка «Включено», драйвер захватывает порт монопольно. В этот момент веб-сервер, даже получая ваши JSON-запросы, не может передать их «железу».
Проанализируем алгоритм действий для устранения этой проблемы:
Выясним причину, почему это важно: веб-сервер и драйвер используют одну и ту же библиотеку fptr10.dll. Если одна копия библиотеки уже заняла канал связи, вторая будет стоять в очереди до бесконечности, при этом сетевая часть (HTTP-сервер) продолжит отвечать «ОК», так как сама задача в очередь принята.
Многие разработчики совершают ошибку, полагая, что ответ 201 Created или получение uuid в теле ответа означает успешную печать документа. Это не так. Веб-сервер АТОЛ работает по принципу очереди задач.
Рассмотрим правильный цикл обработки запроса:
POST запрос на адрес /requests с телом задания.JSON объектом с уникальным номером (UUID). На этом этапе задача только попала в базу данных сервера.GET запрос на /requests/{uuid}.Разберем пример кода, описывающего структуру типичного запроса на получение X-отчета:
{
"uuid": "956d52ed-3171-bb95-fc9f-eff9346f040b",
"request": [
{
"type": "reportX"
}
]
}
Если после отправки этого кода в статусе задания по его uuid вы видите ошибку или статус "inProgress", значит, связь с ККТ не установлена или данные некорректны.
Посмотрим на встроенные инструменты диагностики самого сервера. По умолчанию веб-сервер АТОЛ имеет административную панель, доступную по адресу http://localhost:16732 (порт может быть изменен в настройках). Проанализируем состояние системы в этом интерфейсе:
Если визуально всё настроено верно, но отчет не выходит, нам необходимо изучить логи. Важно понимать, что есть логи самого веб-сервера (где фиксируются HTTP-запросы) и логи низкоуровневого драйвера. Нас интересует файл fptr10.log.
Рассмотрим, где его найти: обычно он располагается по пути %AppData%\Atol\drivers10\fptr10.log. Проанализируем типичные записи в этом файле:
-1 (Нет связи) — подтверждает теорию о занятом порте или физическом отключении кабеля.-3800 (Внесенные данные некорректны) — сигнализирует о том, что JSON составлен неверно (например, не указан обязательный оператор или нарушена структура).Часто простые запросы игнорируются ККТ из-за отсутствия данных о кассире. Согласно российскому законодательству (54-ФЗ), фискальный документ или отчет должен содержать информацию о лице, его сформировавшем. Посмотрим на пример корректного формирования объекта с оператором:
{
"type": "reportX",
"operator": {
"name": "Иванов И.И.",
"vatin": "123456789012"
}
}
Важный момент: Кодировка JSON-запроса должна быть строго UTF-8. Если вы передаете имя кассира в кириллице в другой кодировке, парсер веб-сервера может некорректно интерпретировать запрос, что приведет к ошибке, которую сложно отловить без чтения логов.
Выясним еще одну возможную причину отсутствия реакции ККТ. В некоторых версиях внутреннего ПО (прошивки) АТОЛ работа через определенные интерфейсы или дополнительные функции требует наличия действующих лицензий. Проверить это можно, распечатав отчет «Информация о ККТ» через утилиту драйвера. Если в разделе «Лицензии» отсутствуют необходимые записи для работы с JSON API, касса может отклонять команды управления по сети.
Подведем итог: работа через веб-сервер — это надежный способ интеграции 1С с кассой, особенно в терминальных сессиях или облачных решениях. Главное — следить за тем, чтобы канал связи оставался свободным от других приложений, и всегда проверять статус выполнения задачи по её уникальному идентификатору uuid.