Найти в Дзене
Просто <> "1С"

API Национальный каталог / 1С УТ10.3 Обмен по API c НК(ЧЗ) / Подписание технической карточки товара в НК / Маркировка остатков

от 26.01.2025 В дополнение к посту https://dzen.ru/a/Z430k5P46He6_Wqd Задача: Задача кратко если изложить то поставлена так: 1. Автоматизировать процесс создания технических карточек на остатки номенклатуры в национальном каталоге (далее по тексту "НК"). Источник Номенклатуры таблица или выборка запроса. Выполнено (с горем на пополам запросы на создание тех. карточки долетаю до НК). 2. Проверять статус карточек в НК, осуществлять подпись тех что успешно прошли модерацию. 3. Заказывать коды маркировки по присвоенным GTIN на карточки. 4. Вводить в "оборот" коды маркировки обклеенной продукции. Напишу сразу, что с с API я работал во второй раз. Полный код в конце поста. Писал по методичке "API "Национального каталога" доступная пользователям ЧЗ (https://clothes.crpt.ru/help/list). 2 .1 Проверять статус карточек в НК, осуществлять подпись тех что успешно прошли модерацию. Ранее в посту в ответ от НК мы получали feedId. У меня он сохраняется в специальный справочник с привязкой к н

от 26.01.2025

В дополнение к посту https://dzen.ru/a/Z430k5P46He6_Wqd

Задача: Задача кратко если изложить то поставлена так:

1. Автоматизировать процесс создания технических карточек на остатки номенклатуры в национальном каталоге (далее по тексту "НК"). Источник Номенклатуры таблица или выборка запроса. Выполнено (с горем на пополам запросы на создание тех. карточки долетаю до НК).

2. Проверять статус карточек в НК, осуществлять подпись тех что успешно прошли модерацию.

3. Заказывать коды маркировки по присвоенным GTIN на карточки.

4. Вводить в "оборот" коды маркировки обклеенной продукции.

Напишу сразу, что с с API я работал во второй раз.

Полный код в конце поста.

Писал по методичке "API "Национального каталога" доступная пользователям ЧЗ (https://clothes.crpt.ru/help/list).

2 .1 Проверять статус карточек в НК, осуществлять подпись тех что успешно прошли модерацию.

Ранее в посту в ответ от НК мы получали feedId. У меня он сохраняется в специальный справочник с привязкой к номенклатуре. В этом справочнике и сделаем функционал по проверке статуса карточки товара.

Справочник мой выглядит пока что так

Цепляем к кнопке "Обновить статусы карточек" процедуру

-2

Тут все стандартно записываем в структуру параметры HTTP запроса и в соответствие Заголовок.

Дальше запросом получаю не опубликованные карточки, те карточки что на модерации и те что только отправили.

-3

По каждой найденной строки справочника делаем запрос в ЧЗ:

-4

