Автоматическое заполнение минимальной и максимальной цен при сохранение элемента

Данный метод имеет недостаток - при изменение цен через API битрикса он не сработает.

Данный код размещаем в init.php


AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", "MinMaxSKUPriceUpdate");

function MinMaxSKUPriceUpdate(&$arFields){
   $isProduct = CCatalogSKU::GetInfoByProductIBlock($arFields['IBLOCK_ID']);
   if (is_array($isProduct)){
      $rsOffers = CIBlockElement::GetList(array(),array('IBLOCK_ID' => $isProduct['IBLOCK_ID'], 'PROPERTY_'.$isProduct['SKU_PROPERTY_ID'] => $arFields['ID']), false, false, array('IBLOCK_ID', 'ID', 'CATALOG_GROUP_1'));
       while ($arOffer = $rsOffers->GetNext()){
       
         if(!isset($MIN_PRICE)){$MIN_PRICE = $arOffer['CATALOG_PRICE_1'];}
         if(!isset($MAX_PRICE)){$MAX_PRICE = $arOffer['CATALOG_PRICE_1'];}
         if($MIN_PRICE > $arOffer['CATALOG_PRICE_1']){
            $MIN_PRICE = $arOffer['CATALOG_PRICE_1'];
         }
         if($MAX_PRICE < $arOffer['CATALOG_PRICE_1']){
            $MAX_PRICE = $arOffer['CATALOG_PRICE_1'];
         }
      }
		if(!empty($MAX_PRICE) || !empty($MIN_PRICE))
		{
			$arFields['PROPERTY_VALUES']['MINIMUM_PRICE'] = $MAX_PRICE;
			$arFields['PROPERTY_VALUES']['MAXIMUM_PRICE'] = $MIN_PRICE;
		}
		else
		{
			$MAX_MIN_PRICE = CPrice::GetBasePrice($arFields['ID']);
			$arFields['PROPERTY_VALUES']['MINIMUM_PRICE'] = $MAX_MIN_PRICE["PRICE"];
			$arFields['PROPERTY_VALUES']['MAXIMUM_PRICE'] = $MAX_MIN_PRICE["PRICE"];
		}
   }
}

Возврат к списку