+7 499 938 8452 пн.-пт. 10:00 – 17:00

Если в кабинете Ozon остаток не такой, как на сайте, сначала разведите сборку на сайте и ответ площадки. Модуль не подставляет одно число сразу во все склады. Каждый склад из профиля уходит отдельным запросом /v2/products/stocks.

1. «Проверить выгрузку» — это не отправка на Ozon

Кнопка считает поля локально. Массив вроде:

[STOCKS] => Array (
    [1020005020237210] => 0
    [1020005020236680] => 0
)

это DATA_MORE на сайте, не запрос в кабинет.

/v2/products/stocks вызывается только на реальном прогоне (cron, агент или «Запустить»). Если шаг оборвался раньше, нули из превью на Express и FBS не попадут.

В режиме «только остатки» в том же окне написано, что данные служебные и в прямом виде не выгружаются. Это не ошибка модуля.

Одно и то же поле каталога на оба склада в превью — нормальная настройка. Два нуля в превью не доказывают, что Ozon принял два нуля.

2. «Доступное количество» в каталоге — не то, что уходит на склад

Число в карточке товара Битрикса («доступное количество», учётный остаток, количество на складе каталога) не отправляется само. На Ozon уходит только то, что стоит в полях профиля stock_… (в превью — массив STOCKS по warehouse_id).

Типичный промах: в каталоге уже 0, а в превью профиля stock_… = 1 (другое свойство, торговые предложения, резерв, формула). Тогда в API уйдёт "stock": 1. Если карточка в архиве, Ozon отклонит плюс (PRODUCT_IS_ARCHIVED): один склад мог успеть обнулиться раньше, второй останется с 1.

Сверяйте три числа одного offer_id: поле в превью → "stock" в запросе → ответ updated. Не карточку каталога.

3. Куда смотреть: лог профиля, не кабинет и не превью

Нужен профиль остатков (формат Ozon API, режим только остатков и цен), не профиль карточек.

  1. Откройте профиль → вкладка «Лог и история».
  2. Запустите один прогон (cron, агент или «Запустить»).
  3. В логе найдите артикул / offer_id. Отказ площадки пишется без отладки: строка Ozon не принял остаток с offer_id, складом, отправленным числом и кодом (PRODUCT_IS_ARCHIVED и т.п.).
  4. Полный JSON запроса и ответа (Stocks (V2), Result for /v2/products/stocks) — только если включён «Режим отладки для данного профиля» (не глобальная отладка). После включения нажмите «Применить». После разбора галку снимите.

Пока отладка снята, полного JSON в логе не будет. Строки отказа updated=false в обычном логе есть.

4. Что значит ответ Ozon

Отказ (updated=false и код) смотрят в обычном логе. Полный JSON — после прогона с отладкой. В «Проверить выгрузку» и в кабинете Ozon этой строки нет.

Что в логеЧто это значит
"updated": trueOzon принял значение (в том числе ноль)
"updated": falseплощадка отклонила изменение; ниже будет код
склада нет в Stocks (V2)этот warehouse_id в прогоне не уходил
PRODUCT_IS_ARCHIVEDкарточка в архиве; плюсовой остаток Ozon не примет, пока карточку не вернуть
NOT_FOUNDoffer_id ещё нет в кабинете или товар не processed
лимит цен / ResourceExhaustedв прогон попали цены и упёрлись в лимит; остатки могли не дойти

5. Почему FBS уже 0, а Express ещё 1

  1. В API ушло не 0. В логе "stock": 1 (или строка «отправлено 1») — смотрите маппинг stock_…, не карточку каталога.
  2. Превью ≠ прогон. Ноль на Express появится, только если в том прогоне на этот warehouse_id ушло "stock": 0 и updated: true.
  3. Склад не в профиле. После добавления Express нажмите «Применить», появятся поля stock_….
  4. Архив / автоархив. Ноль иногда проходит, плюс — нет (PRODUCT_IS_ARCHIVED). В профиле: галка возврата из автоархива и вкладка «Диагностика».
  5. Пустой список задач при режиме «только остатки» — это норма. Задача Ozon создаётся при выгрузке карточки, не остатка.

6. Карточки, остатки и цены — разные профили

Остатки и цены лучше вести отдельным профилем. Старый cron на профиле карточек с ценами может съесть лимит daily_update и оборвать шаг до остатков. Поле offer_id во всех профилях одного кабинета должно совпадать. Остаток на склад — когда статус товара processed.

7. Чек-лист, прежде чем писать в ТП

  1. Превью: оба склада, те warehouse_id, что в кабинете; сравните stock_… с «доступным количеством» в каталоге.
  2. Один прогон профиля остатков.
  3. В обычном логе: нет строки Ozon не принял остаток — или есть код.
  4. Если нужен полный JSON: отладка профиля → «Применить» → ещё один прогон.
  5. Вкладка «Диагностика» → «Остатки FBS по складам» по этому offer_id.
  6. Версии модуля экспорта и acrit.core.

В тикет: ID профиля остатков, offer_id, фрагмент лога с отказом или с Stocks (V2) — не только скрин кабинета.

Связанные материалы: Настройка профиля выгрузки на Ozon, диагностика экспорта.


Возврат к списку

Каталог для ИИ