Готовые решения для 1С-Битрикс
Карточка решения
База знаний по решению:
Интеграция с Wildberries

Все часто задаваемые вопросы по решению: Интеграция с Wildberries

Типовые ситуации

Работа с крупногабаритными товарами

В данном разделе будут собраны частые вопросы по работе с крупногабаритными товарами.


1. WB ошибочно считает товар крупногабаритным

Проверка товара на крупногабаритность происходит на серверах WB, по алгоритмам WB. Со стороны решения на неё никак не повлиять

Соответственно, если вы столкнулись с тем, что WB ошибочно считает товар крупногабаритным - нужно обратиться в поддержку WB.


2. Я продаю и крупногабаритные и некрупногабаритные товары, как в этом случае работать с решением?

Ниже я опишу типовую схему работы, которую обычно используют в этих случаях. Основное правило от которого мы отталкиваемся - у ВБ часть складов принимают крупногабаритный товар, а часть не принимают. Соотвественно ВБ не даст загрузить товарный остаток крупногабаритного товара на склад, который не принимает крупногабаритные товары.

Как обычно решают эту проблему:

1. Со стороны WB создаётся два склада, один для отгрузки обычных товаров, другой для отгрузки крупногабаритных товаров.

kgt-1.png

2. Со стороны решения указываем 2 склада, у одного указываем "Только некрупногабаритный товар", у второго "Только крупногабаритный товар"

kgt-2.png

Не забываем, что для каждого из складов нужно выбрать источник остатков на вкладке каталог

2024-04-16_08-52-33.jpg

3. Крупногабаритных товаров указываем системное свойство решения "Крупногабаритный товар WB (системное)" = "Да"

kgt-3.png

4. Готово.

При таких настройках, на первый склад будут выгружаться остатки только некрупногабаритных товаров, а на второй только остатки крупногабаритных товаров (у которых установлено "Крупногабаритный товар WB" = "Да")




Списание и возврат остатков при работе с заказами

Количественный учет остатков в Битриксе включается на уровне админки - т.е. применяется к сайту вцелом, расчёты реализуются ядром битрикса.

Как следствие, все заказы с Wildberries созданные в админке будут подчиняться общим правилам количественного учёта:
1. Списание остатков товара при создании заказа
2. Возврат остатков если заказ Отменён

Из второго пункта вытекает логическая нестыковка:
- если заказ был отменён до отправки поставки, при получении статуса Отмены товар не отправляется, значит нужно вернуть количество
- если отмена произошла после сдачи поставки, при получении статуса Отмены товар не возвращается вам, а остаётся на складе WB, значит нужно не возвращать количество

Из этих вводных мы получаем на данный момент не разрешимую для автоматики задачу - механизм не может знать точно нужно вернуть остаток или нет, т.к. в API WB нет однозначного статуса принятия товара складом, по которому можно было бы делать вывод.

Текущее решение для проблемы:
Я рекомендую использовать не "Отмену заказа", а дополнительный созданный статус "Заказ отменён" для отмены заказа по статусу WB. Так вы получите в заказ статус Отмены и исключите автоматический возврат остатков. Если статус Отмена будет происходить до отправки каких либо сборочных заданий - вы всегда сможете вручную отменить заказа через базовую отмену с возвратом остатков.





Интеграция сайта с несколькими лк

Решение поддерживает интеграцию одного сайта с несколькими личными кабинетами Wildberries (количество подключаемых лк не ограничено).

По умолчанию для каждого активного сайта заведенного в админке отображается свой слот интеграции + 1 базовый слот.

Соответственно если у вас создано 2 записи сайтов в битриксе:

список сайтов

То решение будет показывать 3 слота для интеграции с тремя различными кабинетами:

слоты интеграции


Как добавить еще слоты для интеграции?


Для добавления дополнительных слотов интеграции - нужно добавить дополнительные записи сайтов в битрикс. Заполнять и настраивать их ненужно, нужна только строка сайта.

Добавить и посмотреть записи сайтов можно перейдя в Админку -> Настройки -> Настройки продукта -> Сайты -> Список сайтов

список сайтов

Для добавления сайта нажимаем добавить сайт.

В форме добавления заполняем следующие поля:
  1. ID (например w2)
  2. Название (например служебный сайт wb2)
  3. Папка сайта (например /w2 проще всего делать папку сайта похожую на ID)
  4. Сортировка (например 500)
  5. Создать почтовые шаблоны - выбираем не создавать.
  6. Шаблон сайта - выбрать шаблон и выбираем в первой строке любой шаблон
создание сайта 1

создание сайта 2

Остальные настройки можно не менять.

Нажимаем сохранить. Если всё заполнено корректно - создание пройдет успешно и отобразится еще один слот.



