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

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

Задача: Задача кратко если изложить то поставлена так: 1. Автоматизировать процесс создания технических карточек на остатки номенклатуры в национальном каталоге (далее по тексту "НК"). Источник Номенклатуры таблица или выборка запроса. 2. Проверять статус карточек в НК, осуществлять подпись тех что успешно прошли модерацию. 3. Заказывать коды маркировки по присвоенным GTIN на карточки. 4. Вводить в "оборот" коды маркировки обклеенной продукции. Информации в интернете вообще крупицы. Ctrl +C / Ctrl+V практически не сделать, поэтому написал этот пост. Напишу сразу, что с с API я работал в первый раз. Полный код в конце поста. Писал по методичке "API "Национального каталога" доступная пользователям ЧЗ (https://clothes.crpt.ru/help/list). Перечитал кучу статей и вот оно дышит : Создал внешнею обработку (поскольку у меня номенклатура в 1С УТ10.3 заполнена своеобразно-самописно, нужно будет много подгонять под стандарты НК. Править внешку само то будет. Форма проста : Выбираю организа

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

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

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

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

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

Информации в интернете вообще крупицы. Ctrl +C / Ctrl+V практически не сделать, поэтому написал этот пост.

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

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

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

Создал внешнею обработку (поскольку у меня номенклатура в 1С УТ10.3 заполнена своеобразно-самописно, нужно будет много подгонять под стандарты НК. Править внешку само то будет.

Форма проста : Выбираю организацию (у меня их несколько, у вас может быть одна) , заполняю таблицу "НоменклатураТаблица" запросом или вручную, кликаю "Создать карточку" и на всё что в таблице должны создаться технические карточки.

1. Процедура "Создать карточку".

1.1 Начинаем с описывания "КлючAPIвхода", "URL запрос" и "htpp - параметры"

-2

Тут всё проста URL: /v3/feed?apikey= (в конце дописываем к "apikey" ваш ключ).

Сервер "апи.национальный-каталог.рф"

КлючВхода = это ключ доступа "API key" примерно такого формата "9r8eilxdfb9xbcy8" берётся в личном кабинете НК.

Я получаю его функцией "ПолучитьКлючВхода(ПолеОрганизация)" поскольку у меня несколько организаций, возвратом функции идёт требуемый APIKey.

-3

Всё это нужно чтоб в дальнейшем сформировать и отправить HTTPЗапрос в НК.

1.2 Теперь формируем тело нашего будущего запроса, тело запишем в JSON

-4

Согласно п.3.2.2. (Метод «Создать или отредактировать карточку») из "API "Национального каталога" есть обязательные параметры для легкой промышленности они такие:

"tnved" ТНВЭД (значения строка, должнобыть в перечне НК)

"brand" брэнд (значение строка, любое как в вашей карточке "Конте", "Купалинка" "Золотая чаша" и тд..)

"moderation" отправлять на модерацию ( 1 - отправлять)

"good_name" наименование товара (значение строка, любое )

"is_tech_gtin" указание того что это техническая карточка (как раз на остаточки товаров)

Дальше запишем сюда же массив "good_attrs".

В массив записываю с помощью "ЗаписатьJSON(Запись, Значение)"

В "значение" передаю структуру , которую формирую отдельной функцией.

-5
-6

"good_attrs" это массив обязательных атрибутов

Атрибуты имеют свой ID и описываются так:

"attr_id" атрибут ID

"attr_value" значение атрибута по ID

"attr_value_type" дополнительное значение описывающего тип атрибута

attr_id берётся по ещё одной методичке от НК

Ссылка на PDF

https://xn----7sbabas4ajkhfocclk9d3cvfsa.xn--p1ai/docs/%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D0%9E%D0%B4%D0%B5%D0%B6%D0%B4%D0%B0_2024-11-01.pdf

-7

Обязательными attr_id для ЛП это :

"2630" - Страна производитель;

"36" - цвет;

"13914" - артикул / модель ( требует указывать: attr_value_type)

"12" - вид товара (определяется в пределах вашего ТНВЭД который укажет категорию вашего товара, т.е вид товара НК определит "носки, футболка и т.д. " если он присущ категории. Как пример в категории чулочно-носочные не допустимо указывать Вид "футболка".. Перечень видов есть в методичке "Описание_одежды" начиная со страницы 17+-)

"14013" - целевой пол (м/ж/у-с)

"35" - размер (требует указывать: attr_value_type - в ней указывается система измерения ER , россия ... );

"2483" - Состав (100% хлопок / 92% хлопок, 8% эластан / и тд..)

"13836" - Технический регламент мой на ЛП "ТР ТС 017/2011 О безопасности продукции легкой промышленности"

Поскольку карточки товаров в моей 1С специфичны я наделал кучу функций по определению размера или цвета исходя из наименования или иных параметров которые есть. Показывать их нет смысла. Определяйте что вставлять в value для того или иного ID своими методами.

В результате тело запроса будет примерно таким:

-8

1.3 Формируем отправку

-9

ИнтернетПрокси и ЗащищенноеСоединение - я выудил из Модуля интеграции с ИСМП. Если у вас УТ10.3 то они должны быть как стандартные.

Параметры , заголовки и тело описано выше.

1.4. Прочитать "ответ"

-10

После успешной отправки в ответ от НК придёт информация об feedID

Данную информация я записываю в специально созданный справочник.

feedID нужен чтоб проверять статус карточки , а затем её подписать после модерации.

Полный текст кода:

Процедура Кнопка2Нажатие1(Элемент)
//СоздатьКарточку API ЧЗ
Если НоменклатураТаблица.Количество() = 0 Тогда
Сообщить("Заполните таблицу");
Возврат;
ИначеЕсли НЕ ЗначениеЗаполнено(ПолеОрганизация) Тогда
Сообщить("Заполните поле Организация");
Возврат;
Иначе

// 1. КлючAPIвхода, URL запрос , htpp - параметры
КлючВхода = ПолучитьКлючВхода(ПолеОрганизация);
URLЗапроса = "/v3/feed?apikey=" + КлючВхода;
ПараметрыОтправкиHTTPЗапросов = Новый Структура;
ПараметрыОтправкиHTTPЗапросов.Вставить("ПредставлениеСервиса", НСтр("ru = 'ГИС МТ'"));
ПараметрыОтправкиHTTPЗапросов.Вставить("Сервер", "апи.национальный-каталог.рф");
ПараметрыОтправкиHTTPЗапросов.Вставить("Порт", 443);
ПараметрыОтправкиHTTPЗапросов.Вставить("Таймаут", 60);

ПараметрыОтправкиHTTPЗапросов.Вставить("ИспользоватьЗащищенноеСоединение", Истина);
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Content-Type", "application/json; charset=utf-8");
ЗаголовокHTTP.Вставить("Accept-Charset", "utf-8");
Для Каждого Строка Из НоменклатураТаблица Цикл
НоменклатураДляКарточки = Строка.Номенклатура;


//2 ПараметрыНоменклатуры в JSON (тело которое отправится в запросе)
ЗаписьJSON = Новый ЗаписьJSON();
ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(, Символы.Таб));
ЗаписьJSON.ЗаписатьНачалоОбъекта();
ЗаписьJSON.ЗаписатьИмяСвойства("tnved");
ЗаписьJSON.ЗаписатьЗначение(ПолучитьТНВЭД(НоменклатураДляКарточки));
ЗаписьJSON.ЗаписатьИмяСвойства("brand");
ЗаписьJSON.ЗаписатьЗначение(ПолучитьБренд(НоменклатураДляКарточки.ТорговаяМарка));
ЗаписьJSON.ЗаписатьИмяСвойства("moderation");
// отправка на модерацию
ЗаписьJSON.ЗаписатьЗначение("1"); // 1 - отправлять , 0 не отправлять
ЗаписьJSON.ЗаписатьИмяСвойства("good_name");
ЗаписьJSON.ЗаписатьЗначение(НоменклатураДляКарточки.Наименование);
ЗаписьJSON.ЗаписатьИмяСвойства("is_tech_gtin");
// техническая карточка
ЗаписьJSON.ЗаписатьЗначение(1); // Истна , что это техническая карточка
ЗаписьJSON.ЗаписатьИмяСвойства("good_attrs"); // Массив атрибутов
ЗаписьJSON.ЗаписатьНачалоМассива();
ЗаписатьJSON (ЗаписьJSON, ПолучитьСоответстиеАтрибутовНоменклатуры("2630", "RU"));
// страна производитель
ЗаписатьJSON (ЗаписьJSON, ПолучитьСоответстиеАтрибутовНоменклатуры("36", ОпределитьЦветТовара(НоменклатураДляКарточки.Цвет))); // цвет


