Как описать события изменения цены (в свежем битриксе)?
Всем привет!
Возникла следующая потребность: при изменении цены элемента, записывать значение цены в свойство данного элемента инфоблока.
Версия Битрикс 18.0.9
Раньше можно было воспользоваться событием OnPriceUpdate(Add), либо OnBeforePriceUpdate(Add)
Но, описывая обработчики данных событий, ничего не происходит. В обработчиках делал просто дамп полей в файл, чтобы убедиться в их работоспособности.
Полазив в документации обнаружил, что метод CPrice::Update и Add объявлены, как deprecated и рекомендуется использовать \Bitrix\Catalog\Model\Price::update
В старом ядре CPrice::Update вызывал события, в новом он вызывает, указанный ранее \Bitrix\Catalog\Model\Price::update, который в свою очередь НЕ вызывает события.
Отсюда вытекает вопрос, как отследить изменение / добавление цены ?
Пробовал делать в обход, через события инфоблоков, после сохранения элемента (OnAfterIBlockElementUpdate) получать цену из таблицы цен (\Bitrix\Catalog\PriceTable) и записывать в свойств, но проблема в том, что сначала выполняются все события для элемента, а потом записывается цена, и при сохранении мы можем получить только старую цену!
Спасибо! Второй вариант мне очень почти помог.
При сохранении обычного элемента, все как надо. А когда пытаюсь сохранить торговое предложение, появляется индикатор загрузки, и на этом все. Цена не сохраняется.
Суть задумки была такая, чтобы иметь в свойствах элемент минимальную и максимальную цену, для правильного построения фильтра по ценам, т.к. элементы, у которых есть ТП, сразу отпадали из результатов фильтра, т.к. у них нет своей цены.
Дополню:
после написания комментария, повисать перестала, но есть странность: при сохранении обычного элемента
$event->getParameter('fields') возвращает массив, где есть поле PRODUCT_ID
при сохранении ТП PRODUCT_ID отсутствует.
Но это уже меньшая проблема!