Обработка для изменения наименования номенклатуры на сайте WB посредством API.
Полноценно рабочая, но с минимальным функционалом.
Как пользоваться: На форме необходимо выбрать Организацию и нажать на кнопку "Получить значения", обработка запросит список номенклатуры из вашего магазина и заполнит таблицу на форме для дальнейшей работы.
Также во вкладке Настройки есть возможность выбрать конкретную номенклатуру по его Артикулу в маркетплейсе.
Поля "Ограничение списка" нужны для того, чтобы выбрать определенное количество товаров (если их много), пропустив (если необходимо) указанное количество.
Очередность товаров в данном списке на усмотрение Маркетплейса.
После заполнения таблицы и для активации кнопки "Применить значение" необходимо заполнить одно из полей колонки "Новое наименование".
После нажатия "Применить значение" наименование на маркетплейсе изменяется на указанное. Обновление на сайте происходит до 30 минут, в зависимости от количества SKU. В среднем 10 минут.
Обработка не привязана к конфигурации и не имеет ограничений по платформе.
Тестировалась на платформе 8.3.18, в конфигурациях УТ11.4.13 и Бухгалтерия 3.0.108
Для полноценной работы необходимо в справочнике Организации добавить дополнительный реквизит, строка, с именем "WB_ApiKey". А также в хараrтеристике реквизит "КодВБ" (по желанию можно переписать откуда брать "nmID" - код обработки открыт)
Затем вставить туда API ключ, который можно получить в личном кабинете WB.
Руководство по получению API можно найти в сети. Как вариант по ссылке //infostart.ru/public/1581395/
Если скачивать обработку нет желания, вот основные функции:
1. Получение данных:
Соединение = Новый HTTPСоединение("suppliers-api.wildberries.ru",,,,,5, Новый ЗащищенноеСоединениеOpenSSL());
//Заполняем заголовки
HTTPЗапросЗаголовки = Новый Соответствие();
HTTPЗапросЗаголовки.Вставить("accept", "application/json");
HTTPЗапросЗаголовки.Вставить("Authorization", APIKey);
HTTPЗапросЗаголовки.Вставить("Content-Type", "application/json");
Запрос = Новый HTTPЗапрос("/card/list", HTTPЗапросЗаголовки);
СериализованнаяСтрока = СобратьЗапросКарточек(КоличествоSKU,ПропуститьSKU,КодSKU);
Запрос.УстановитьТелоИзСтроки(СериализованнаяСтрока);
HTTPОтвет = Соединение.ОтправитьДляОбработки(Запрос);
Ответ = HTTPОтвет.ПолучитьТелоКакСтроку();
Если HTTPОтвет.КодСостояния = 200 Тогда
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.УстановитьСтроку(Ответ);
Стрктурра = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
НомерСтроки = 0;
Для каждого стр из Стрктурра.result.cards Цикл
НомерСтроки = НомерСтроки+1;
СтрокаТЗ = Объект.ТЗ.Добавить();
Для каждого стр_nomenclatures из стр.nomenclatures Цикл
СтрокаТЗ.imtId = УбратьВсеПробелы(стр_nomenclatures.nmId);
КонецЦикла;
СтрокаТЗ.Наименование = "";
Для каждого стр_type из стр.addin Цикл
Если ВРЕГ(стр_type.type) = ВРЕГ("Наименование") Тогда
Если стр_type.params.Количество()>0 Тогда
СтрокаТЗ.Наименование = стр_type.params[0].value;
КонецЕсли;
КонецЕсли;
КонецЦикла;
СтрокаТЗ.НаименованиеНовое = "";
СтрокаТЗ.ИдентификаторСтроки = НомерСтроки;
СтрокаТЗ.Номенклатура1С = ПолучитьНоменклатуруПоID(СтрокаТЗ.imtId);
СтрокаТаблицаJSONОбъектов = ЭтаФорма.ТаблицаJSONОбъектов.Добавить();
СтрокаТаблицаJSONОбъектов.ИдентификаторСтроки = НомерСтроки;
СтрокаТаблицаJSONОбъектов.СтрокаJSON = стр;
КонецЦикла;
Иначе
Сообщить("NOPE, обратитесь к Программисту 1С");
КонецЕсли;
2. Применить значения.
Соединение = Новый HTTPСоединение("suppliers-api.wildberries.ru",,,,,5, Новый ЗащищенноеСоединениеOpenSSL());
//Заполняем заголовки
HTTPЗапросЗаголовки = Новый Соответствие();
HTTPЗапросЗаголовки.Вставить("accept", "application/json");
HTTPЗапросЗаголовки.Вставить("Authorization", APIKey);
HTTPЗапросЗаголовки.Вставить("Content-Type", "application/json");
Запрос = Новый HTTPЗапрос("/card/update", HTTPЗапросЗаголовки);
СериализованнаяСтрока = СобратьЗапросОбновленияКарточки(стр.ИдентификаторСтроки,стр.НаименованиеНовое);
Запрос.УстановитьТелоИзСтроки(СериализованнаяСтрока);
HTTPОтвет = Соединение.ОтправитьДляОбработки(Запрос);
Ответ = HTTPОтвет.ПолучитьТелоКакСтроку();
Если HTTPОтвет.КодСостояния = 200 Тогда
Сообщить("Наименование для номенклатуры с Артикулом WB "+стр.imtID+" удачно изменено на: "+стр.НаименованиеНовое);
Иначе
Сообщить("Ошибка измнения наименования ("+стр.imtID+") :"+стр.НаименованиеНовое);
Сообщить("Код ответа: "+Ответ.КодСостояния); //анализируем код состояния и делаем выводы
КонецЕсли;
3. Сбор Запросов
Функция СобратьЗапросКарточек(Лимит=0,ОФсет=0,КодSKU=Неопределено)
Если Лимит>100 Тогда Лимит=100 КонецЕсли;
СтруктураЗ = Новый Структура;
СтруктураЗ.Вставить("id",1);
СтруктураЗ.Вставить("jsonrpc","2.0");
СтрПарам = Новый Структура;//Params
СтрФильтра = Новый Структура;
Если ЗначениеЗаполнено(КодSKU) И СокрЛП(КодSKU)<>"" Тогда
СтрФинд = Новый Структура;
СтрФинд.Вставить("column","nomenclatures.nmId");
МассивСКУ = Новый Массив();
МассивСКУ.Добавить(Число(КодSKU));
СтрФинд.Вставить("search", МассивСКУ);
МассивФинд = Новый Массив;
МассивФинд.Добавить(СтрФинд);
СтрФильтра.Вставить("find",МассивФинд);
КонецЕсли;
// СтрФильтра.Вставить("order",СтрОрдер);
СтрПарам.Вставить("filter",СтрФильтра);
СтрЗапроса = Новый Структура;
Если КоличествоSKU<>0 Тогда
СтрЗапроса.Вставить("limit",Лимит);//max 100
КонецЕсли;
Если ПропуститьSKU<>0 Тогда
СтрЗапроса.Вставить("offset",ОФсет);
КонецЕсли;
СтрПарам.Вставить("query",СтрЗапроса);
// СтрПарам.Вставить("isArchive", ЛОЖЬ);
// СтрПарам.Вставить("supplierID",Объект.supplierID);
// СтрПарам.Вставить("withError", ЛОЖЬ);
СтруктураЗ.Вставить("params",СтрПарам);
НастройкиСериализацииJSON = Новый НастройкиСериализацииJSON;
НастройкиСериализацииJSON.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.ЛокальнаяДата;
НастройкиСериализацииJSON.ФорматСериализацииДаты = ФорматДатыJSON.ISO;
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, СтруктураЗ, НастройкиСериализацииJSON);
Результат = ЗаписьJSON.Закрыть();
Возврат Результат;
КонецФункции
Функция СобратьЗапросОбновленияКарточки(Идентификатор, НовоеНаименование)
НайденнаяСтрока = ЭтаФорма.ТаблицаJSONОбъектов.НайтиСтроки(Новый Структура("ИдентификаторСтроки",Идентификатор));
Если НайденнаяСтрока.Количество() > 0 Тогда
ПрежняяСтруктура = НайденнаяСтрока[0].СтрокаJSON;
Иначе
Возврат Неопределено;
КонецЕсли;
//Меняем наименование
Для каждого стр_type из ПрежняяСтруктура.addin Цикл
Если ВРЕГ(стр_type.type) = ВРЕГ("Наименование") Тогда
Если стр_type.params.Количество()>0 Тогда
стр_type.params[0].value = НовоеНаименование;
КонецЕсли;
КонецЕсли;
КонецЦикла;
//Модификация для выгрузки
ПрежняяСтруктура.Вставить("uploadID", "");
ПрежняяСтруктура.Удалить("batchID");
//Меняем дату модификации
ПрежняяСтруктура.updatedAt = ТекущаяДата()+60;
СтруктураЗ = Новый Структура;
СтруктураЗ.Вставить("id",1);
СтруктураЗ.Вставить("jsonrpc","2.0");
СтрПарам = Новый Структура;//Params
СтрПарам.Вставить("card",ПрежняяСтруктура);
СтрПарам.Вставить("supplierID",ПрежняяСтруктура.supplierID);
СтруктураЗ.Вставить("params",СтрПарам);
НастройкиСериализацииJSON = Новый НастройкиСериализацииJSON;
НастройкиСериализацииJSON.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.УниверсальнаяДата;
НастройкиСериализацииJSON.ФорматСериализацииДаты = ФорматДатыJSON.ISO;
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, СтруктураЗ, НастройкиСериализацииJSON);
Результат = ЗаписьJSON.Закрыть();
Возврат Результат;
КонецФункции