ЗаписатьJSON (ЗаписьJSON, ПолучитьСоответстиеАтрибутовНоменклатуры("13914", НоменклатураДляКарточки.Артикул , "Артикул")); // артикул


ЗаписатьJSON (ЗаписьJSON, ПолучитьСоответстиеАтрибутовНоменклатуры("12", ОпределитьВидТовара(НоменклатураДляКарточки))); // ВидТовара .


ЗаписатьJSON (ЗаписьJSON, ПолучитьСоответстиеАтрибутовНоменклатуры("14013", ОпределитьЦелевойПол(НоменклатураДляКарточки))); // ЦелевойПол .


СтруктураРазмерТип = ОпределитьРазмер(НоменклатураДляКарточки);
ЗаписатьJSON (ЗаписьJSON, ПолучитьСоответстиеАтрибутовНоменклатуры("35", СтруктураРазмерТип.Размер, СтруктураРазмерТип.Тип)); // Размер .


ЗаписатьJSON (ЗаписьJSON, ПолучитьСоответстиеАтрибутовНоменклатуры("2483", ОпределитьСостав(НоменклатураДляКарточки))); // Состав .

ЗаписатьJSON (ЗаписьJSON, ПолучитьСоответстиеАтрибутовНоменклатуры("13836", "ТР ТС 017/2011 " + """" +"О безопасности продукции легкой промышленности" + """")); //

ЗаписьJSON.ЗаписатьКонецМассива();
ЗаписьJSON.ЗаписатьКонецОбъекта();
ТелоЗапросаJSON = ЗаписьJSON.Закрыть();

// 3 Отправляем карточку на проверку в каталог
HTTPЗапрос = Новый HTTPЗапрос(URLЗапроса, ЗаголовокHTTP);
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапросаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
HTTPОтвет = Неопределено;
ТекстОшибки = "";
ИнтернетПрокси = ПолучениеФайловИзИнтернета.ПолучитьПрокси("HTTPS");
ЗащищенноеСоединение = ИнтеграцияИСПовтИсп.ЗащищенноеСоединение();


Соединение = Новый HTTPСоединение(
ПараметрыОтправкиHTTPЗапросов.Сервер,
ПараметрыОтправкиHTTPЗапросов.Порт,,,
ИнтернетПрокси,
ПараметрыОтправкиHTTPЗапросов.Таймаут,
ЗащищенноеСоединение);

HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); ПрочитатьОтвет = HTTPОтвет.ПолучитьТелоКакСтроку();


// Прочитать "ответ", нет ошибки при отправке ?
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ПрочитатьОтвет);
СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Если ЗначениеЗаполнено(СтруктураОтвета.result.feed_id) Тогда
НоваяЗаписьВСправочнике = Справочники.СправочникКарточекТовара.СоздатьЭлемент();


