Как решить проблему, когда ККТ АТОЛ не печатает отчеты и чеки через веб-сервер по JSON API

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При переходе на современное взаимодействие с контрольно-кассовой техникой (ККТ) АТОЛ через веб-сервер (ДТО 10), разработчики часто сталкиваются с ситуацией: запрос в формате JSON уходит успешно, сервер возвращает корректный идентификатор задания (UUID), но физически касса ничего не печатает. Рассмотрим подробно, почему это происходит, как диагностировать проблему и какие нюансы работы с JSON API необходимо учитывать для стабильной автоматизации.

Разбираем основную причину: Монопольный захват порта

Самая распространенная причина «молчания» кассы — это конфликт программного обеспечения за доступ к COM-порту или USB-интерфейсу. Разберем ситуацию: веб-сервер АТОЛ является своего рода «прослойкой», которая постоянно держит связь с кассой. Однако, если у вас открыта стандартная утилита «Тест драйвера ККТ» и в ней установлена галочка «Включено», драйвер захватывает порт монопольно. В этот момент веб-сервер, даже получая ваши JSON-запросы, не может передать их «железу».

Проанализируем алгоритм действий для устранения этой проблемы:

  1. Закройте все сторонние приложения, которые могут использовать кассу (утилиты АТОЛ, другие учетные системы).
  2. В «Тесте драйвера» обязательно снимите флаг «Включено».
  3. Перезапустите службу Atol Web Server через оснастку «Службы» Windows.

Выясним причину, почему это важно: веб-сервер и драйвер используют одну и ту же библиотеку fptr10.dll. Если одна копия библиотеки уже заняла канал связи, вторая будет стоять в очереди до бесконечности, при этом сетевая часть (HTTP-сервер) продолжит отвечать «ОК», так как сама задача в очередь принята.

Асинхронная природа JSON API: UUID — это еще не успех

Многие разработчики совершают ошибку, полагая, что ответ 201 Created или получение uuid в теле ответа означает успешную печать документа. Это не так. Веб-сервер АТОЛ работает по принципу очереди задач.

Рассмотрим правильный цикл обработки запроса:

  1. Вы отправляете POST запрос на адрес /requests с телом задания.
  2. Сервер отвечает вам JSON объектом с уникальным номером (UUID). На этом этапе задача только попала в базу данных сервера.
  3. Для проверки реального результата необходимо выполнить 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. Проанализируем типичные записи в этом файле:

Обязательные поля в JSON-задании

Часто простые запросы игнорируются ККТ из-за отсутствия данных о кассире. Согласно российскому законодательству (54-ФЗ), фискальный документ или отчет должен содержать информацию о лице, его сформировавшем. Посмотрим на пример корректного формирования объекта с оператором:


{
  "type": "reportX",
  "operator": {
     "name": "Иванов И.И.",
     "vatin": "123456789012"
  }
}

Важный момент: Кодировка JSON-запроса должна быть строго UTF-8. Если вы передаете имя кассира в кириллице в другой кодировке, парсер веб-сервера может некорректно интерпретировать запрос, что приведет к ошибке, которую сложно отловить без чтения логов.

Лицензирование и версии ПО

Выясним еще одну возможную причину отсутствия реакции ККТ. В некоторых версиях внутреннего ПО (прошивки) АТОЛ работа через определенные интерфейсы или дополнительные функции требует наличия действующих лицензий. Проверить это можно, распечатав отчет «Информация о ККТ» через утилиту драйвера. Если в разделе «Лицензии» отсутствуют необходимые записи для работы с JSON API, касса может отклонять команды управления по сети.

Подведем итог: работа через веб-сервер — это надежный способ интеграции 1С с кассой, особенно в терминальных сессиях или облачных решениях. Главное — следить за тем, чтобы канал связи оставался свободным от других приложений, и всегда проверять статус выполнения задачи по её уникальному идентификатору uuid.

← На главную