Задача: Задача кратко если изложить то поставлена так:
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 - параметры"
Тут всё проста URL: /v3/feed?apikey= (в конце дописываем к "apikey" ваш ключ).
Сервер "апи.национальный-каталог.рф"
КлючВхода = это ключ доступа "API key" примерно такого формата "9r8eilxdfb9xbcy8" берётся в личном кабинете НК.
Я получаю его функцией "ПолучитьКлючВхода(ПолеОрганизация)" поскольку у меня несколько организаций, возвратом функции идёт требуемый APIKey.
Всё это нужно чтоб в дальнейшем сформировать и отправить HTTPЗапрос в НК.
1.2 Теперь формируем тело нашего будущего запроса, тело запишем в JSON
Согласно п.3.2.2. (Метод «Создать или отредактировать карточку») из "API "Национального каталога" есть обязательные параметры для легкой промышленности они такие:
"tnved" ТНВЭД (значения строка, должнобыть в перечне НК)
"brand" брэнд (значение строка, любое как в вашей карточке "Конте", "Купалинка" "Золотая чаша" и тд..)
"moderation" отправлять на модерацию ( 1 - отправлять)
"good_name" наименование товара (значение строка, любое )
"is_tech_gtin" указание того что это техническая карточка (как раз на остаточки товаров)
Дальше запишем сюда же массив "good_attrs".
В массив записываю с помощью "ЗаписатьJSON(Запись, Значение)"
В "значение" передаю структуру , которую формирую отдельной функцией.
"good_attrs" это массив обязательных атрибутов
Атрибуты имеют свой ID и описываются так:
"attr_id" атрибут ID
"attr_value" значение атрибута по ID
"attr_value_type" дополнительное значение описывающего тип атрибута
attr_id берётся по ещё одной методичке от НК
Ссылка на PDF
Обязательными 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 своими методами.
В результате тело запроса будет примерно таким:
1.3 Формируем отправку
ИнтернетПрокси и ЗащищенноеСоединение - я выудил из Модуля интеграции с ИСМП. Если у вас УТ10.3 то они должны быть как стандартные.
Параметры , заголовки и тело описано выше.
1.4. Прочитать "ответ"
После успешной отправки в ответ от НК придёт информация об 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