НоваяЗаписьВСправочнике.Дата = НачалоДня(ТекущаяДата());
НоваяЗаписьВСправочнике.ФидID = СтруктураОтвета.result.feed_id;
НоваяЗаписьВСправочнике.ОрганизацияЭксплуатант = ПолеОрганизация;
НоваяЗаписьВСправочнике.Номенклатура = НоменклатураДляКарточки;
НоваяЗаписьВСправочнике.Статус = "Отправлен на модерацию";
НоваяЗаписьВСправочнике.Записать();
Иначе
Сообщить("Неудалось отправить в НК " + НоменклатураДляКарточки.Наименование);
КонецЕсли;

КонецЦикла;
КонецЕсли;

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

Функция ПолучитьСоответстиеАтрибутовНоменклатуры (id, value, value_type = Неопределено)

СоответстиеАтрибутов = Новый Соответствие;

Если value_type <> Неопределено Тогда
СоответстиеАтрибутов.Вставить("attr_value_type", value_type); // value_тип
КонецЕсли;

СоответстиеАтрибутов.Вставить("attr_value", value); // value
СоответстиеАтрибутов.Вставить("attr_id", id); // id
Возврат СоответстиеАтрибутов;

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

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

https://dzen.ru/a/Z5XraPMlFyLRMPo6