Добавление кнопки Купить на Wildberries

Добавить кнопку купить на Wildberries можно разместив компонент решения в нужном месте сайта (например в шаблоне карточки товара).

Код вставки компонента и описание параметров:
<?$APPLICATION->IncludeComponent( "arturgolubev:wildberries.link", "", Array( "CACHE_TIME" => "360000", "CACHE_TYPE" => "A", "ELEMENT_ID" => $elementID, // айди товара или торгового предложения "TEXT_BEFORE_BTN" => "Купить на ", "TEXT_BTN" => "Wildberries", "WB_ACCOUNT" => "", // аккаунт wb ), $component );?>

Так же можно разместить компонент на тестовой странице, настроить параметры компонента через интерфейс параметров компонентов и переместить в конечное место размещения.

Особое внимание уделите переменной $elementID - вместо неё нужно указать переменную в которой хранится айди товара или торгового предложения для которого формируется ссылка

Компонент проверяет связан ли товар с карточкой на WB и выводит кнопку только если есть связь.

Маркировка товаров

Решение поддерживает передачу маркировки товаров с сайта в Wildberries.

Передача маркировки доступна для заказов в статусе confirm (на сборке). Проще говоря отправить маркировку по заказу можно после того как он добавлен в поставку.

Передать маркировку можно двумя способами - вручную из конкретного заказа и автоматически по триггеру смены статуса.

Передача вручную для конкретного заказа


Для передачи маркировки вручную нужно открыть заказ в админке, перейти на вкладку Wildberries. Убедиться что заказ в статусе confirm (на сборке). В доступных действиях выбрать "Отправить маркировку Честный знак".

wb-mark1.png

После этого откроется окно передачи маркировки. Вводим в него код маркировки и нажимаем отправить.

wb-mark2.png

После отправки вы увидите сообщение о том что маркировка успешно отправлена. Отправленная маркировка автоматически сохранится в служебное свойство заказа "Коды маркировки".



Передача автоматически по триггеру


Для автоматической передачи маркировки мы сначала должны выбрать статус, при установке которого будет отправляться маркировка. Это можно сделать в настройках решения, на вкладке Автоматизация FBS, настройка "Отправить доп. информацию при установке статуса".

wb-mark3.png

Теперь при установке указанного статуса в заказе, решение будет проверять наличие маркировки в полях и если маркировка есть - отправлять её в WB. Для передачи маркировки заказ должен быть в статусе confirm (На сборке), тоесть к моменту установки этого статуса он должен быть добавлен в поставку. Ну и конечно же, маркировка которую нужно отправить должна быть записана в полях заказа.

Указать маркировку для передачи можно в одном из двух мест:

а) В свойстве заказа "Коды маркировки" (открываем заказ на изменение и там будет такое свойство)


wb-mark4.png


б) В стандартном интерфейсе указания маркировки битрикса, в отгрузке (это стандартное поле, что бы оно отображалось должна быть настроена работа с маркировкой в битриксе)

wb-mark5.png






Разное

Создание карточек предложений как отдельных товаров

Ситуация: 
В битриксе товар заведен как товар с торговыми предложения, но на WB нужно загрузить карточки как отдельные товары


Решение:
1) Открывает товар с торговыми предложениями
s1.jpg

2) Находим опцию "Торговые предложения выгружаются как товары в WB" и устанавливаем "Да", сохраняем.

s2.jpg

3) Переходим в инфоблок торговых предложений (если в карточке товара есть ссылка на связанные элементы как в скрине выше, быстро перейти к предложениям можно по ней). Открываем нужное торговое предложение

s3.jpg


4) Предложения данного товара теперь можно выгружать на WB как самостоятельные:  на вкладке "Выгрузка на Wildberries" будет отображена форма создания как у обычного товара.


Типовые ошибки

Типовые ошибки и методы их решения

В данной заметке будут отписаны ошибки которые вы можете увидеть в логе и необходимая реакция на их:

Общие

  1. "Ошибка (0) Ответ: " или "Ошибка (500) Ответ: Internal Server Error" - ничего делать не требуется это периодические зависания API WB

  2. "Ошибка (502) Ответ: 502 Bad Gateway" - ошибка со стороны wb, ничего делать не требуется, просто ждем следующего запроса

  3. "Ошибка (500) Ответ: dialing to the given TCP address timed out" - ошибка со стороны wb, ничего делать не требуется, просто ждем следующего запроса

  4. "Ошибка (401) Ответ: invalid token​" или "Ошибка (401) Ответ: unauthorized" - в настройках решения указан некорректный токен, зайдите в лк WB и проверьте указанный в настройках токен, либо сгенерируйте новый

  5. "Ошибка (403) Ответ: Forbidden" - такая ошибка появляется если при создании API-токена на указаны не все нужные разрешения. У токена должны быть разрешения на работу с "Маркетплейс", "Контент", "Цены и скидки"

