Фильтрация элементов по цене с учетом скидки - amel-post/bitrix.help GitHub Wiki

<?php 
$iblock = 2;
$arSelect = Array("ID");
$arFilter = Array("IBLOCK_ID"=>$iblock, "ACTIVE"=>"Y");
$resElem = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
while($obElem = $resElem->Fetch())
{
    if(!CCatalogSku::IsExistOffers($obElem["ID"])) 
    {
        $price = CCatalogProduct::GetOptimalPrice($obElem["ID"]);
        $minPrice = $price['DISCOUNT_PRICE'];
    } 
    else 
    {
        $offers = CCatalogSKU::getOffersList($obElem["ID"]);
        $minPrice = 0;
        foreach ($offers[$obElem["ID"]] as $offer)
        {
            $price = CCatalogProduct::GetOptimalPrice($offer['ID']);
            if ($price['DISCOUNT_PRICE'] < $minPrice || $minPrice == 0) {
                $minPrice = $price['DISCOUNT_PRICE'];
            }

        }
    }

    CIBlockElement::SetPropertyValues($obElem["ID"], $iblock, $minPrice, "MINIMAL_PRICE");
    \Bitrix\Iblock\PropertyIndex\Manager::updateElementIndex($iblock, $obElem["ID"]);
}

CIBlock::clearIBlockTagCache($iblock);