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

Модератор: Дед Пахом

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8741
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 40 раз
Поблагодарили: 149 раз

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

Сообщение Игорь Столяров »

Привет всем !

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

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

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

Список изменений в версии от 19.07.2026 г.
----------------------------------------------------------------------------------------------------
- Внесены изменения по Методическим рекомендациям ЦРПТ версии 17 от 15.07.2026 г.
- Устранены проблемы по запросам и внесены изменения в примеры.
----------------------------------------------------------------------------------------------------
Рекомендуем использовать актуальные версии классов LibCURL, cJSON и PrintF.

esp.png
esp.png (13.96 КБ) 191331 просмотр
Вложения
Honest.rar
Пароль: крайний С6 релиз
(59.27 КБ) 1 скачивание
Последний раз редактировалось Игорь Столяров 19 Июль 2026, 21:07, всего редактировалось 137 раз.
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
SergioRaguzini
Ветеран
Сообщения: 316
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край
Благодарил (а): 46 раз
Поблагодарили: 1 раз

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

Сообщение SergioRaguzini »

Игорь, Спасибо! :ty:
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8741
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 40 раз
Поблагодарили: 149 раз

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

Сообщение Игорь Столяров »

SergioRaguzini писал(а): 11 Июль 2026, 13:11 Спасибо!
Пожалуйста ! И это направление тоже будет продолжено в следующем релизе. :D
Здесь основная идея в том, что в "старых" константах теперь задаётся значения хост/порт API по умолчанию.
А иные значения (при необходимости) можно задать для каждого экземплара класса при его инициализации.
Таким образом, мы сохраняем совместимось, а также реализуем гибкость настройки и новые возможности.
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8741
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 40 раз
Поблагодарили: 149 раз

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

Сообщение Игорь Столяров »

Привет всем маркировщикам ! :D

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

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

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

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

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

SergioRaguzini писал(а): 09 Июль 2026, 19:13 в общепите, может быть ситуация, когда, внесение товарных позиций происходит с разных рабочих мест и, на рабочей станции отличной от Localhost для проверки позиции марк.продукции необходимы иной адрес и порт, результаты проверки сохраняются в записи таблицы
Просто забыли о такой технологии и всё. Проверять КМ может только экземпляр ПМСР монопольно удерживающий ККТ.
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 6079
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 25 раз
Поблагодарили: 90 раз

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

Сообщение finsoftrz »

Я что-то не понял, а если тупо нужно перезапустить кассовую программу посреди открытой смены?
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
SergioRaguzini
Ветеран
Сообщения: 316
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край
Благодарил (а): 46 раз
Поблагодарили: 1 раз

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

Сообщение SergioRaguzini »

Привет Всем!
Игорь Столяров писал(а): 15 Июль 2026, 7:09 ПМСР должен инициализировать экземпляр драйвера при начале работы с кассой и под
держивать его в активном состоянии до окончания сессии.
Получается, что проверку можно выполнить либо с того раб.места, где физически подключена ККМ, либо пробовать как-то обойти это ограничение, м.б. писать программку-"сервер", который висит в Tray на главном ПК, принимает запросы на проверку от сетевых рабочих мест и потом сам выполняет такую проверку
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8741
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 40 раз
Поблагодарили: 149 раз

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

Сообщение Игорь Столяров »

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

Дело в том, что ЕСМ может запускать (за каким-то хреном) несколько своих копий, которые начинают хаотично
переключать на себя монопольно единственную ККТ. Как следствие, идут ошибки с проверкой марок.
Виноваты конечно же ПМСР которые инициализируют ЕСМ более одного раза. Что и было "устранено" в документации. :D
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8741
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 40 раз
Поблагодарили: 149 раз

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

Сообщение Игорь Столяров »

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

1.jpg
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 6079
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 25 раз
Поблагодарили: 90 раз

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

Сообщение finsoftrz »

Игорь Столяров писал(а): 16 Июль 2026, 9:23 Всё прекрасно работает.
Игорь, Вы как Трамп. Одна фраза противоречит другой. А по итогу хеппи энд. :lol:
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8741
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 40 раз
Поблагодарили: 149 раз

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

Сообщение Игорь Столяров »

finsoftrz писал(а): 16 Июль 2026, 20:47 Одна фраза противоречит другой
Наверно всё-таки мой реальный опыт работы противоречит новым требованиям производителя ЕСМ.
Собственно я и опубликовал требования для их обсуждения. Про Тампа постоянно не думайте. :D
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
dolphinmax
Прохожий
Сообщения: 1
Зарегистрирован: 17 Июль 2026, 19:26
Благодарил (а): 1 раз

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

Сообщение dolphinmax »

Народ привет. Подскажите поле client_info можно использовать какое-нибудь без сертификации собственного по в ЧЗ?
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8741
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 40 раз
Поблагодарили: 149 раз

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

Сообщение Игорь Столяров »

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

Но для доступа к продуктивной среде ЦРПТ всё-таки требуется сдать ПФС. Для этого и проводится сертификация.
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
StillZero
Ветеран
Сообщения: 467
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Благодарил (а): 5 раз
Поблагодарили: 1 раз
Контактная информация:

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

Сообщение 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. С виду должно быть ОК. Развейте сомнения, пожалуйста.
по аэродрому...
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8741
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 40 раз
Поблагодарили: 149 раз

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

Сообщение Игорь Столяров »

StillZero писал(а): 19 Июль 2026, 9:42В чем причина?
О том, что возвращает ТС ПИоТ логично спростить в тех. подержке ТС ПИоТ.
Тестовый стенд и ЕСМ / МГН-ФН по разному обрабатывают КМ ошибкой 203.
Наше дело передать запрос и получить ответ. К пуговицам претензии есть ? :D
StillZero писал(а): 19 Июль 2026, 9:42 Развейте сомнения, пожалуйста.
А Вы передайте КМ на проверку и собственно посмотрите как отображается название ПМСР в окне ЕСМ.
Я перестал комментировать документацию, что бы потом не отвечать на всякую хрень про противоречия. :D
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3410
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 26 раз
Поблагодарили: 58 раз
Контактная информация:

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

Сообщение Дед Пахом »

StillZero писал(а): 19 Июль 2026, 9:42 2. ПМСР называется по-русски. В файле запроса вижу казябры, хотя просматриваю в UTF-8.
Так бывает, если в файле есть текст и в utf-8, и обычной кириллицей, тут смотря что появляется первым. Если сначала кириллица, потом utf-8, то текстовый редактор (например F3 в Totlal Commander-е) покажет кириллицу правильно, а utf-8 как у вас. Если наоборот, то utf-8 покажет правильно, а кириллицу как набор иероглифов.
С уважением, ДП
Аватара пользователя
StillZero
Ветеран
Сообщения: 467
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Благодарил (а): 5 раз
Поблагодарили: 1 раз
Контактная информация:

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

Сообщение StillZero »

К пуговицам претензии есть ?
Похоже на это.

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

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

bLockFlag   Byte(254)    ! = Нет данных о проверке
по аэродрому...
Ответить