Остатки

  1. "Не найдено. Штрихкоды: 203767034198, 203741190659" - такое сообщение появляется когда вы отдаёте на WB остаток по товару со штрихкодом, которого фактически нет в вашем личном кабинете WB. Проверяем и исправляем штрихкод (правильно ли указан на сайте) или исключаем из выгрузки проблемный товар.

    На днях WB начал чистку старых товаров поставщиков, данная ошибка может быть следствием того что WB удалил товар из вашего лк, а связанный товар на сайте остался. В этом случае нужно разорвать связь с сайтом (зайти в карточку товара в битриксе и удалить связь или отключить товар из выгрузки)

  2. "Выбранный склад не предназначен для крупногабаритных товаров" - WB считает что товар в ошибке крупногабаритный и не подходит для отгрузки на выбранный по fbs склад. Повлиять на это со стороны решения невозможно (расчеты производятся на wb, мы отдаём только шк + остаток + склад). Если товар не крупногабаритный - то нужно писать в поддержку WB для уточнения и исправления ситуации.

  3. "Указанный склад не принадлежит данному поставщику" - проверьте настройки решения, поле "ID Склада поставщика" - ошибка говорит о том, что поле заполнено не корректно, данные в поле не совпадают с ID склада в личном кабинете WB

Цены и скидки

  1. -

Сборочные задания

  1. "Сборочное задание 1291117 не загружено. Ошибка Ошибка проверки доступного количества товара `Шапка спортивная`"

    Товар который решение пытается добавить в заказ недоступен к покупке на сайте (включен количественный учет битрикса и количество = 0, битрикс не даст добавить в заказ такой товар). В этом случае нужно либо сделать товар доступным (добавить доступное количество), либо скорректировать настройки решения, установив опцию "Сборочные задания с товарами без доступного количества" = Создать заказ с безымянным товаром

Типовые ошибки создания карточки товара

В данной заметке будут отписаны ошибки которые вы можете увидеть при создании карточки товара и необходимая реакция на их:

  1. "Следующие комбинации характеристик "Артикул поставщика", "Артикул цвета" и "Бренд" уже используются" - такая проблема обычно встречается когда вы создаете на WB карточку с вариантами из товара с торговым предложением в Битриксе. Т.к. "Артикул поставщика" и "Бренд" задаются на всю карточку, обращать внимание нужно на поле "Артикул цвета" - у каждого предложения он должен быть разный!

События

Модификация заказов созданных на основе данных с WB

Внимание:
События это заложенная разработчиком возможность вносить изменения в логику решения без кастомизации (с сохранением обновлений)

Для работы с событиями необходимы базовые навыки программирования. События позволяют сделать подстройку решения под индивидуальные требования сайта, поэтому их реализация не входит в стандартную техническую поддержку решения

Для модификации заказов созданных на основе сборочных заданий с WB вы можете использовать стандартное событие OnSaleOrderBeforeSaved


