Кассовый аппарат отказывается печатать чек из 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?