Назад

Управление продажей товаров при нулевом остатке в Битрикс

Главная
Блог
Управление продажей товаров при нулевом остатке в Битрикс

В системе управления сайтом «1С-Битрикс» одним из ключевых параметров товара является настройка, разрешающая или запрещающая его покупку при отсутствии остатков на складе. Это поведение контролируется свойством CAN_BUY_ZERO.

  • CAN_BUY_ZERO = 'Y' — Разрешить покупку, даже если товара нет в наличии.

  • CAN_BUY_ZERO = 'N' — Запретить покупку при нулевом остатке.

Бывают ситуации, когда необходимо массово изменить это поведение для целой группы товаров или быстро поправить один конкретный товар. С помощью API каталога Битрикс это можно легко автоматизировать.

Пример 1: Массовое изменение для группы товаров

Допустим, у вас есть инфоблок с ID = 10, и для всех товаров в нем нужно разрешить покупку при отсутствии. Следующий скрипт найдет все товары в указанном инфоблоке, у которых сейчас запрещена покупка при нулевом остатке (CAN_BUY_ZERO_ORIG = 'N'), и изменит этот флаг.

<?php
// Подключаем модуль "Торговый каталог"
CModule::IncludeModule("catalog");

// Получаем список товаров из инфоблока с ID=10, у которых запрещена покупка при нуле
$iterator = CCatalogProduct::GetList(
    array('ID' => 'ASC'), // Сортировка по ID по возрастанию
    array(
        'ELEMENT_IBLOCK_ID' => 10, // ID вашего инфоблока
        'CAN_BUY_ZERO_ORIG' => 'N' // Ищем товары, у которых сейчас стоит "Запретить"
    ),
    false,
    false,
    array('ID', 'QUANTITY', 'QUANTITY_TRACE_ORIG') // Выбираем необходимые поля
);

// Обрабатываем каждый найденный товар
while ($row = $iterator->Fetch()) {
    // Обновляем товар, устанавливая разрешение на покупку
    CCatalogProduct::Update($row['ID'], array(
       'QUANTITY' => $row['QUANTITY'], // Важно передать текущее количество, чтобы не обнулить его
       'QUANTITY_TRACE' => $row['QUANTITY_TRACE_ORIG'], // Сохраняем исходное значение отслеживания остатков
       'CAN_BUY_ZERO' => 'Y' // Устанавливаем флаг "Разрешить"
    ));
    // Для наглядности выведем ID обработанного товара
    echo "Обработан товар с ID: " . $row['ID'] . "<br>";
}
?>

Что важно в этом коде:

  • Мы передаем в update не только CAN_BUY_ZERO, но и текущие QUANTITY и QUANTITY_TRACE. Это предотвращает случайное изменение этих важных параметров.

  • Условие CAN_BUY_ZERO_ORIG = 'N' в выборке позволяет применить скрипт только к нужным товарам, не затрагивая те, у которых уже стоит правильное значение.

Пример 2: Быстрое изменение для одного товара через командную строку

Если вам нужно срочно поправить один товар (например, после звонка клиента), это можно сделать в несколько строк. Например, для товара с ID = 123.

<?php
// Подключаем модуль
CModule::IncludeModule("catalog");

// ID товара, который нужно изменить
$PRODUCT_ID = 123;

// Обновляем только один параметр товара
CCatalogProduct::Update($PRODUCT_ID, array('CAN_BUY_ZERO' => 'Y'));

echo "Для товара ID={$PRODUCT_ID} установлена возможность покупки при нулевом остатке.";
?>

Этот скрипт можно выполнить в отдельном PHP-файле, размещенном в корне сайта, или через функционал выполнения PHP-команд в административной части.

Пример 3: Запрет покупки при отсутствии для всех товаров в инфоблоке

Иногда требуется обратная операция — обеспечить, чтобы ни один товар из определенного инфоблока нельзя было купить без остатка.

<?php
CModule::IncludeModule("catalog");

// Ищем все товары в инфоблоке 10, у которых покупка при нуле сейчас разрешена
$iterator = CCatalogProduct::GetList(
    array('ID' => 'ASC'),
    array(
        'ELEMENT_IBLOCK_ID' => 10,
        'CAN_BUY_ZERO_ORIG' => 'Y' // Ищем те, у которых стоит "Разрешить"
    ),
    false,
    false,
    array('ID', 'QUANTITY', 'QUANTITY_TRACE_ORIG')
);

while ($row = $iterator->Fetch()) {
    CCatalogProduct::Update($row['ID'], array(
       'QUANTITY' => $row['QUANTITY'],
       'QUANTITY_TRACE' => $row['QUANTITY_TRACE_ORIG'],
       'CAN_BUY_ZERO' => 'N' // Меняем на "Запретить"
    ));
    echo "Для товара ID=" . $row['ID'] . " запрещена покупка при нулевом остатке.<br>";
}
?>

Важные замечания

  1. Резервное копирование: Перед выполнением массовых операций всегда делайте резервную копию базы данных.

  2. Значение 'D': В некоторых скриптах можно встретить значение 'D' (по умолчанию). Оно означает, что товар наследует общую настройку из настроек модуля "Интернет-магазин" > "Настройки каталога" > "Недоступные для покупки товары".

  3. Тестирование: Рекомендуется сначала запускать такие скрипты на тестовой копии сайта, чтобы убедиться в ожидаемом результате.

Используя эти примеры за основу, вы можете гибко настраивать поведение вашего интернет-магазина в зависимости от бизнес-требований.

Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Читайте по теме
Все статьи
Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Все статьи