[spoiler]
Подойдет событие добавления цены к товару 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)); // измени ее коэффициент } } } } } |