Страница 19 из 26

Класс для API ГСЦМ «Честный ЗНАК» / ТС ПИоТ ЕСМ от АО «ЕСП»

Добавлено: 31 Август 2024, 7:30
Игорь Столяров
Привет всем !

Класс для выполнения разрешительной проверки КМ (кодов маркировки)
через API ГСЦМ "Честный ЗНАК" (ГИС МТ + ПО Локальный Модуль) и ТС ПИоТ.

Полный боевой комплект с описанием интерфейса API и примерами.

Реализованный в классе функционал полностью соответствует ПФС ЦРПТ (версия 1.13 / 26 сценариев)
для получения сертификата совместимости и допуска в промышленную среду работы с ТС ПИоТ. 😎

Благодарность за помощь на старте проекта: FinsoftRZ и Alex412.
Любые замечания, исправления и дополнения - приветствуются !
----------------------------------------------------------------------------------------------------
НАСТОЯТЕЛЬНО рекомендуем использовать актуальные версии классов LibCURL, cJSON и PrintF.

2.jpg

Класс для API ГСЦМ «Честный ЗНАК» / ТС ПИоТ

Добавлено: 16 Февраль 2026, 16:16
finsoftrz
Игорь, а какие версии libcurl, json и printf Вам достались от бабушки? Вроде все это от дедушки. :lol:
Если от дедушки можно, а от бабушки нет, то это сексизм. :lol:

Класс для API ГСЦМ «Честный ЗНАК» / ТС ПИоТ

Добавлено: 16 Февраль 2026, 16:28
zmi
zmi писал(а): 16 Февраль 2026, 14:16 Коды как раз-таки идут в том же порядке, диагностика к ним неправильная.
Игорь, кажется я понял, что происходит с обработкой списка.
Как только появляется код с диагностикой "КМ не найден в ГИС МТ" происходит смещение диагностики на него (и именно диагностики, последовательность кодов верная), как будто этой строки очереди нет.

Вот например, если добавить в мой пример еще один код, который отсутствует в ГИС МТ, на 2-е место, то диагностика по 1-му коду верная, по 2-му - от третьего, по 3-му - от четвертого, к последнему дописывается от 2-го.
Free(qCodes)
Clear(qCodes); qCodes.GS1 = '0104670540176099215''W9Um<29>93dGVz'; Add(qCodes) ! КМ из сертификации 5.1
Clear(qCodes); qCodes.GS1 = '0107613036147262215ChK<W<29>93NKId'; Add(qCodes) ! КМ зоокорм
Clear(qCodes); qCodes.GS1 = '0104670540176099215LnOjv<29>93dGVz'; Add(qCodes) ! КМ из сертификации 5.2
Clear(qCodes); qCodes.GS1 = '0104602220006549215opFcmK<29>93dGVz'; Add(qCodes) ! КМ из примера (алкоголь)

PS. Я пробовал разные варианты, но все они соответствуют данной версии.

Класс для API ГСЦМ «Честный ЗНАК» / ТС ПИоТ

Добавлено: 16 Февраль 2026, 16:31
Игорь Столяров
Современный софт на всех уровнях стал достаточно сложным.
Ошибки - это рабочий процесс, и далеко не всё официально публикуется. Просто исправляется и всё. 🤷‍♀️
Недавно я говорил об ошибках в драйвере ККТ POScenter, которых нет в драйвере ТБМ.
Всё-таки после разбора логов они сознались, что это ошибка "новой команды разработчиков" и она исправлена.
Но это только в переписке со мной, для всех остальных на сайте - всё супер ! 🤦‍♀️

Класс для API ГСЦМ «Честный ЗНАК» / ТС ПИоТ

Добавлено: 16 Февраль 2026, 16:32
Игорь Столяров
zmi писал(а): 16 Февраль 2026, 16:28 Игорь, кажется я понял, что происходит с обработкой списка
Мне кажется всё проще. Сначала идут успешные коды, а потом ошибки. :D

Класс для API ГСЦМ «Честный ЗНАК» / ТС ПИоТ

Добавлено: 16 Февраль 2026, 16:45
zmi
Игорь Столяров писал(а): 16 Февраль 2026, 16:32 Сначала идут успешные коды, а потом ошибки.
Такая мысль и мне первой пришла в голову :) НО в результате некорректная диагностика!! :D

Класс для API ГСЦМ «Честный ЗНАК» / ТС ПИоТ

