Проверяем наличие товара на складе
Хоть в битрикс склады и используются только для вывода информации, многие их переделывают под реальные задачи. Например для вывода доступности в регионах (когда каждый регион свой склад). Ядро битрикс позволяет гибко проверить наличие на складах, покажу на примерах.
Запрос для выборки товаров, которых на определённом складе больше 0:
$dbItems = CIBlockElement::GetList( array(), array('IBLOCK_ID' => $iblockId, '>STORE_AMOUNT' => 0, 'STORE_NUMBER' => $storeId), false, false, array('ID', 'NAME', 'IBLOCK_ID') );
Можно обойтись без доп. запросов и использовать доп. фильтр компонентов
global $arStoreFilter; $arStoreFilter = array( '>STORE_AMOUNT_'.$storeId => $storeId );
В запросах к инфоблокам вы можете использовать поля:
STORE_NUMBER - Идентификатор склада.
STORE_AMOUNT - Количество на складе.
STORE_AMOUNT_ИДсклада - Количество на конкретном складе.
Преимущество в том, что это стандартные методы, в которых вы так же можете использовать в фильтре: свойства товаров, подзапросы, сложную логику и т.д.
Например, запрос для выборки товаров, которых на нескольких определённых складах больше 0, при этом у товаров отмечено свойство "Экспресс доставка":
$dbItems = CIBlockElement::GetList( array(), array( 'IBLOCK_ID' => $iblockId, 'PROPERTY_EXPRESS_DELIVERY' => 'Y', array( 'LOGIC' => 'OR', array('>STORE_AMOUNT_'.$storeMskId => 0), array('>STORE_AMOUNT_'.$storeSpbId => 0) ), false, false, array('ID', 'NAME', 'IBLOCK_ID') ) ); while($arItem = $dbItems->GetNext()) { var_dump($arItem); }
Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.