QR-штрихкод на кассовом чеке

Простой вопрос — что там должно быть, что туда пихать, и как это проверить?

Я даже не называл бы это «статьёй» или «публикацией». Это скорее заметка, по итогам потраченного времени.

Дело в том, что мне и коллегам за неделю поисков не удалось найти в сети адекватную и непротиворечивую информацию о том, что же должен включать двумерный штрихкод, размещённый на чеке, чтобы быть адекватно прочитанным с точки зрения ФНС. Мы знаем, что ФНС запустила мобильное приложение под Андроид для чтения и проверки чеков, мы знаем, что делаются порталы и службы от разных ОФД, мы знаем о сторонних утилитах некоторых умельцев. Тут интернет просто пестрит предложениями проверить ваш чек. А вот если задача стоит — эмулировать этот штрихкод, то сведений нету. Зачем? Например, генерировать электронный чек, чтобы потом посылать его клиенту на е-мейл.

Попытка изысканий в типовых конфигурациях кончилась маловразумительно — стало ясно лишь то, что ни пресловутая большая xml-строка, ни параметры команд логическим устройствам ФР/ККТ не содержат собственно названия товаров. Логично: даже у qr-кода ограниченная вместимость, а чек может быть из десятков позиций и их названия могут быть длинными. Вывод: в qr-коде содержится лишь итоговая информация, которая служит для идентификации уже собственно в базе ФНС и уже по ней, по ключевым полям, прочитанным из штрихкода, будут тянуться подробные сведения чека.

Найденная в Рознице 2.0 механика давала невалидную строку. Уж не знаю, когда поменялся стандарт, но весенний релиз не подошёл.

Поэтому сделали просто: отсканировали кучу разных чеков с самых разных мест пробития, и экстраполировали.

Итого, формат получился следующий: 

t=ДатаТВремя&s=СуммаСКопейкамиБезТриад&fn=НомерФискальногоНакопителяККТ&i=НомерФискальногоДокументаЧека&fp=УникальныйыФискальныйПризнакЧека&n=УСН

Или, если в коде,

    ТекстНаQR="t="+Формат(ДатаВремяЧека,"ДФ=ггггММддТЧЧммсс")+
разд+"s="+Формат(ОбщаяСуммаЧека,"ЧРД=,;ЧЦ=10;ЧДЦ=2;ЧН=0,00;ЧГ=0")+
разд+"fn="+СокрЛП(НомерФНвашегоККТ)+
разд+"i="+Формат(ТекущийЧекФД,"ЧГ=0")+
разд+"fp="+Формат(ТекущийЧекФП,"ЧГ=0")+
разд+"n="+?(ЭтоУСН,"0","1");


Причём: номер ФН это свойство аппарата, зашитое в нём; можно прочитать с любого чека и единожды зафиксировать; а вот номер ФД и номер ФП — данные, уникально идентифицирующие каждый чек, поэтому они должны читаться программно. Штатный способ для семейства драйверов Штрих-М выглядит примерно следующим образом:

Функция ПолучитьФДиФП(фр)
фр.Password=30; // административные права
рез=фр.FNGetStatus();
Если рез<>0 Тогда
Возврат Неопределено; // ошибка
КонецЕсли;
фд=фр.DocumentNumber;
рез=фр.FNFindDocument();
Если рез<>0 Тогда
Возврат Неопределено; // ошибка
КонецЕсли;
фп=фр.FiscalSign;
Возврат Новый Структура("ФД,ФП",фд,фп);
КонецФункции

Замечу: вроде бы, согласно руководствам, независимо от фр.DocumentType всегда есть правильный FiscalSign, но на практике встретились случаи, когда ФР возвращает верное значение в утилите драйвера, и неверное — в программном обращении из 1С. Если он вернул вам отрицательное значение — значит, неверно. Причину пока понять не удалось, некоторые источники в сети кивают на кривую прошивку. Также замечу: был добавлен метод FNGetFiscalizationResultByNumber, но он есть только в самых свежих прошивках. Про АТОЛ и прочие вики вообще ничего сказать не могу.

Признак УСН — 0 (если ОСН) или 1 (если УСН), другие системы не знаю, как отражаются, не попалось таких чеков. Кто знает — отпишитесь, пожалуйста. Вообще, знающие да скажут больше)

Ну и чтоб не так грустно было, вот простенькая обработочка для генерации QR-кодов, под обычные формы и УФ. Авось кому пригодится.

6 Comments

  1. demon_infernal

    0 — ОСН

    1 — УСН Доход

    2 — УСН Доход — Расход

    3 — ЕНВД

    4 — ЕСН

    5 — Патент

    Reply
  2. Yashazz

    (1) Спасибо! Откуда сведения?

    Reply
  3. demon_infernal

    (2) из типовой розницы

    Reply
  4. Yashazz

    (3) Значит либо у меня релиз был не тот, либо руки кривые, ибо я это там не обрёл. Ещё раз спасибо.

    Reply
  5. artemibe

    Параметр «n» отражает не вид системы налогообложения, а вид документа:

    1 — Приход

    2 — Возврат прихода

    4 — Расход

    5 — Возврат расхода

    7 — Коррекция прихода

    9 — Коррекция расхода

    Reply
  6. user1139325

    Времени суток сограждане !

    Прочитав Всё вышеперечисленное решил предложить вам познакомиться с ГОСТ 56042 действующийс 2014 года.

    Этот документ чётко регламентирует , что именно кодируются в платеже при помощи QR кода . А именно, Прошу обратить внимание на то в чём исчисляется платёж. подчеркиваю еще раз это государственный стандарт имеющий обязательную силу к исполнению для всех платежных систем на территории Российской Федерации !!!То есть абсолютно всех!!!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *