Страница 34 из 36

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

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

Класс для разрешительной проверки КМ (кодов маркировки) через API ТС ПИоТ ЕСМ от АО «ЕСП».
Поддержка работы с API ЦРПТ: ПО Локальный модуль и Национальный каталог.
Полный боевой комплект с описанием интерфейса API и примерами.

Реализованный в классе функционал соответствует ПФС версии 1.18 от 26.06.2026 г. (27 сценариев),
для получения сертификата совместимости и допуска к работе в промышленной среде ТС ПИоТ ЦРПТ. 😎

Благодарность за помощь на старте проекта: FinsoftRZ и Alex412.
Любые замечания, исправления и дополнения - приветствуются !

Список изменений в версии от 22.08.2026 г.
----------------------------------------------------------------------------------------------------
- Изменения по руководству интеграции для разработчиков ПМСР 1.7;
- Поддержка Единного Сервисного Модуля версии 1.6.4.0;
- Устранены проблемы по запросам и внесены изменения в примеры.
----------------------------------------------------------------------------------------------------
Рекомендуем использовать актуальные версии классов LibCURL, cJSON и PrintF.

esp.png
esp.png (13.96 КБ) 237067 просмотров

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Добавлено: 11 Июль 2026, 13:11
SergioRaguzini
Игорь, Спасибо! :ty:

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Добавлено: 11 Июль 2026, 13:34
Игорь Столяров
SergioRaguzini писал(а): 11 Июль 2026, 13:11 Спасибо!
Пожалуйста ! И это направление тоже будет продолжено в следующем релизе. :D
Здесь основная идея в том, что в "старых" константах теперь задаётся значения хост/порт API по умолчанию.
А иные значения (при необходимости) можно задать для каждого экземплара класса при его инициализации.
Таким образом, мы сохраняем совместимось, а также реализуем гибкость настройки и новые возможности.

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Добавлено: 15 Июль 2026, 7:09
Игорь Столяров
Привет всем маркировщикам ! :D

В свежем релизе "Руководство интеграции ЕСМ" версии 1.4 нас порадовали вот такой добавкой:
Для корректной работы ЕСМ касса должна быть подключена к ПМСР, и на кассе должна
быть открыта смена.

ПМСР должен инициализировать экземпляр драйвера при начале работы с кассой и под
держивать его в активном состоянии до окончания сессии.
Не допускается закрывать или пересоздавать экземпляр драйвера после каждого отдель
ного запроса, так как ТС ПИоТ использует активное подключение к кассе для взаимодей
ствия с серверами ГИС МТ и установки канала проверки марки.

Экземпляр драйвера должен оставаться инициализированным и активным до мо
мента завершения смены.

Т.е. с точки зрения работы с ККТ, речь идёт о монопольном захвате девайса и отсутствии возможности,
например, подключаться к одной физической ККТ с разных EXE модулей программы или нескольких рабочих мест ...
Один ККТ - одно постоянно работающее РМК - в одном EXE модуле. И никаких терминальных многопользовательских сессий.

Жесть конечно, что хвост не нашёл решения своих многочисленных проблем лучше, чем начать крутить собакой. 🤦‍♂️

SergioRaguzini писал(а): 09 Июль 2026, 19:13 в общепите, может быть ситуация, когда, внесение товарных позиций происходит с разных рабочих мест и, на рабочей станции отличной от Localhost для проверки позиции марк.продукции необходимы иной адрес и порт, результаты проверки сохраняются в записи таблицы
Просто забыли о такой технологии и всё. Проверять КМ может только экземпляр ПМСР монопольно удерживающий ККТ.

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Добавлено: 15 Июль 2026, 7:56
finsoftrz
Я что-то не понял, а если тупо нужно перезапустить кассовую программу посреди открытой смены?

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Добавлено: 15 Июль 2026, 8:23
SergioRaguzini
Привет Всем!
Игорь Столяров писал(а): 15 Июль 2026, 7:09 ПМСР должен инициализировать экземпляр драйвера при начале работы с кассой и под
держивать его в активном состоянии до окончания сессии.
Получается, что проверку можно выполнить либо с того раб.места, где физически подключена ККМ, либо пробовать как-то обойти это ограничение, м.б. писать программку-"сервер", который висит в Tray на главном ПК, принимает запросы на проверку от сетевых рабочих мест и потом сам выполняет такую проверку

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Добавлено: 16 Июль 2026, 9:23
Игорь Столяров
finsoftrz писал(а): 15 Июль 2026, 7:56 а если тупо нужно перезапустить кассовую программу посреди открытой смены
И перезапускайте, с этим нет никаких проблем. Всё прекрасно работает.
Здесь начались переводы стрелок по проблемам на пользователей "которые неправильно используют" ЕСМ.

Дело в том, что ЕСМ может запускать (за каким-то хреном) несколько своих копий, которые начинают хаотично
переключать на себя монопольно единственную ККТ. Как следствие, идут ошибки с проверкой марок.
Виноваты конечно же ПМСР которые инициализируют ЕСМ более одного раза. Что и было "устранено" в документации. :D

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Добавлено: 16 Июль 2026, 20:37
Игорь Столяров
Буду выкладывать типичные ошибки работы с ТС ПИоТ.
Вот так выглядит не включенная опция "Установить контроллер ЛМ" при установке ЕСМ.
Решается только через полную переустановку и реинициализацию ЕСМ.

1.jpg

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Добавлено: 16 Июль 2026, 20:47
finsoftrz
Игорь Столяров писал(а): 16 Июль 2026, 9:23 Всё прекрасно работает.
Игорь, Вы как Трамп. Одна фраза противоречит другой. А по итогу хеппи энд. :lol:

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Добавлено: 17 Июль 2026, 14:24
Игорь Столяров
finsoftrz писал(а): 16 Июль 2026, 20:47 Одна фраза противоречит другой
Наверно всё-таки мой реальный опыт работы противоречит новым требованиям производителя ЕСМ.
Собственно я и опубликовал требования для их обсуждения. Про Тампа постоянно не думайте. :D

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Добавлено: 17 Июль 2026, 19:28
dolphinmax
Народ привет. Подскажите поле client_info можно использовать какое-нибудь без сертификации собственного по в ЧЗ?

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Добавлено: 17 Июль 2026, 20:44
Игорь Столяров
dolphinmax писал(а): 17 Июль 2026, 19:28 поле client_info можно использовать какое-нибудь без сертификации
Да, для доступа к тестовым стендам Вы можете использовать параметры доступа client_info для стенда.
см. https://esm-emu.ao-esp.ru/?mode=online&tab=instructions

Но для доступа к продуктивной среде ЦРПТ всё-таки требуется сдать ПФС. Для этого и проводится сертификация.

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Добавлено: 19 Июль 2026, 9:42
StillZero
Есть пара вопросов:

1. 5.22 Продажа товара в поставарийном режиме
Пишут, что должен вернуться код 204. Так и происходит:

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

{"codesResponse":[{"code":204,"description":"ok","codes":[{"cis":"0104815719069547215f,aNoSAkE5kj\u001D91FFD0\u001D92dGVzdCNf0wx6pLRo55h8wQ25naVjcgzv6nu6uaeAW9w=",
"found":true,"valid":true,"printView":"0104815719069547215f,aNoSAkE5kj","gtin":"04815719069547","groupIds":[1],"verified":true,"realizable":true,"utilised":true,"isOwner":true,"isBlocked":false,"errorCode":0,"isTracking":true,"sold":false,"packageType":"UNIT","producerInn":"7605016030"}],"reqId":"d7ef39a8-5a98-4135-b109-5809b1f6d35d","reqTimestamp":1784434693706,"isCheckedOffline":false}]}
Но следующий код возвращает 254

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

 bFlagPIoT# = Loc:Honest.PIoT_CheckOneCode(loc:G_OneCode, dSalePrice, gOneResponse)
 
 Honest::Message('Полный LOG ОБМЕНА см. в папке DEBUG !!!||' & |
    'Хост:                 ' & gContact.PIoT_RootHost            & '|' & |
    'Код возврата:         ' & bFlagPIoT#                & '|' & |
    'КОД ИДЕНТИФИКАЦИИ:    ' & gOneResponse.FindCIS    & '||' & |
    'РЕЗУЛЬТАТ ПРОВЕРКИ:   ' & Clip(Left(gOneResponse.LockFlag))     & '. ' & gOneResponse.LockName       & '|' & |                           
    'ТОВАРНАЯ ГРУППА:      ' & Clip(Left(gOneResponse.groupIds[01])) & '. ' & Honest::GetProductGroup(gOneResponse.groupIds[01]) & '|' & |
    Choose(Clip(gOneResponse.parent) <> '',     'КИ АГРЕГАТА:          ' & Clip(gOneResponse.parent)      & '|','')  & | 
    Choose(Clip(gOneResponse.producerInn) <> '','ИНН ПРОИЗВОДИТЕЛЯ:    ' & Clip(gOneResponse.producerInn) & '|','')  & |
    'ДАТА ПРОИЗВОДСТВА:    ' & Honest::RusDate(gOneResponse.productionDate)  & '|' & |
    'СРОК ГОДНОСТИ:        ' & Honest::RusDate(gOneResponse.expireDate)      & '|' & |
    'ТИП УПАКОВКИ:         ' & Honest::GetPackName(gOneResponse.packageType) & '|' & |
     Choose(gOneResponse.packageType > 0,  'ФАСОВКА:              ' & gOneResponse.packageQuantity       & '|','') & | 
     Choose(gOneResponse.mrp > 0,          'МРЦ / МЦ:             ' & Honest::GetPrice(gOneResponse.mrp) & '|','') & |
     Choose(gOneResponse.smp > 0,          'ЕМЦ:                  ' & Honest::GetPrice(gOneResponse.smp) & '|','') & |
    '')
В чем причина?

2. ПМСР называется по-русски. В файле запроса вижу казябры, хотя просматриваю в UTF-8.

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

	
	"client_info":	{
		"name":	"Спорклуб: ЭНКА-Лайф",
Я вижу использование json::ToUtf8 и json::FromUTF8. С виду должно быть ОК. Развейте сомнения, пожалуйста.

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Добавлено: 19 Июль 2026, 12:39
Игорь Столяров
StillZero писал(а): 19 Июль 2026, 9:42В чем причина?
О том, что возвращает ТС ПИоТ логично спростить в тех. подержке ТС ПИоТ.
Тестовый стенд и ЕСМ / МГН-ФН по разному обрабатывают КМ ошибкой 203.
Наше дело передать запрос и получить ответ. К пуговицам претензии есть ? :D
StillZero писал(а): 19 Июль 2026, 9:42 Развейте сомнения, пожалуйста.
А Вы передайте КМ на проверку и собственно посмотрите как отображается название ПМСР в окне ЕСМ.
Я перестал комментировать документацию, что бы потом не отвечать на всякую хрень про противоречия. :D

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Добавлено: 19 Июль 2026, 12:48
Дед Пахом
StillZero писал(а): 19 Июль 2026, 9:42 2. ПМСР называется по-русски. В файле запроса вижу казябры, хотя просматриваю в UTF-8.
Так бывает, если в файле есть текст и в utf-8, и обычной кириллицей, тут смотря что появляется первым. Если сначала кириллица, потом utf-8, то текстовый редактор (например F3 в Totlal Commander-е) покажет кириллицу правильно, а utf-8 как у вас. Если наоборот, то utf-8 покажет правильно, а кириллицу как набор иероглифов.

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Добавлено: 19 Июль 2026, 14:31
StillZero
К пуговицам претензии есть ?
Похоже на это.

Проверяю на тестовом стенде. 254 возвращает твой метод

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

bLockFlag   Byte(254)    ! = Нет данных о проверке