Синхронизация товаров между 1С и Wildberries: как не потерять товар при матчинге
Задача выглядит просто: есть товары в 1С, есть товары на WB — нужно их связать и синхронизировать. На практике она превращается в головоломку с тремя разными идентификаторами, меняющимся API и тем фактом, что WB понимает «артикул» иначе, чем 1С. Если ты уже потратил день на разбор ответов API и всё ещё не понимаешь, по какому полю матчить — ты не одинок, это путает всех.
Как WB идентифицирует товары
У Wildberries есть три разных понятия, которые легко перепутать:
nmId (числовой, например 296729549) — это ID номенклатуры WB, уникальный в рамках всей платформы. Назначается WB автоматически при создании карточки. Менять нельзя, исчезает при удалении карточки.
vendorCode (строковый, например MY-SKU-001) — это твой артикул, который ты сам задаёшь при создании карточки. Это единственный идентификатор, который ты контролируешь и который должен совпадать с артикулом в 1С.
barcode — штрихкод, может быть несколько на одну позицию.
Золотое правило: матчить 1С ↔ WB нужно по vendorCode. Это поле ты заполнял сам при создании карточки — оно и должно совпадать с полем «Артикул» в номенклатуре 1С.
Получение списка товаров с WB через API v3
API Wildberries v3 — актуальная версия на 2026 год. V2 устарел.
Функция ПолучитьТоварыWB(Токен)
НТТР = Новый HTTPСоединение("suppliers-api.wildberries.ru", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
Заголовки = Новый Соответствие();
Заголовки["Authorization"] = Токен;
Заголовки["Content-Type"] = "application/json";
Тело = Новый Структура();
Тело.Вставить("settings", Новый Структура(
"cursor,filter",
Новый Структура("limit", 1000),
Новый Структура("withPhoto", -1)
));
Запрос = Новый HTTPЗапрос("/content/v2/get/cards/list", Заголовки);
Запрос.УстановитьТелоИзСтроки(Формат(ЗначениеВСтрокуJSON(Тело)));
Ответ = НТТР.ОтправитьДляПолучения(Запрос);
Если Ответ.КодСостояния = 200 Тогда
Возврат ЗначениеИзСтрокиJSON(Ответ.ПолучитьТелоКакСтроку());
КонецЕсли;
Возврат Неопределено;
КонецФункции;
В ответе ищи поле vendorCode в каждой карточке — это и есть твой артикул для матчинга.
Стратегия синхронизации: три сценария
Сценарий 1: Первичная загрузка (1С → WB) Берёшь номенклатуру из 1С, создаёшь карточки на WB через POST /content/v2/cards/upload. В качестве vendorCode подставляешь артикул из 1С. После создания WB вернёт nmId — его нужно сохранить в дополнительных реквизитах номенклатуры.
Сценарий 2: Обновление остатков и цен (1С → WB) Для остатков: PUT /api/v3/stocks/{warehouseId} — принимает массив {sku, amount}. sku здесь — это barcode, не vendorCode! Нужно заранее получить маппинг barcode ↔ vendorCode. Для цен: POST /public/api/v1/prices — принимает {nmId, price, discount}.
Сценарий 3: Обратная синхронизация (WB → 1С) Продажи, возвраты, штрафы приходят через GET /api/v3/supplier/orders. В заказе есть article — это vendorCode. По нему находишь номенклатуру в 1С и создаёшь документы.
Хранение связей в 1С
Не храни nmId в коде — выноси в справочник или дополнительные реквизиты:
Справочник.НоменклатураWB:
Номенклатура (ссылка на Номенклатуру)
nmId (число)
vendorCode (строка)
Артикул_WB (строка — barcode для остатков)
ДатаПоследнейСинхронизации
Если у тебя уже есть товары на WB и ты создаёшь 1С сбоку, первый шаг — выгрузи весь каталог WB, пройди по vendorCode и сопоставь с 1С вручную или через загрузку в промежуточную таблицу.
Если что-то не сматчилось — не паникуй. WB позволяет отредактировать vendorCode через API (POST /content/v2/cards/update), но делать это надо осторожно: изменение vendorCode не меняет nmId, но может сломать существующие интеграции.
Когда матчинг налажен, дальнейшая синхронизация — это уже технические детали. Главный источник боли именно здесь, в первичной связке идентификаторов. Если проблема осталась, посмотри в сторону готовых коннекторов: «1С-Битрикс: Маркетплейс» и несколько сторонних разработок на infostart имеют рабочие реализации этой логики.
Оригинал: https://darachubarova.github.io/infostart-agent/posts/forum_forum9_wildberries-product-sync/
Перейти в каталог решений