ZReport. Z-отчёты
Метод возвращает электронные Z-отчёты — итоги закрытых смен фискальных регистраторов: суммы и количество чеков продаж, возвратов, покупок, внесений и выплат, налоги, данные о кассирах. Отчёты можно только читать.
Как получить ключ, как формируются запросы и какие бывают ответы и ошибки — в статье Общие сведения. Здесь описаны только особенности метода zreport.
Запрос
Все параметры, кроме ключа apikey и формата format, принимаются и в адресной строке, и в теле POST.
GET https://[компания].myvirtualpos.ru/api/zreport?apikey=MySecret&warehouse_id=2&date=20260925
Параметры запроса
| warehouse_id | Число. Ид точки продаж: отчёты всех её касс |
| ext_warehouse_id | Строка. Код точки продаж во внешней системе. Действует, если не указан warehouse_id. Если точки с таким кодом нет, возвращается пустой список |
| terminal_id | Число. Ид кассового места |
| fiscal_number | Строка. Серийный номер фискального регистратора. Действует, если не указан terminal_id |
| session | Число. Номер смены на фискальном регистраторе |
| date | Дата ГГГГММДД. Отчёты смен, закрытых в этот день |
| format | json (по умолчанию) или xml |
Условия объединяются по «и». Отчёты возвращаются по убыванию id: новые первыми. Даты передаются строго в формате ГГГГММДД, иначе метод вернёт ошибку Incorrect date format.
Только закрытые смены за последние 30 дней. Метод возвращает отчёты смен, закрытых не более 30 дней назад; изменить глубину нельзя. Смена, которая ещё не закрыта, в выдачу не попадает. Если нужны более давние отчёты, они доступны в панели управления.
Структура ответа
| success | 1 — данные получены |
| type | Тип данных, всегда zreport |
| count | Количество отчётов в ответе |
| zreports | Список отчётов. Каждый обёрнут в объект zreport |
Поля отчёта
Пустые значения в JSON приходят как null, в XML — как пустой элемент.
Смена и касса
| id | Число. Ид отчёта |
| guid | Строка. Уникальный идентификатор отчёта (GUID) |
| session | Число. Номер смены |
| open_datetime, close_datetime | Строка. Дата и время открытия и закрытия смены, формат гггг-мм-дд чч:мм:сс |
| terminal_id | Число. Ид кассового места |
| terminal_number | Число. Номер кассы в зале |
| warehouse_external_id | Строка. Код точки продаж во внешней системе |
| fiscal_number | Строка. Серийный номер фискального регистратора |
| short_fiscal_serial_number | Строка. Краткий серийный номер |
| device_model_name, device_model_version | Строка. Модель и версия ККТ |
| open_user_id, close_user_id | Число. Ид кассиров, открывшего и закрывшего смену |
| open_user_corp_code, close_user_corp_code | Строка. Их корпоративные коды |
| open_user_fio, close_user_fio | Строка. Их фамилии и инициалы |
Итоги продаж
| salesamount | Строка. Сумма продаж за смену |
| saleschecks | Число. Количество чеков продаж |
| discount_misc | Строка. Скидки, оплаченные купонами и сертификатами |
Регистры фискального регистратора. Названия полей построены по схеме fp_reg_<что>_<вид операции>_<…>: oper — количество операций, cash — денежные суммы; вид операции — sale (продажи), saleret (возвраты продаж), buy (покупки), buyret (возвраты покупок). Значения -1 означают, что регистратор не передаёт этот регистр.
| fp_reg_oper_sale_counts, fp_reg_oper_saleret_counts, fp_reg_oper_buy_counts, fp_reg_oper_buyret_counts | Число. Количество чеков продаж, возвратов продаж, покупок и возвратов покупок |
| fp_reg_cash_sale_sum, fp_reg_cash_saleret_sum, fp_reg_cash_buy_sum, fp_reg_cash_buyret_sum | Строка. Общая сумма по этим чекам |
| fp_reg_cash_<вид>_sum_cash, _card, _credit, _tare | Строка. Та же сумма по способам оплаты: наличными, банковской картой, в кредит, тарой (кредит и тара не используются) |
| fp_reg_oper_moneyinput_count, fp_reg_oper_moneyinput_count_global | Число. Количество внесений за смену и с начала работы регистратора |
| fp_reg_cash_moneyinput_sum | Строка. Сумма внесений |
| fp_reg_oper_moneyoutput_count, fp_reg_oper_moneyoutput_count_global | Число. Количество выплат за смену и с начала работы регистратора |
| fp_reg_cash_moneyoutput_sum | Строка. Сумма выплат |
| fp_reg_oper_annulate_count_global, fp_reg_oper_annulate_<вид>_count | Число. Количество аннулированных чеков (общее и по видам операций) |
| fp_reg_cash_annulate_<вид>_sum | Строка. Сумма аннулированных чеков по видам операций |
| fp_reg_cash_allcash_sum | Строка. Сумма наличных по данным регистратора |
| fp_reg_cash_sale_sum_discount, fp_reg_oper_sale_counts_discount | Сумма и количество чеков продаж со скидкой |
| fp_reg_cash_total_sale_sum | Строка. Итоговая сумма продаж по данным регистратора |
Налоги
| vat | Объект. Суммы НДС по ставкам: отдельно для чеков продаж (sale) и возвратов (return), поля vat10_sum, vat18_sum, vat20_sum |
| sum_with_vat | Объект. Суммы с разбивкой по ставкам НДС для продаж (sale) и возвратов (return): sum_with_vat_none (без НДС), sum_with_vat0, sum_with_vat10, sum_with_vat18, sum_with_vat20 |
Пример ответа
{
"success": 1,
"type": "zreport",
"count": 1,
"zreports": [
{
"zreport": {
"id": 19046,
"terminal_id": 36,
"terminal_number": 1,
"warehouse_external_id": "WH-2",
"fiscal_number": "00106701382709",
"guid": "CC2CDC05-B0DB-9BE5-6CDD-57AC2726E91E",
"salesamount": "1429.00",
"saleschecks": 2,
"session": 1,
"open_user_id": 6,
"close_user_id": 6,
"open_user_corp_code": "",
"close_user_corp_code": "",
"open_user_fio": "Иванов И. И.",
"close_user_fio": "Иванов И. И.",
"open_datetime": "2026-09-25 09:04:01",
"close_datetime": "2026-09-25 20:11:37",
"device_model_name": "",
"device_model_version": "",
"short_fiscal_serial_number": "138270",
"fp_reg_oper_sale_counts": 2,
"fp_reg_cash_sale_sum": "1429.00",
"fp_reg_cash_sale_sum_cash": "1429.00",
"fp_reg_cash_sale_sum_card": "0.00",
"fp_reg_oper_saleret_counts": 0,
"fp_reg_cash_saleret_sum": "0.00",
"fp_reg_cash_allcash_sum": "1429.00",
"vat": {
"sale": { "vat10_sum": "0.00", "vat18_sum": "0.00", "vat20_sum": "0.00" },
"return": { "vat10_sum": null, "vat18_sum": null, "vat20_sum": null }
},
"sum_with_vat": {
"sale": { "sum_with_vat_none": "1080.00", "sum_with_vat0": null, "sum_with_vat10": null, "sum_with_vat18": null, "sum_with_vat20": null },
"return": { "sum_with_vat_none": null, "sum_with_vat0": null, "sum_with_vat10": null, "sum_with_vat18": null, "sum_with_vat20": null }
},
"discount_misc": "0.00"
}
}
]
}
В примере для краткости опущены часть регистров фискального регистратора: покупки, возвраты покупок, внесения, выплаты, аннулирования. Структура и названия полей — как в таблице выше. Тот же ответ при format=xml (сокращённо):
<?xml version="1.0" encoding="UTF-8"?> <root> <success>1</success> <type>zreport</type> <count>1</count> <zreports> <zreport> <id>19046</id> <terminal_id>36</terminal_id> <session>1</session> <open_datetime>2026-09-25 09:04:01</open_datetime> <close_datetime>2026-09-25 20:11:37</close_datetime> <salesamount>1429.00</salesamount> <!-- остальные поля отчёта --> <vat> <sale><vat10_sum>0.00</vat10_sum><vat18_sum>0.00</vat18_sum><vat20_sum>0.00</vat20_sum></sale> <return><vat10_sum/><vat18_sum/><vat20_sum/></return> </vat> </zreport> </zreports> </root>
Примеры запросов
| Задача | Запрос |
|---|---|
| Отчёты за последние 30 дней | /api/zreport?apikey=MySecret |
| Отчёты точки продаж за день | /api/zreport?apikey=MySecret&warehouse_id=2&date=20260925 |
| Отчёты точки по её коду в 1С | /api/zreport?apikey=MySecret&ext_warehouse_id=WH-2 |
| Отчёты одной кассы | /api/zreport?apikey=MySecret&terminal_id=36 |
| Отчёт по регистратору и смене | /api/zreport?apikey=MySecret&fiscal_number=00106701382709&session=1 |
Ошибки
Ошибка авторизации и общие ошибки описаны в статье Общие сведения.
| Сообщение | Причина | Что делать |
|---|---|---|
| Incorrect date format date='…'. Valid format is: YYYYMMDD | Дата не в формате ГГГГММДД | Передайте дату как 20260925 |
Если по условиям ничего не найдено, метод возвращает успешный ответ с count равным 0 и пустым списком zreports.