Добавлено: 16 Февраль 2026, 16:50
Игорь Столяров
zmi писал(а): 16 Февраль 2026, 16:45 в результате некорректная диагностика
Спасибо. Да, я уже это понял. ТС ПИоТ меняет последовательность кодов при ошибке. :(
Сейчас сделаю - не заморачивайтесь пока с этим. Это будут внутренние изменения в классе.

- Если проверяется один КМ при выписке - с ним не может быть проблемы нарушения последовательности;
- Если ошибка проверки списка КМ в чеке - то чек всё равно снимается с продажи, но возможно неправильное указание КМ с ошибкой.

Класс для API ГСЦМ «Честный ЗНАК» / ТС ПИоТ

Добавлено: 16 Февраль 2026, 20:37
finsoftrz
Игорь Столяров писал(а): 16 Февраль 2026, 16:31 Современный софт на всех уровнях стал достаточно сложным.
Ошибки - это рабочий процесс, и далеко не всё официально публикуется. Просто исправляется и всё. 🤷‍♀️
Недавно я говорил об ошибках в драйвере ККТ POScenter, которых нет в драйвере ТБМ.
Всё-таки после разбора логов они сознались, что это ошибка "новой команды разработчиков" и она исправлена.
Но это только в переписке со мной, для всех остальных на сайте - всё супер ! 🤦‍♀️
Эта сложность объясняется низким уровнем адекватности спускаемых сверху правил, с одной стороны, и попыткой более полно реализовать это в учетных системах (я, конечно, про наших баранов). Это игра в одни ворота. Следовать всем правилам в итоге смогут только крупные компании, которые могут позволить себе тратить много денег на содержание больших ит отделов и прочих бухгалтеров. Для средних и небольших компаний такой подход прямой путь к закрытию. Что мы сейчас и наблюдаем. По этой причине сейчас надо как-то оптимизировать взаимодействие с государственными сервисами, сознательно ограничивая и упрощая их использование.

Класс для API ГСЦМ «Честный ЗНАК» / ТС ПИоТ

Добавлено: 16 Февраль 2026, 20:46
Игорь Столяров
zmi писал(а): 16 Февраль 2026, 16:45 НО в результате некорректная диагностика!!
Устранено в версии от 16.02.2026 г. ! Приглашаю все заинтересованные стороны к тестированию. :D
Вот негодяи ! Зачем же они сделали в ТС ПИоТ пасхалку с перетасовкой записей в ответе при ошибках ? :evil:
Хотя, кстати, это может быть только проблемой тестового стенда (уже были такие и в ГИС МТ и в Ветисе)

Начали сертификацию в АО ЕСП. Спойлер: всё не просто ... :facepalm:

Класс для API ГСЦМ «Честный ЗНАК» / ТС ПИоТ

Добавлено: 16 Февраль 2026, 20:57
finsoftrz
А зачем нужна сертификация в АО ЕСП? Первый раз слышу, вроде достаточно в ЧЗ.

Класс для API ГСЦМ «Честный ЗНАК» / ТС ПИоТ

Добавлено: 16 Февраль 2026, 21:02
Игорь Столяров
finsoftrz писал(а): 16 Февраль 2026, 20:57 А зачем нужна сертификация в АО ЕСП? Первый раз слышу, вроде достаточно в ЧЗ.
Для работы - оно как бы да, достаточно только попасть в реестр совместимого ПО ЦРПТ и получить свой токен ...
Но ведь теперь хочется (очень), попасть на сайт ЦРПТ в калькулятор выбора ПО и рекомендации ЕСП для удобства клиентов. :D

Класс для API ГСЦМ «Честный ЗНАК» / ТС ПИоТ

Добавлено: 17 Февраль 2026, 17:41
zmi
Правильно ли я понимаю, что перед печатью чека надо вызывать две процедуры:
Loc:Honest.PIoT_CheckCodes - для заполнения тега 1260
Honest::CheckReceipt - для собственно разрешительной проверки

Сейчас (для прохождения сертификации) добавил сразу после сканирования вызов Loc:Honest.PIoT_CheckOneCode
Нельзя ли этой процедурой сразу получать данные для заполнения тега 1260, чтобы убрать вызов PIoT_CheckCodes?

И еще не понятно по поводу 16-го теста на дублирование КМ.
Видел, что это обсуждалось, но осталось не понятно, это проверка на дублирование в одном чеке или в разных.
В текущем у меня контроль дублей по очереди есть, надо ли табличку проданных делать?

Класс для API ГСЦМ «Честный ЗНАК» / ТС ПИоТ

Добавлено: 17 Февраль 2026, 18:29
Игорь Столяров
Постараюсь ответить на Ваш запрос по пунктам ...

1. Нет, не правильно. Требуется только вызов процедуры:

Код: Выделить всё

  If Honest::CheckReceipt(...)
     ПЕЧАТЬ ЧЕКА
  end
Honest::CheckReceipt() определяет вид требуемой проверки (разрешительная или ТС ПИоТ) и уже вызывает нужный
метод класса (Honest.CheckCodes() или Honest.PIoT_CheckCodes()). Т.е. это такой селектор, обеспечивающий
совместимость на переходной время. Просто меняем флаг gContact.bPIoT и получаем результат из разных систем.
zmi писал(а): 17 Февраль 2026, 17:41 это проверка на дублирование в одном чеке или в разных.
Задача: обеспечить блокировку повторного выбытия кодов маркировки (в разных чеках).

Вы можете либо это сделать самостоятельно (формировать какой-нибудь список КИ (не путать с КМ !) и проверять
по нему была ли уже продажа марки, либо при включённой опции PIoT:UseLMCheckDubl - контроль дублей делает класс.

Здесь есть небольшая хитрость. Контролировать дубли нужно только в том случае, если ТС ПИоТ сообщил, что выполнял
проверку марок в режиме Off-Line. Что и реализовано в классе через ПО ЛМ Честный ЗНАК.

Можно ли тупо контролировать дубликаты всегда, например перед проверкой ?
Наверно да, ничего плохого в этом нет. Просто лишнее действие.
К тому же ПО ЛМ ведет обслуживание БД проданных марок, а в классе есть методы их выгрузки / загрузки.
zmi писал(а): 17 Февраль 2026, 17:41 В текущем у меня контроль дублей по очереди есть, надо ли табличку проданных делать?
Я так понимаю, что здесь речь идёт о контроле дубликатов внутри одного чека (сценарий 15).
Отлично если это уже сделано. Или можно делать с помощью Honest::CheckUniqueCodes() - см. примеры.

У нас есть такое понятие, как объединение, поэтому мы делаем ещё проверку на дубли при формировании
списка марок в чеке на разрешительную проверку:

Код: Выделить всё

  Clear(qCodes)
  qCodes.GS1              = Atol::RecodeMarking(qItems.Dump)
  qCodes.Price            = Round(qItems.Price,0.01) * 100  ! Для проверки МРЦ
  qCodes.FractionalAmount = qItems.itemFractionalAmount     ! 1291 Дробное количество маркированного товара
  qCodes.ProductName      = Clip(Left(qItems.Name))         ! 1030 Наименование предмета расчёта (для сообщения об ошибке) 
  
  ! Проверка дубликатов КМ в чеке
  If Honest::CheckUniqueCodes(qCodes.GS1,              | 
                              qUniqueCodes,            |
                              qCodes.FractionalAmount, |
                              '')  ! '' - Без сообщений
     Add(qCodes)
  else
     Honest::Message('ВНИМАНИЕ ! ПЕЧАТЬ ЧЕКА ОТМЕНЕНА.||'          & |
                     'Обнаружен дубликат кода маркировки в чеке.|' & |
                     'Устраните проблему и повторите печать.||'    & |
                     qCodes.ProductName & '|' & Atol::ClearMarking(qCodes.GS1))
     
     bPrintCheck = False  ! Прервать печать чека
     Free(qCodes)
     Break
  end  ! If Honest::CheckUniqueCodes(

Класс для API ГСЦМ «Честный ЗНАК» / ТС ПИоТ

Добавлено: 17 Февраль 2026, 18:56
Игорь Столяров
zmi писал(а): 17 Февраль 2026, 17:41 контроль дублей по очереди есть
Обратите внимание, что контроль дублей (внутри чека и общий) только для КМ с штучным выбытием.
При дробном выбытии контроль не нужен (например развесной собачий корм и т.д.)

Класс для API ГСЦМ «Честный ЗНАК» / ТС ПИоТ

Добавлено: 17 Февраль 2026, 19:12
finsoftrz
Игорь Столяров писал(а): 17 Февраль 2026, 18:56
zmi писал(а): 17 Февраль 2026, 17:41 контроль дублей по очереди есть
Обратите внимание, что контроль дублей (внутри чека и общий) только для КМ с штучным выбытием.
При дробном выбытии контроль не нужен (например развесной собачий корм и т.д.)
Игорь, нашли обоснование, что при продаже корма вразвес надо сканировать маркировку? Я думаю, этого делать не надо, но таких клиентов нет.
https://evoclub.pro/blog/kak-prodavat-v ... 3999679491

Класс для API ГСЦМ «Честный ЗНАК» / ТС ПИоТ

Добавлено: 17 Февраль 2026, 19:36
Игорь Столяров
finsoftrz писал(а): 17 Февраль 2026, 19:12 Я думаю, этого делать не надо, но таких клиентов нет.
Ну на Эвоторе - это всё копипаст с Честного ЗНАКА.
https://markirovka.ru/community/markiro ... -pravilno-

А идея общая. Есть 2 способа продажи фаованных товаров. Они оба действуют.
Новый проще. Мешок с кормом ставится "на кран" и всё, но продать надо за 72 часа.
В старом марка сканируется каждый раз при частичном выбытии и полностью списывается при списании последней части.

1.jpg