Накропал у себя проверку по примеру "Работа с ТС ПИоТ (тестовый контур)":
последовательный вызов Honest::PIoT_ViewInfo, Loc:Honest.Init, Loc:Honest.PIoT_CheckCodes, Honest::CheckReceipt(gContact,qCodes,gVerified,False).
Clear(qCodes); qCodes.GS1 = Atol::RecodeMarking(QFS:DataMatrix); Add(qCodes) ! код со сканера по 1-му тесту Сертификации
Clear(qCodes); qCodes.GS1 = '0104602220006549215opFcmK<29>93dGVz'; Add(qCodes) ! 1-й код из примера
Clear(qCodes); qCodes.GS1 = '0104670540176099215''W9Um<29>93dGVz'; Add(qCodes) ! код 1-го теста Сертификации
Несмотря на gContact.bPIoT=True класс (процедура PIoT_CheckCodes) требует указать токен ЛМ ЧЗ ("Укажите токен для подключения к API ГСЦМ «Честный ЗНАК» !" и далее "...Если нет доступа к сервису - проверьте установку и настройки ТС ПИоТ.").
Если указать токен из ЛМ ЧЗ (который умрет 01.03.2026), получаю три сообщения:
ККТ, на которую зарегистрирован ТС ПИоТ|-------------------------------------------|ИНН ККТ: 9717169611|ЗН ККТ: 00106322849258|ЗН ФН: 9999078902016936|-------------------------------------------|Идентификатор ТС ПИоТ: 00106322849759|Проверка КМ в мсек.: 1800||Endpoint для ТС ПИоТ:
https://tspiot.sandbox.crptech.ru
0|ok|ef483670-e670-4a0a-89da-3f66410d1b05|1770836727574
ВНИМАНИЕ ! ПЕЧАТЬ ЧЕКА ОТМЕНЕНА.|Устраните проблемы и повторите операцию.||Обнаружены ошибки разрешительной|проверки КМ в ON-LINE режиме ТС ПИоТ|для выписанных кодов маркировки ( 3 из 3 ):||0104670540176099215'W9Um93dGVz|КИ заблокирован ОГВ: Росалкогольтабакконтроль||0104602220006549215opFcmK93dGVz|КМ не найден в ГИС МТ||0104670540176099215'W9Um93dGVz|КМ не найден в ГИС МТ
Проблем, на мой взгляд две:
1. Я так понимаю, что онлайн проверка в ПИоТ у иеня не работает, поэтому переключается на ЛМ.
Из-за этого не находится и код из теста Сертификации.
Подскажите, чего еще надо проверить/настроить/докрутить, плиз.
PS. Попробовал прямо вызывать Loc:Honest.PIoT_CheckReceipt(qCodes,gVerified,False) - результат идентичен вызову Honest::CheckReceipt.
2. Странная диагностика в последнем сообщении: на первый код молочки выдается запрет Росалкогольтабакконтроль, он же на второй код должен выдаваться.
При этом, если не сразу три, а по одному коду тестировать, то отрабатывает корректно (молочка не найдена, алкоголь запрещен).
Код: Выделить всё
win.CheckPIoT Procedure() ! проверка КМ в ПИоТ ! zmi 10.02.2026+
Code
If ~Records(QFinStr); MMessage('Список пуст. Отсканируйте товары в список.','Предупреждение',ICON:Exclamation,'®©Ok©©~Ok.ico',1,'Arial Cyr',12,COLOR:Navy); Return.
Honest::PIoT_ViewInfo(gContact) ! Просмотр информации о ККТ, на которую зарегистрирован ТС ПИоТ
Free(qCodes) ! список КМ в GS1 для проверки
Loop I:qCodes# = 1 To Records(QFinStr)
Get(QFinStr,I:qCodes#); If ErrorCode(); Break.
Clear(qCodes) ! Строка № X с КМ в чеке
qCodes.GS1 = Atol::RecodeMarking(QFS:DataMatrix)
Add(qCodes)
End
Clear(qCodes); qCodes.GS1 = '0104602220006549215opFcmK<29>93dGVz'; Add(qCodes)
Clear(qCodes); qCodes.GS1 = '0104670540176099215''W9Um<29>93dGVz'; Add(qCodes)
! Информация о ПМСР (кассовом ПО)
gContact.gPmsrInfo.name = '1' ! Наименование
gContact.gPmsrInfo.version = '2' ! Версия
gContact.gPmsrInfo.id = '3' ! Идентификатор в реестре ГИС МТ
gContact.gPmsrInfo.token = '4' ! Контрольная сумма/ЭЦП исполняемого файла
gContact.bPIoT = True ! Не требовать наличие токена и проверка чека в TC ПИоТ
Loc:Honest.Init(gContact)
!! dSalePrice = 1700.00 ! Цена реализации товара по прайс-листу для контроля и переустановки по данным в КМ
Loc:Honest.PIoT_NoPriceChanges = True ! Опционально: выписка без изменения цен по КМ (просто запрет продажи)
bOffLine = GetINI('ПИоТ','OffLine',0,Get_Prop('FULL_PATH_INI')) ! Включить режим Off-Line (OffLine=1) для тестирования на стенде (для сценариев ПФС с 16 по 20)
If Loc:Honest.PIoT_CheckCodes(qCodes,gResponse,qResponse) > 0 ! Проверка списка КМ в ТС ПИоТ
Honest::Message(gResponse.codesResponse.codesResponse[1].code & '|' & |
gResponse.codesResponse.codesResponse[1].description & '|' & |
gResponse.codesResponse.codesResponse[1].reqId & '|' & |
gResponse.codesResponse.codesResponse[1].reqTimestamp)
If qResponse.LockFlag = 0 ! Запись результата проверки КМ в тег 1260 для элементов в чеке (по содержанию чека с КМ)
Loop I:qCodes# = 1 To Records(QFinStr)
Get(QFinStr,I:qCodes#); If ErrorCode(); Break.
Clear(qFinStr.gIndustryInfo) ! 1260
qFinStr.gIndustryInfo.fois = '030' ! 1262 Министерству промышленности и торговли Российской Федерации
qFinStr.gIndustryInfo.date = '2023.11.21' ! 1263 Постановление Правительства РФ №1944 от 21.11.2023
qFinStr.gIndustryInfo.number = '1944' ! 1264 №1944
! 1265
qFinStr.gIndustryInfo.industryAttribute = 'UUID=' & Clip(qCodes.reqId) & |
'&Time=' & Clip(qCodes.reqTimestamp) & |
Choose(qCodes.Inst <> '','&Inst=' & Clip(qCodes.Inst), '') & |
Choose(qCodes.Version <> '','&Ver=' & Clip(qCodes.Version), '')
Put(qFinStr) ! сохранение данных тэга 1260
End
End
End
!;MMessage('проверка PIoT_CheckCodes - завершено!','Сообщение',ICON:Exclamation,'®©Ok©©~Ok.ico',1,'Arial Cyr',12,COLOR:Navy)
If Honest::CheckReceipt(gContact,qCodes,gVerified,False) ! Выполнить проверку КМ в GS1 из содержания чека и получить результат
Honest::Message('Проверка выполнена ' & Choose(gVerified.bWorkVid,'On-Line','Off-Line') & ' в ТС ПИоТ')
MMessage('Теперь может распечатываться чек','Сообщение',ICON:Exclamation,'®©Ok©©~Ok.ico',1,'Arial Cyr',12,COLOR:Navy) ! И собственно теперь печать Вашего чека с тегом 1260
! !!!!!!!!!!!!!!!!!!! ЗДЕСЬ: Разрешительная проверка КМ в ТС ПИоТ пройдена и теперь мона отправлять чек на ККТ ...
End
!;MMessage('Конец проверки в ТС ПИоТ!','Сообщение',ICON:Exclamation,'®©Ok©©~Ok.ico',1,'Arial Cyr',12,COLOR:Navy) ! И собственно теперь печать Вашего чека с тегом 1260
Return