В документации, один добрый человек поделился
"
Тонкий момент.
Если в init.php задан обработчик OnBeforeIBlockElementUpdate, в котором происходит манипуляция с массивом $arFields[PROPERTY_VALUES] (изменение его значений), а где-то в коде сайта вызывается функция CIBlockElement::Update без задания массива PROPERTY_VALUES, то результатом ее выполнения может стать очистка значений свойств элемента (так как в обработчик массив PROPERTY_VALUES не поступит, что, в общем-то, логично). Поэтому обязательно в OnBeforeIBlockElementUpdate проверяем, есть ли вообще что-то в массиве PROPERTY_VALUES:
"
То есть нежелательно использовать update, если не уверены, что нигде не происходит манипуляция со свойствами.
"
Тонкий момент.
Если в init.php задан обработчик OnBeforeIBlockElementUpdate, в котором происходит манипуляция с массивом $arFields[PROPERTY_VALUES] (изменение его значений), а где-то в коде сайта вызывается функция CIBlockElement::Update без задания массива PROPERTY_VALUES, то результатом ее выполнения может стать очистка значений свойств элемента (так как в обработчик массив PROPERTY_VALUES не поступит, что, в общем-то, логично). Поэтому обязательно в OnBeforeIBlockElementUpdate проверяем, есть ли вообще что-то в массиве PROPERTY_VALUES:
"
То есть нежелательно использовать update, если не уверены, что нигде не происходит манипуляция со свойствами.