#Предисловие
Делаю интеграцию каталога Битрикса в свою самописную CRM и оказалось, что не так-то просто (для меня, по крайней мере) получить количество товара, если оно может хранится или в каталоге, или в торговых предложениях. В итоге получилась следующая функция, суммирующая общее кол-во товара.
#Функция получения кол-ва товара
Собственно сам код функции
//Получаем количество по всем складам и предложениям
function GetAmount($prodID)
{
$amount= 0;
// Получаем количество из каталога
$iterator = \Bitrix\Catalog\Model\Product::getList([
'select' => [
'QUANTITY'
],
'filter' => ['=ID' => $prodID]
]);
$result = $iterator->fetch();
unset($iterator);
if ($result && (int)$result['QUANTITY'] > 0) {
$amount= (int)$result['QUANTITY'];
}
// Получаем количество из предложений
$isProductExistSKU = CCatalogSKU::getExistOffers($prodID);
if($isProductExistSKU && isset($isProductExistSKU[$prodID]) && $isProductExistSKU[$prodID])
{
$arSkuElements = $arSkuInfo = array();
$intIBlockID = (int)CIBlockElement::GetIBlockByID($prodID);
if ($intIBlockID > 0) {
$arSkuInfo = CCatalogSKU::GetInfoByProductIBlock($intIBlockID);
}
if(!empty($arSkuInfo) && is_array($arSkuInfo))
{
$dbAllSkuElements = CIBlockElement::GetList(
array(),
array('IBLOCK_ID' => $arSkuInfo['IBLOCK_ID'], '=PROPERTY_'.$arSkuInfo['SKU_PROPERTY_ID'] => $prodID),
false,
false,
array('ID', 'CATALOG_QUANTITY')
);
while($arAllSkuElements = $dbAllSkuElements->fetch())
{
$arSkuElements[] = $arAllSkuElements;
}
}
foreach($arSkuElements as $skuId)
{
if(isset($skuId["ID"]))
{
$amount += $skuId['CATALOG_QUANTITY'];
}
}
}
return $amount;
}