Настройка резервирования товара в конкретном магазине 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка резервирования товара в конкретном магазине 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1181
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    813
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка резервирования товара в конкретном магазине 1С-Битрикс

Резервирование позволяет покупателю зафиксировать товар в выбранном магазине до момента оплаты или визита. Остаток уменьшается виртуально — другие покупатели видят сниженное количество, хотя физически товар ещё на полке. Это отдельная задача от BOPIS: можно резервировать без последующего онлайн-заказа, просто «отложить» для визита.

Модель резервирования в Битрикс

Битрикс имеет встроенный механизм резервирования через таблицу b_catalog_store_product_reserve. Поля:

  • STORE_ID — ID склада из b_catalog_store
  • PRODUCT_ID — ID товара
  • AMOUNT — зарезервированное количество
  • ORDER_ID — привязка к заказу (если резерв от заказа)
  • DATE_RESERVE — дата создания резерва
  • DATE_RESERVE_END — срок действия резерва

Доступное количество = b_catalog_store_product.AMOUNTSUM(b_catalog_store_product_reserve.AMOUNT) для данного склада и товара.

Создание резерва через API

CModule::IncludeModule('catalog');

$result = CCatalogStoreProductReserve::Add([
    'STORE_ID'         => $storeId,
    'PRODUCT_ID'       => $productId,
    'AMOUNT'           => $quantity,
    'DATE_RESERVE'     => new CDBDateTime(),
    'DATE_RESERVE_END' => new CDBDateTime(time() + 86400 * 3), // 3 дня
]);

При снятии резерва (истёк срок, покупатель отменил) вызывается CCatalogStoreProductReserve::Delete($reserveId).

Форма резервирования на сайте

На карточке товара размещается кнопка «Зарезервировать в магазине». Форма содержит:

  • Выбор магазина из списка с актуальными остатками
  • Количество (с проверкой доступного остатка)
  • Контактные данные (имя, телефон) для уведомления
  • Срок резервирования (обычно 24–48 часов)

Запрос доступного остатка для конкретного склада:

$available = CCatalogStoreProduct::GetList(
    [],
    ['STORE_ID' => $storeId, 'PRODUCT_ID' => $productId],
    false, false,
    ['AMOUNT']
)->Fetch()['AMOUNT'];

$reserved = array_sum(array_column(
    CCatalogStoreProductReserve::GetList(
        [], ['STORE_ID' => $storeId, 'PRODUCT_ID' => $productId]
    )->fetchAll(), 'AMOUNT'
));

$canReserve = $available - $reserved;

Уведомления по жизненному циклу резерва

Событие Кому Канал
Резерв создан Покупатель SMS + email
Резерв создан Менеджер магазина email
Резерв истекает через 2 часа Покупатель SMS
Резерв снят (истёк) Менеджер системное уведомление

Напоминания реализуются через агент, который раз в 30 минут проверяет DATE_RESERVE_END и отправляет уведомления через CEvent::Send() или SMS-шлюз.

Автоматическое снятие резерва

Агент для освобождения истёкших резервов:

$expiredReserves = CCatalogStoreProductReserve::GetList(
    [],
    ['<DATE_RESERVE_END' => date('Y-m-d H:i:s')]
);
while ($reserve = $expiredReserves->Fetch()) {
    CCatalogStoreProductReserve::Delete($reserve['ID']);
    // Уведомить менеджера
}

Административный интерфейс

Менеджер магазина должен видеть список активных резервов своего склада: товар, количество, контакт покупателя, срок. Интерфейс строится на основе AdminListTable или как отдельная страница в разделе «Склады».

Что входит в настройку

  • Форма резервирования с выбором магазина и проверкой остатков
  • Создание резерва через CCatalogStoreProductReserve::Add()
  • Агент для автоматического снятия истёкших резервов
  • Уведомления покупателю и менеджеру через SMS и email
  • Административный интерфейс управления резервами для сотрудников