@po4emu4ka2020

Как изменить коэффициент единицы измерения у товара в обработчике события OnAfterIBlockElementUpdate?

Пытаюсь изменить коэффициент единицы измерения в обработчике события OnAfterIBlockElementUpdate.
Но значение остается старым.

AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "HandlerAfterIBlockElementUpdate");
function HandlerAfterIBlockElementUpdate(&$arFields)
{
 //новый коэффициент
    $newCoeff = 40;//например

    CModule::IncludeModule("iblock");
    CModule::IncludeModule("catalog");
    CModule::IncludeModule("sale");

    $iBlockId = 4;//ИБ

//получаем коэффициент этого товара для изменения
    $curElementRatio = CCatalogMeasureRatio::getList(
        Array(),
        array('IBLOCK_ID' => $iBlockId, 'PRODUCT_ID' => $arFields['ID']),
        false, false);

    while ($arRatio = $curElementRatio->GetNext()) {
        $ratioId = $arRatio['ID'];
        $arFieldsNew = Array(
            'PRODUCT_ID' => $arFields['ID'],
            'RATIO' => $newCoeff,
        );
//изменяем кэффициент
        CCatalogMeasureRatio::update($ratioId, $arFieldsNew);
    }
}


Если код запустить не в обработчике события, а просто скриптом, то коэффициент меняется нормально.

Предполагаю, что коэффициент перезатирается после срабатывания обработчика.
Скажите, пожалуйста, как можно решить эту проблему?

Буду благодарен за любой совет.
  • Вопрос задан
  • 618 просмотров
Решения вопроса 1
@po4emu4ka2020 Автор вопроса
Как я предполагал, результат действия обработчика события OnAfterIBlockElementUpdate затирается.
В итоге, решением стал обработчик события изменения цены OnPriceUpdate (так как это событие срабатывает в самом конце).

AddEventHandler("catalog", "OnPriceUpdate", "HandlerOnPriceUpdate");
function HandlerOnPriceUpdate($ID,&$arFields)
{
    $element = $arFields['PRODUCT_ID'];    //ID товара
    $iblockId = 4;
    $coeff= 100; //например
        $curElementRatio = CCatalogMeasureRatio::getList(
        Array(),
        array('IBLOCK_ID' => $iblockId, 'PRODUCT_ID' => $element ),
        false, false);

    while ($arRatio = $curElementRatio->GetNext()) {
        $ratioId = $arRatio['ID'];
        $arFieldsNew = Array(
            'RATIO' => $coeff,
        );

        CCatalogMeasureRatio::update($ratioId, $arFieldsNew);
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы