Изменить коэффициент единицы измерения при добавлении нового товара

В init.php можем написать функцию и повесить ее на событие добавления нового товара - OnProductAdd . Но несмотря на логичность действия этот вариант не сработает - при добавлении нового товара единица измерения еще к нему не добавлена и поэтому результат работы функции CCatalogMeasureRatio::GetList будет пустой.

Подойдет событие добавления цены к товару OnBeforePriceAdd - к этому времени единица измерения уже существует и можно ее изменить при помощи функции CCatalogMeasureRatio::update

AddEventHandler("catalog", "OnBeforePriceAdd", Array("MsClass", "OnUpdateMeasureRatioAfterElementAdd"));

class MsClass
{
 function OnUpdateMeasureRatioAfterElementAdd($arFields)
    {
        if(CModule::IncludeModule('catalog') && CModule::IncludeModule('iblock')){

            $res = CIBlockElement::GetByID($arFields['PRODUCT_ID']);

            if($ar_res = $res->GetNext())
               { $IBLOCK_ID = $ar_res['IBLOCK_ID'];} // получим ID инфоблока, так как нужно изменять коэффициент не для всех товаров

            if($IBLOCK_ID==30 || $IBLOCK_ID==31) {

                $ratio = 2;

                if ($IBLOCK_ID == 30) {
                    $ratio = 2;  // коэфф 2 для шин
                } elseif ($IBLOCK_ID == 31) {
                    $ratio = 4;  // коэфф 4 для дисков
                }

                $db_measure = CCatalogMeasureRatio::getList(array(), $arFilter = array('PRODUCT_ID' => $arFields['PRODUCT_ID']), false, false);  // получим единицу измерения только что созданного товара 
                while ($ar_measure = $db_measure->Fetch()) {
                    $new_measure = CCatalogMeasureRatio::update($ar_measure['ID'], array("RATIO" => $ratio));  // измени ее коэффициент
                }
            }

        }
    }
}