Ключ входа = это ключ доступа "API key" примерно такого формата "9r8eilxdfb9xbcy8" берётся в личном кабинете НК. (см. https://dzen.ru/a/Z430k5P46He6_Wqd тут).

ФидID = это тот самый фид который к нам приходит ответом при создании карточки. (см. https://dzen.ru/a/Z430k5P46He6_Wqd тут).

Преобразуем тело ответа в структуру:

-5

В структуре ответа "два уровня" в первом можно получить ключ "status"

принимает значения:

// «Received» — запрос получен, данные на модерации;

//«Moderated» — товары прошли модерацию;

//«Signed» — одобренные модератором товары подписаны;

//«Rejected» — запрос не принят;

//«Processing» — запрос получен, ожидает обработки

Сделал под функцию чтоб возвращать расшифровку статуса.

-6

Второй уровень это ещё одна вложенная структура под ключом "item".

Если отправляемы ранее нами запрос принят, то получим в "item" :

заветный GTIN. Сразу же записываю его в свой справочник чтоб не потерять.

Теперь статус у карточки товара "на модерации" модерация примерно +-2 дня.

Как только карточка успешно пройдет модерацию можно её подписывать.

2.2 . Подпись тех что успешно прошли модерацию.

https://dzen.ru/a/Z7VnHTb5VCZffuwB

Полный код:

Процедура ОбновитьСтатусыКарточек(Кнопка)
// 1. htpp - параметры + Заголовок
ПараметрыОтправкиHTTPЗапросов = Новый Структура;
ПараметрыОтправкиHTTPЗапросов.Вставить("ПредставлениеСервиса", НСтр("ru = 'ГИС МТ'"));
ПараметрыОтправкиHTTPЗапросов.Вставить("Сервер", "апи.национальный-каталог.рф");
ПараметрыОтправкиHTTPЗапросов.Вставить("Порт", 443);
ПараметрыОтправкиHTTPЗапросов.Вставить("Таймаут", 60);
ПараметрыОтправкиHTTPЗапросов.Вставить("ИспользоватьЗащищенноеСоединение", Истина);
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Content-Type", "application/json; charset=utf-8");
ЗаголовокHTTP.Вставить("Accept-Charset", "utf-8");

// 2.Отбор карточек со статусом на модерации. (Был присвоен при отправке карточке).
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СправочникКарточекТовара.Ссылка КАК Ссылка,
| СправочникКарточекТовара.ФидID КАК ФидID,
| СправочникКарточекТовара.GTIN КАК GTIN,
| СправочникКарточекТовара.ОрганизацияЭксплуатант КАК Подразделение
|ИЗ
| Справочник.СправочникКарточекТовара КАК СправочникКарточекТовара
|ГДЕ
| (СправочникКарточекТовара.Статус = &Статус
| ИЛИ СправочникКарточекТовара.Статус = &Статус2
| ИЛИ СправочникКарточекТовара.Статус = &Статус3
| ИЛИ СправочникКарточекТовара.Статус = &Статус4)
| И СправочникКарточекТовара.Опубликованна = ЛОЖЬ
| И СправочникКарточекТовара.Статус <> &Статус5";

Запрос.УстановитьПараметр("Статус", "Отправлен на модерацию");
Запрос.УстановитьПараметр("Статус2", "запрос получен, данные на модерации");
Запрос.УстановитьПараметр("Статус3", "запрос получен, ожидает обработки");
Запрос.УстановитьПараметр("Статус4", "товары прошли модерацию");
Запрос.УстановитьПараметр("Статус5", "одобренные модератором, товары подписаны");


РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ВыгрузкаВыборка = РезультатЗапроса.Выгрузить(); // для отладки
// 3. Запрос в ЧЗ НК
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

КлючВхода = ПОлучитьКлючВхода(ВыборкаДетальныеЗаписи.Подразделение);
URLЗапроса = "/v3/feed-status?apikey=" + КлючВхода + "&feed_id="+ВыборкаДетальныеЗаписи.ФидID;

HTTPЗапросОтвет = Новый HTTPЗапрос(URLЗапроса, ЗаголовокHTTP);
ИнтернетПрокси = ПолучениеФайловИзИнтернета.ПолучитьПрокси("HTTPS");
ЗащищенноеСоединение = ИнтеграцияИСПовтИсп.ЗащищенноеСоединение();

Соединение = Новый HTTPСоединение(
ПараметрыОтправкиHTTPЗапросов.Сервер,
ПараметрыОтправкиHTTPЗапросов.Порт,,,
ИнтернетПрокси,
ПараметрыОтправкиHTTPЗапросов.Таймаут,
ЗащищенноеСоединение);
HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапросОтвет);
ПрочитатьОтвет = HTTPОтвет.ПолучитьТелоКакСтроку();
// Прочитать "ответ"
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ПрочитатьОтвет);
Попытка
СсылкаСправочника = ВыборкаДетальныеЗаписи.Ссылка;
ОбъектСправочника = СсылкаСправочника.ПолучитьОбъект();
СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
СтруктураОтвета = СтруктураОтвета.Получить("result"); // 1 уровень
status_ответ = СтруктураОтвета.Получить("status"); // в 1 уровне
Если status_ответ = "Rejected" ИЛИ status_ответ = "" Тогда
ОбъектСправочника.Статус = ПолучитьРасшифровкуСтатуса (status_ответ);
ОбъектСправочника.ИнфОбЗапросе = ПрочитатьОтвет;
ОбъектСправочника.Записать();
Иначе
ОбъектСправочника.Статус = ПолучитьРасшифровкуСтатуса (status_ответ);
ОбъектСправочника.ИнфОбЗапросе = ПрочитатьОтвет;
СтруктураОтвета = СтруктураОтвета.Получить("item")[0]; // 2 уровень
ОбъектСправочника.GoodID = СтруктураОтвета.Получить("good_id");
ОбъектСправочника.GTIN = СтруктураОтвета.Получить("gtin");
Месседж = СтруктураОтвета.Получить("message");
ОбъектСправочника.Записать();
КонецЕсли;
Исключение
СсылкаСправочника = ВыборкаДетальныеЗаписи.Ссылка;
ОбъектСправочника = СсылкаСправочника.ПолучитьОбъект();
ОбъектСправочника.ИнфОбЗапросе = ПрочитатьОтвет;
ОбъектСправочника.Записать();
КонецПопытки;
КонецЦикла;

КонецПроцедуры

Функция ПолучитьРасшифровкуСтатуса(статус_ответ)

Если статус_ответ = "Received" Тогда
Статус = "запрос получен, данные на модерации" ;

ИначеЕсли статус_ответ = "Moderated" Тогда
Статус = "товары прошли модерацию";

ИначеЕсли статус_ответ = "Signed" Тогда
Статус = "одобренные модератором, товары подписаны";

ИначеЕсли статус_ответ = "Rejected" Тогда

Статус = "запрос не принят";
Иначе
Статус = "запрос получен, ожидает обработки"
КонецЕсли;
Возврат Статус;

КонецФункции