Резервирование — это удержание количества товара под конкретный заказ, чтобы он не был продан дважды. В 1С-Битрикс резерв тесно связан с количественным учётом и жизненным циклом заказа, поэтому важно настроить не только «когда резервировать», но и «когда снимать резерв».
Что такое резерв и зачем он нужен
Когда покупатель оформляет заказ, физически товар ещё лежит на складе, но продать его повторно нельзя. Механизм резервирования вычитает нужное количество из доступного остатка, не трогая физический. В карточке товара при включённом складском учёте это видно как три величины: количество на складе, зарезервировано и доступно для покупки.
Формула проста: доступно = на складе − в резерве. Именно доступный остаток управляет кнопкой «Купить» и статусом наличия в каталоге. Без резерва при высоком трафике легко получить овербукинг: несколько человек оформят один и тот же последний экземпляр.
Где включается резервирование
Основные настройки лежат в Магазин → Настройки → Настройки модуля (модуль sale), вкладка «Резервирование». Ключевые параметры:
- Резервировать товары при оформлении заказа — глобальный переключатель автоматического резерва;
- Резервировать по статусу заказа — резерв ставится не сразу, а при переходе в выбранный статус (например, «Принят» или «Оплачен»);
- Отменять резерв по истечении срока — автоматическое снятие резерва через N дней;
- Срок резервирования по умолчанию — число дней, на которое удерживается товар.
Дополнительно у каждого типа плательщика/способа оплаты и в свойствах отдельного товара можно переопределить поведение. На уровне торгового каталога проверьте, что для товара включён CAN_BUY_ZERO согласованно с политикой резерва — иначе доступный остаток и возможность покупки разойдутся.
Автоматический и ручной резерв
Битрикс поддерживает два сценария, и они не исключают друг друга.
| Сценарий | Когда срабатывает | Кому подходит |
|---|---|---|
| Автоматический | При оформлении заказа или при заданном статусе | Розница, высокая частота заказов, минимум ручной работы |
| Ручной | Менеджер ставит резерв в детали заказа | B2B, предоплата, длинный цикл согласования |
В карточке заказа (Магазин → Заказы) на вкладке товаров есть колонка «Резерв» с флагом и полем количества. Менеджер может зарезервировать частично — например, только оплаченную позицию из мультизаказа. Для B2B ручной режим обычно надёжнее: резерв ставится после подтверждения оплаты, а не по факту клика.
Снятие резерва и таймауты
Самая частая проблема — «залипшие» резервы: заказы брошены, а товар удерживается и пропадает из наличия. Резерв в Битрикс снимается в нескольких случаях:
- заказ отменён (флаг
CANCELED = Y); - заказ переведён в статус, при котором товар списан со склада (отгрузка);
- истёк срок резервирования и включена опция автоотмены;
- резерв снят вручную в карточке заказа.
За автоснятие по таймауту отвечает агент CSaleOrder::OnEcommerceReservation (агентская задача модуля sale). Проверьте, что агенты и cron реально отрабатывают: в Настройки → Настройки продукта → Агенты у задачи должна обновляться дата следующего запуска.
Резерв, отгрузка и списание остатков
Важно различать резерв и отгрузку. Резерв удерживает количество, но не меняет физический остаток. Отгрузка (деление заказа на отгрузки, флаг DEDUCTED = Y) уже списывает товар со склада. При корректной настройке порядок такой: заказ → резерв → оплата → отгрузка (списание и снятие резерва).
Если у вас несколько складов, резерв в свежих версиях модуля привязан к конкретному складу отгрузки. Следите, чтобы правило выбора склада (по региону, по наличию) было однозначным — иначе система зарезервирует товар не на том складе, с которого реально поедет отправка. Логику отгрузок настраивают в разделе Магазин → Настройки → Склады и в свойствах способа доставки.
Резерв при обмене с 1С
Если остатки приходят из 1С, резерв становится точкой конфликта. По протоколу CommerceML 1С может выгружать как свободный остаток, так и остаток с учётом резерва — и если обе стороны считают резерв, товар «спишется дважды».
Рекомендация: определите одного владельца резерва. Обычно это так:
- Резерв ведёт 1С — сайт получает уже свободный остаток и своё резервирование отключает, чтобы не задваивать;
- Резерв ведёт сайт — 1С отдаёт полный физический остаток, а Битрикс сам вычитает свой резерв.
В настройках обмена (Магазин → Настройки → Торговый каталог и профиль обмена) проверьте, какое поле количества принимается и не перетирает ли выгрузка поле резерва. Ошибки здесь дают классический симптом: «минусовые остатки» и товары, которые то появляются, то исчезают из каталога после каждого обмена.
Как проверить, что резерв работает
Быстрый чек-лист для приёмки настройки:
- оформите тестовый заказ и убедитесь, что в карточке товара выросло поле «Зарезервировано»;
- отмените заказ — резерв должен обнулиться сразу;
- оставьте заказ висеть дольше срока резервирования и проверьте автоснятие на следующий день;
- сверьте доступный остаток в каталоге с формулой «на складе минус резерв»;
- после обмена с 1С убедитесь, что резерв не задвоился.
Для диагностики полезны таблицы b_catalog_product (поля QUANTITY и QUANTITY_RESERVED) и b_sale_basket (RESERVED, RESERVE_QUANTITY). Если цифры в БД и в интерфейсе расходятся — почти всегда виноват незапущенный агент или конфликт обмена.
Итог
Резервирование в 1С-Битрикс — это связка из трёх решений: когда ставить резерв (при оформлении или по статусу), когда его снимать (таймаут, отмена, отгрузка) и кто владеет резервом при обмене с 1С. Настроенные по отдельности, эти пункты дают овербукинг или залипшие остатки; согласованные — стабильный доступный остаток и честную кнопку «Купить».
Если магазин обменивается остатками с 1С или растёт нагрузка на каталог, мы помогаем выстроить резерв без пересортицы: настраиваем правила, переносим агенты на cron и разводим ответственность между сайтом и учётной системой. Наши команды занимаются интеграцией 1С и поддержкой магазинов на Битрикс под ключ.
Частые вопросы
Резерв уменьшает физический остаток товара?
Нет. Резерв удерживает количество и уменьшает только доступный остаток. Физический остаток на складе меняется при отгрузке (списании).
Почему резервы не снимаются по истечении срока?
Чаще всего не отрабатывает агент автоснятия. Проверьте, что агенты модуля sale запускаются по cron, а не «на хите», и что включена опция отмены резерва по сроку.
Можно ли резервировать товар только после оплаты?
Да. В настройках модуля выберите резервирование по статусу заказа и укажите статус «Оплачен». Тогда резерв поставится не при оформлении, а после поступления оплаты.
Как избежать двойного списания при обмене с 1С?
Назначьте одного владельца резерва. Либо резерв ведёт 1С и сайт его отключает, либо резерв ведёт Битрикс, а 1С отдаёт полный физический остаток.
Работает ли резерв без количественного учёта?
Нет. Резервирование применяется только к товарам с включённым количественным учётом. Без него количество считается неограниченным и резерв игнорируется.
Можно ли зарезервировать часть позиций заказа?
Да. В карточке заказа резерв ставится по каждой строке отдельно, поэтому можно удержать только оплаченные или подтверждённые позиции.
Как резерв связан с несколькими складами?
В актуальных версиях модуля резерв привязывается к складу отгрузки. Важно, чтобы правило выбора склада было однозначным, иначе товар зарезервируется не на том складе.
Где в базе данных хранится величина резерва?
Резерв товара хранится в поле QUANTITY_RESERVED таблицы b_catalog_product, а по строкам корзины — в полях RESERVED и RESERVE_QUANTITY таблицы b_sale_basket.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.