• Код
  • В Битрикс получение количества товара

    #Предисловие

    Делаю интеграцию каталога Битрикса в свою самописную 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;
        }
    
    profile image of Wagood

    Wagood

    Wagood - это Гаврилов Алексей, веб-разработчик и программист. Имеет большой опыт в web-разработке, специализируется на backend-разработке средствами языка PHP. Акцент на работу в стеке Laravel и его экосистемы (Livewire, AlpineJS, Filament, Moonshine, API, Vue.js/Inertia.js, очереди, кеширование, поиск).

    ещё от Wagood