Пример использования события (в заказах созданных решением проверяем наличие заполненного email'а и если он не заполнен подставляем дефолтный):
<? \Bitrix\Main\EventManager::getInstance()->addEventHandler( 'sale', 'OnSaleOrderBeforeSaved', 'onSaleOrderModifyWbData' ); function onSaleOrderModifyWbData(\Bitrix\Main\Event $event){ $order = $event->getParameter("ENTITY"); if($order) { $propertyCollection = $order->getPropertyCollection(); $propsData = array(); foreach ($propertyCollection as $propertyItem) { if (!empty($propertyItem->getField("CODE"))) { $propsData[$propertyItem->getField("CODE")] = trim($propertyItem->getValue()); } } if(intval($propsData["AWB_ORDERID"]) > 0){ foreach ($propertyCollection as $propertyItem) { switch ($propertyItem->getField("CODE")) { case 'EMAIL': if(!$propsData["EMAIL"]){ $propertyItem->setField("VALUE", "no-reply@wb.ru"); } break; } } } } } ?>




Модификация рассчёта цен и скидок

Внимание:
События это заложенная разработчиком возможность вносить изменения в логику решения без кастомизации (с сохранением обновлений)

Для работы с событиями необходимы базовые навыки программирования. События позволяют сделать подстройку решения под индивидуальные требования сайта, поэтому их реализация не входит в стандартную техническую поддержку решения

Для изменения рассчитанных решением цен вы можете использовать событие решения onAfterCalculatePrices.

AddEventHandler("arturgolubev.wildberries", "onAfterCalculatePrices", "onAfterCalculatePrices", 10); function onAfterCalculatePrices($sid, &$actualData){ // $sid - id сайта/аккаунта // $actualData - массив актуальных рассчитанных данных }
  • Добавлять значения в массив крайне не рекомендуется.
  • Учитывать режим изменений и итерации выгрузки не нужно - решение сделает это самостоятельно.
  • Ключи массива $actualData в будущем могут измениться (если этого будет требовать дальнейшее улучшение функционала или смена api wb).
  • Не создавайте "тяжелых" обработчиков - если у вас тяжелая логика лучше её реализовать на событии изменения элемента, записать результат в свойство, свойство выбрать источником (это будет гораздо производительнее).


Модификация рассчёта остатков

Внимание:
События это заложенная разработчиком возможность вносить изменения в логику решения без кастомизации (с сохранением обновлений)

Для работы с событиями необходимы базовые навыки программирования. События позволяют сделать подстройку решения под индивидуальные требования сайта, поэтому их реализация не входит в стандартную техническую поддержку решения

Для изменения рассчитанных решением скидок вы можете использовать событие решения onAfterCalculateStocks.

AddEventHandler("arturgolubev.wildberries", "onAfterCalculateStocks", "onAfterCalculateStocks", 10); function onAfterCalculateStocks($sid, &$actualData){ // $sid - id сайта/аккаунта // $actualData - массив актуальных рассчитанных данных }
  • Добавлять значения в массив крайне не рекомендуется.
  • Учитывать режим изменений и итерации выгрузки не нужно - решение сделает это самостоятельно.
  • Ключи массива $actualData в будущем могут измениться (если этого будет требовать дальнейшее улучшение функционала или смена api wb).
  • Не создавайте "тяжелых" обработчиков - если у вас тяжелая логика лучше её реализовать на событии изменения элемента, записать результат в свойство, свойство выбрать источником (это будет гораздо производительнее).


Применение шаблона создания карточки

Внимание:
События это заложенная разработчиком возможность вносить изменения в логику решения без кастомизации (с сохранением обновлений)

Для работы с событиями необходимы базовые навыки программирования. События позволяют сделать подстройку решения под индивидуальные требования сайта, поэтому их реализация не входит в стандартную техническую поддержку решения
Событие onGetTemplateValues позволяет модифицировать данные при применении шаблона создания карточки товара.

Простой пример применения - вы создали шаблон для предмета, в качестве источника веса указали поле "Вес" торгового каталога. Но в поле вес хранится вес товара без упаковки и вы хотите что бы при подстановке шаблона указывался модифицированный вес с упаковкой (+300г). Это можно реализовать через данное событие.


Пример использования события:
<? AddEventHandler('arturgolubev.wildberries', "onGetTemplateValues", "wb_onGetTemplateValues"); function wb_onGetTemplateValues($options, &$arFields){ // echo '<pre>'; print_r($options); echo '</pre>'; // echo '<pre>'; print_r($arFields); echo '</pre>'; if($arFields["FIELD_CATALOG_WEIGHT"] > 0){ $arFields["FIELD_CATALOG_WEIGHT"] = $arFields["FIELD_CATALOG_WEIGHT"] + 300; } } ?>




Для разработчиков

Системные поля решения

Решение создаёт системные свойства для инфоблоков, участвующих в выгрузке данных на WB. У всех полей созданных решением после версии 3.4.0 добавляется пометка "(системное)". Все поля создаваемые решением можно переименовывать

Опциональные поля:

Использование данных полей не обязательно, создаются для удобства. Если данные поля не планируется использовать можно их деактивировать
  • Выгружать в WB (ранее называлось Экспортировать в WB)
  • Баркод WB (ранее называлось Штрихкод WB)
  • Артикул товара WB
Системные поля:

Данные поля используются решением для связи карточек или в процессах работы решения. Деактивировать или отключать такие поля нельзя
  • Торговые предложения самостоятельные товары в WB
  • ID карточки WB
  • Номенклатура WB (ранее называлось Артикул WB)
  • Код размера WB
  • Скидка для WB
  • Спецификации WB

Какие идентификаторы используются для выгрузок?


Все связи и выгрузки в WB происходят по идентификаторам WB. В разных ситуациях идентификация происходит по разному

1. Работа с остатками: Баркод (выбранный в настройках решения) + ID Склада поставщика (введенный в настройках решения)
2. Работа с ценами: Номенклатура WB (системное поле)
3. Работа со сборочными заданиями: Баркод (выбранный в настройках решения) + Код размера WB (системное поле)
4. Обновление карточек товара: Баркод + Номенклатура WB + Код размера WB + ID карточки WB

Где посмотреть системные идентификаторы на WB?


Все эти данные можно посмотреть в отчёте 8 - Отчет с перечнем номенклатур