Резервирование товара - момент резерва, снятие, доступное количество
Разбираемся, когда товар уходит в резерв, сколько его на самом деле доступно к продаже и почему резерв иногда живёт своей жизнью.
Решение
Смотрим остаток и резерв товара:
$row = \Bitrix\Catalog\ProductTable::getList([ 'select' => ['ID', 'QUANTITY', 'QUANTITY_RESERVED', 'QUANTITY_TRACE', 'CAN_BUY_ZERO'], 'filter' => ['=ID' => $productId],])->fetch();$available = $row['QUANTITY'] - $row['QUANTITY_RESERVED']; // вот это и продаётсяОстаток и резерв - два разных числа у одного товара. Доступным к продаже считается их разность, и именно её показывают покупателю, а не общий остаток со склада.
Выбираем момент резервирования:
- при оформлении заказа: товар держат сразу, но брошенные заказы держат его зря- при оплате: витрина честнее, но между оформлением и оплатой товар могут купить- срок резервирования задаётся настройкой модуля каталога, в дняхМомент резерва - это выбор между двумя неприятностями. Резерв при оформлении копит мёртвые заказы, резерв при оплате допускает продажу одного товара дважды, и магазин выбирает то, что дешевле именно ему.
Снимаем резерв у отменённых заказов:
$order = \Bitrix\Sale\Order::load($orderId);$shipmentCollection = $order->getShipmentCollection();foreach ($shipmentCollection as $shipment) { $shipment->tryUnreserve(); // возвращаем товар в продажу}$order->save();Отменённый заказ обязан вернуть товар в продажу. Иначе через месяц каталог показывает нули там, где на складе полно товара, а причина расходится по сотне старых заказов.
Сверяем резерв после обмена:
// выгрузка остатков из учётной системы пишет общее количество// если она пишет ещё и резерв, локальные резервы сайта затираютсяprintf("%s: остаток %s, резерв %s\n", $row['ID'], $row['QUANTITY'], $row['QUANTITY_RESERVED']);// расхождение стоит проверять регулярным отчётом, а не по жалобеОбмен приносит остаток, а резерв живёт на сайте. Выгрузка, которая заодно переписывает поле резерва, стирает заказы, оформленные за последние часы, и это обнаруживается не сразу.
Резервирование включают вместе с решением о том, что делать при нехватке товара. Возможность купить при нулевом остатке и резерв - настройки соседние, а результат у них противоположный.
Резерв по складам поддерживается не во всех версиях платформы. Прежде чем обещать магазину «резерв на конкретном складе», это стоит проверить именно на его версии.
Ежедневный отчёт о расхождении остатка и резерва дешевле разбирательства с покупателем. Товар, который нельзя купить при полном складе, обычно замечают позже, чем хотелось бы.
Правила резервирования стоит проговорить с магазином словами, а не выводить из настроек задним числом. Вопрос «через сколько дней неоплаченный заказ отпускает товар» имеет ответ у бизнеса, а не у разработчика.
Типичные проблемы
Товар в наличии, но купить его нельзя.
Весь остаток занят резервом старых заказов. Резерв снимают при отмене и по истечении срока.
Один и тот же товар продан дважды.
Резерв ставится только при оплате, а между оформлением и оплатой прошло время. Момент резервирования выбирают осознанно.
После обмена резерв обнулился.
Выгрузка из учётной системы переписала поле резерва вместе с остатком. Резерв сайта в обмене не участвует.
Витрина показывает больше, чем можно купить.
В карточке выводится общий остаток без вычета резерва. Покупателю показывают доступное количество.
Резерв не ставится вовсе.
Резервирование выключено в настройках модуля каталога. Настройку проверяют до разбора кода.
Частые вопросы
Когда резервировать: при оформлении или при оплате?
При оформлении - для дорогих и редких товаров, при оплате - для ходовых. Универсального ответа нет.
Что показывать в карточке товара?
Доступное количество, то есть остаток за вычетом резерва. Общий остаток покупателю ни о чём не говорит.
Как чистить старые резервы?
Сроком резервирования в настройках и разбором отменённых заказов. Оба способа нужны вместе.
Работает ли резерв по складам?
Зависит от версии платформы и настроек учёта. Проверять нужно на своей версии, а не по описанию.
Смежное
- Склады и остатки - оглавление подтемы
- Складские документы: приход, списание, перемещение, резерв - каким документом снимают резерв
- Склады и остатки: выгрузка, вывод наличия, фильтр по складу - откуда берутся сами остатки
- Остатки из 1С: сопоставление складов и приём количества - что приносит обмен
- Подписка на поступление товара: уведомление о наличии - что делать при нуле
- Каталог и продажи - устройство магазина целиком
- Товары на торговой площадке: фид, остатки, заказы обратно - второй канал продаж на том же складе