Кассовый аппарат отказывается печатать чек из JSON-файла чаще всего по одной из трёх причин: нарушена структура задания, не установлен или не запущен драйвер ККТ, либо файл сохранён в неправильной кодировке. Прежде чем искать ошибку в коде, проверьте, что касса видна в драйвере и проходит тест связи — без этого никакой JSON до устройства просто не дойдёт.

Под «печатью чека из JSON» обычно понимают отправку на фискальный регистратор или онлайн-кассу структурированного задания в формате JSON, которое содержит тип операции, позиции, суммы и реквизиты. Такой подход используется при интеграции кассы с учётными системами, самописными скриптами и веб-сервисами. В этой статье разберём, как устроено JSON-задание, какие инструменты нужны для его отправки и как диагностировать типовые сбои.

Что представляет собой JSON-задание для печати чека

JSON-задание — это текстовый файл или строка, в которой описаны все параметры будущего чека: тип операции (приход, возврат прихода, расход), список товарных позиций с ценами и количеством, способ расчёта, ставки НДС и реквизиты кассира. Кассовое ПО или драйвер парсит эту структуру и преобразует её в команды фискального накопителя.

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

Типовой минимальный набор полей задания выглядит так:

  • 🧾 Тип документа — открытие смены, чек, закрытие смены, отчёт о состоянии расчётов;
  • 🛒 Позиции чека — наименование товара, цена, количество, налоговая ставка;
  • 💳 Оплата — наличный или безналичный расчёт, сумма по каждому виду оплаты;
  • 👤 Кассир — ФИО и, если требуется, ИНН оператора;
  • 📧 Реквизиты покупателя — телефон или email для отправки электронного чека, если он нужен.

Подготовка: драйвер ККТ и проверка связи

Прежде чем отправлять JSON, убедитесь, что касса физически подключена и определяется системой. Установите актуальную версию драйвера ККТ с официального сайта производителя и запустите тест связи — эта функция есть в штатной утилите настройки практически любого драйвера. Если тест связи не проходит, дальнейшие шаги бессмысленны: проверяйте кабель, порт и параметры подключения.

Для сетевых касс дополнительно проверьте, что компьютер и ККТ находятся в одной сети и порт кассы доступен. Для USB-подключения убедитесь, что в диспетчере устройств нет конфликтов и порт определился корректно.

⚠️ Внимание: не отправляйте тестовые задания на боевую кассу с реальным фискальным накопителем — каждый чек фискализируется и уходит в ОФД. Для отладки используйте режим эмуляции, если он предусмотрен вашим драйвером, или тестовый фискальный накопитель.

Структура JSON-файла: пример и правила оформления

Конкретные имена полей зависят от драйвера, но общие принципы одинаковы: файл должен быть валидным JSON, содержать корневой объект задания и строго соответствовать схеме производителя. Условный упрощённый пример структуры (не привязанный к конкретному вендору):

{

"type": "sell",

"operator": { "name": "Иванов И.И." },

"items": [

{

"name": "Товар 1",

"price": 100.00,

"quantity": 2,

"tax": "vat20"

}

],

"payments": [

{ "type": "cash", "sum": 200.00 }

]

}

Обратите внимание на детали, которые чаще всего становятся причиной отказа:

  • 📄 Кодировка файла — сохраняйте JSON в UTF-8 без BOM, если документация не требует иного;
  • 🔢 Типы данных — суммы передавайте числом, а не строкой, если того требует схема; лишние кавычки ломают парсинг;
  • ➗ Разделитель дробной части — точка, а не запятая, это стандарт JSON;
  • 🚫 Лишние поля — некоторые драйверы отклоняют задание при наличии неизвестных параметров.

Сумма оплаты должна сходиться с итогом по позициям с точностью до копейки. Расхождение хотя бы в одну копейку — типичная причина отказа кассы закрывать чек.

📊 Что чаще всего мешало вам распечатать чек из JSON?