Фильтрация элементов по цене с учетом скидки - 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);