Управление складом
Склад решает, что клиент увидит в каталоге. Товар продаётся, только если он лежит на складе, привязанном к приложению, и свободного количества больше нуля. Оттуда же берётся цена — если склад так настроен.
Раздел собирает складскую часть платформы: сами склады и их интеграции, остатки с ценами и импортом, резервы под заказы.
Как это связано
Склад ──привязан──> Приложение ──> витрина отдаёт товар,
│ если свободный остаток > 0
├── остаток: цена, количество, наценка, скидка
└── резерв под заказ ──> уменьшает свободное количество Что должно быть готово
Склад и его привязку к приложению готовит менеджер Gigma или сотрудник в интерфейсе платформы. Это два разных права: склад заводится под create-warehouses или edit-warehouses, привязка к приложению — под edit-applications. Пошагового API-сценария для этих двух действий документация не даёт; контракты самих методов лежат на странице складов и приложений.
Проверить, что склад привязан, можно карточкой приложения: получение приложения.
Порядок работы
Когда склад заведён и привязан, наполнение идёт запросами.
- Положить товар на склад —
POST /api/inventoriesсnomenclature_id,warehouse_id,priceиquantity. Контракт — создание остатка. - Или залить пачкой —
POST /api/inventories/upload: файл накладной либо массивitems[]с реквизитами поставки. Контракт — импорт остатков. - Поправить цену или количество —
PUT /api/inventories/{id}. В отличие от складов, которые закрыты политикой и сверяют проект, остатки находятся по переданному id без такой проверки: устаревший или перепутанный id в скрипте синхронизации меняет чужую запись молча. Сверяйте id перед правкой. Контракт — обновление остатка. - Проверить витриной —
GET /api/counterparty/productsс App Token: тем же запросом, который делает сайт.
Как этот же путь выглядит со стороны магазина — в разделе «Интернет-магазин».
Страницы раздела
| Задача | Страница |
|---|---|
| Склады, их адреса и интеграции | склады |
| Цены, количества и импорт накладных | остатки и импорт |
| Блокировки количества под заказы | резервы товаров |
Правила, из-за которых товар исчезает с витрины
Выдача каталога проверяет три условия — не выполнено любое, и товара в ответе нет:
- у номенклатуры заполнен
category_id; - есть запись остатка на складе, привязанном к этому приложению;
- свободный остаток больше нуля.
Свободный остаток — это не то же самое, что складской. Из количества на складе вычитаются активные резервы, поэтому товар может лежать на полке и при этом не показываться клиенту.
Цена: со склада или из карточки
| Настройка склада | Откуда берётся цена витрины |
|---|---|
is_price_from_inventories: true | из остатка на складе, с учётом наценки |
is_price_from_inventories: false | из карточки товара — поле price номенклатуры |
Один товар на двух складах с разными настройками даст клиенту разные цены. Если цены расходятся с ожиданием, начинайте проверку с этого флага, а не с карточки товара. Значение видно в карточке склада — получение склада.
Резервы
Резерв появляется, когда клиент создаёт заказ: количество блокируется на конкретной складской позиции и перестаёт быть свободным. Дальше возможны три исхода:
- заказ исполняется — резерв остаётся связанным с заказом;
- срок вышел — фоновая задача гасит резервы с наступившим
expired_at, количество возвращается в свободное; - позицию убрали из заказа — резерв снимается вместе с ней.
Отдельного метода «снять резерв» в API нет: DELETE /api/reservations/{id} описан исторически, но маршрута для него не существует. Снимают резерв удалением позиции заказа — DELETE /api/orders/{order}/nomenclatures/{id}. Подробности — на странице резервов.
Чего в API нет
- Перемещений между складами — отдельного метода нет, количество правят на каждом складе своей записью остатка.
- Инвентаризации как процесса — есть импорт накладной и правка остатка, но не сверка с фиксацией расхождений.
- Создания резерва — резервы появляются только из заказов.