Mikhail Petrov пишет: в любом случае не поменяет цену, т.к. после события OnAfterIBlockElementUpdate будет вызвано событие OnBeforePriceUpdate и перепишет цену
Не обязательно. Только в том случае, если на OnBeforePriceUpdate тоже есть свой обработчик.
Не надо сверлить зубы через задний проход дрелью от Сваровски
Mikhail Petrov пишет: в любом случае не поменяет цену, т.к. после события OnAfterIBlockElementUpdate будет вызвано событие OnBeforePriceUpdate и перепишет цену
Не обязательно. Только в том случае, если на OnBeforePriceUpdate тоже есть свой обработчик.
Тогда у меня возник вопрос: Выгрузка из 1С на сайт. Я создаю обработчик события OnBeforeIBlockElementUpdate, там с помощью функции CPrice::Update задаю цену , исходя из свойств элемента инфоблока, с помощью функции CPrice::GetList смотрю, что она действительно задалась, радуюсь сему факту, а потом обнаруживаю, что в итоге цена не поменялась. Долго гуглил, наконец, найдя событие OnBeforePriceUpdate, написал ему обработчик и всё заработало. Исходя из этого я пришёл к выводу, что после обработки событий OnBeforeIBlockElementUpdate/OnAfterIBlockElementUpdate вызывается обработчик, встроенный или кастомный, события OnBeforePriceUpdate и перезаписывает цену.
Нет. В импорте та же последовательность действий, что и в форме - обработка полей и свойств элемента через CIBlockElement, затем - обработка цен через CPrice. Соответственно, для каждого класса вызываются свои обработчики. Вообще вешать на события инфоблока обработчики, изменяющие цены можно только в одном случае - если Вы точно уверены, что следом не будет вызван CPrice.
Не надо сверлить зубы через задний проход дрелью от Сваровски