Работа со складами и количеством товаров в Битрикс D7

Выбор склада по айди в Битрикс через D7

$arStore = \Bitrix\Catalog\StoreTable::getById($ID)->fetch();

Выборка активных складов:

//Выборка всех активных складов:
$rsStore = \Bitrix\Catalog\StoreTable::getList(array(
	'filter' => array('ACTIVE'>='Y'),
));

while($arStore=$rsStore->fetch()){
	$arIBlockListID['STORES'][$arStore['ID']]=$arStore;
}

Чтобы выбрать все поля включая пользовательские, добавляем в запрос конструкцию 'select'=>array('*','UF_*'):

$arStore = \Bitrix\Catalog\StoreTable::getList(array(
    'filter'=>array('=ID'=>$storeId),
    'select'=>array('*','UF_*'),
))->fetch();

Добавляем к выбору складов кеширование

CModule::IncludeModule("catalog");
$cntIBLOCK_List = 'Stores';
$cache = new CPHPCache();
$cache_time = 3600*24*360; //кеш на год
$cache_id = 'arIBlockListID'.$cntIBLOCK_List;
$cache_path = 'arIBlockListID';
if ($cache_time > 0 && $cache->InitCache($cache_time, $cache_id, $cache_path))
{
	$res = $cache->GetVars();
	if (is_array($res["arIBlockListID"]) && (count($res["arIBlockListID"]) > 0)){
		$arIBlockListID = $res["arIBlockListID"];
	}
	$arIBlockListID['CACHE']='true';

}
if (!is_array($arIBlockListID))
{
	$arIBlockListID['CACHE']='false';
	//Выборка всех активных складов:
	$rsStore = \Bitrix\Catalog\StoreTable::getList(array(
		'filter' => array('ACTIVE'>='Y'),
	));

	while($arStore=$rsStore->fetch()){
		$arIBlockListID['STORES'][$arStore['ID']]=$arStore;
	}

	//////////// end cache /////////
	if ($cache_time > 0)
	{
		$cache->StartDataCache($cache_time, $cache_id, $cache_path);
		$cache->EndDataCache(array("arIBlockListID"=>$arIBlockListID));
	}
}

Если вы используете магазин Аспро, то можете воспользоваться встроенной функцией:

$arStores=CNextCache::CCatalogStore_GetList(array(), array("ACTIVE" => "Y"), false, false, array());

Получаем всю информацию о товаре включая кол-во (устаревший метод):

CCatalogProduct::GetByID($productID)

Выборка количества товара с идентификатором в $productId на всех активных складах:

$rsStoreProduct = \Bitrix\Catalog\StoreProductTable::getList(array(
	'filter' => array('=PRODUCT_ID'=>$arResult["ID"],'STORE.ACTIVE'=>'Y'),
	'select' => array('*','UF_*'),
));

while($arStoreProduct=$rsStoreProduct->fetch()){
	$amount[$arStoreProduct['STORE_ID']] = $arStoreProduct;
}

Выборка количества товара с идентификатором в $productId на всех активных складах (дополнительно выбираем название склада):

$rsStoreProduct = \Bitrix\Catalog\StoreProductTable::getList(array(
    'filter' => array('=PRODUCT_ID'=>$productId,'STORE.ACTIVE'=>'Y'),
    'select' => array('AMOUNT','STORE_ID','STORE_TITLE' => 'STORE.TITLE'),
));

while($arStoreProduct=$rsStoreProduct->fetch()){
    print_r($arStoreProduct);
}

Выборка количества товара с идентификатором в $productId на складе с идентификатором в $storeId (дополнительно выбираем название склада и название товара):

$rsStoreProduct = \Bitrix\Catalog\StoreProductTable::getList(array(
    'filter' => array('=PRODUCT_ID'=>$productId,'=STORE_ID'=>$storeId),
    'limit' => 1,
    'select' => array('AMOUNT','STORE_TITLE' => 'STORE.TITLE', 'PRODUCT_NAME' => 'PRODUCT.IBLOCK_ELEMENT.NAME'),
));

if($arStoreProduct=$rsStoreProduct->fetch()){
    print_r($arStoreProduct);
}

Вливайтесь в общениеДобавить комментарий