Иногда после сохранения или добавления элементов , нам нужно внести некоторые изменения 
   Для таких случаев у Битрикса есть так званые обработчики , с которыми более подробно можно познакомится в документации данного продукта. В данной статье я напишу ту ошибку которую делают много , в том числе и я сделал раньше .

AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("OABEAClass", "OABEA")); // объявляем обработчики 
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", Array("OABEAClass", "OABEA"));
class OABEAClass
{
	public static $disableHandler = false;
 //что бы не было зацикливания , важно потому что если не сделать  это,
// наш скрипт будет работать то того момента пока не исчерпает время или память
    
    function OABEA(&$arFields)
    { 
		if (self::$disableHandler)
            return;
		CModule::IncludeModule("iblock");
        if( $arFields["ID"]> 0 && $arFields["IBLOCK_ID"] == "3") //оприделяем ид ИБ !
		{

			//наши действия 

			

					$el = new CIBlockElement;
					$arrFile = CFile::MakeFileArray($file);
					$arLoadProductArray = Array(
						"ACTIVE"         => "Y",            // активен
						"DETAIL_PICTURE" => $arrFile,
						"PREVIEW_PICTURE" => $arrFile,
						
					);
					self::$disableHandler = true; //отключаем
					if($res = $el->Update($arFields["ID"], $arLoadProductArray))
					
					{
						//echo"
";print_r($arrFile);echo"
"; //echo"
";print_r($arFields);echo"
"; //die(); } } } }
вот как раз это участки кода 
public static $disableHandler = false;
 

 
if (self::$disableHandler) 
   
          return;
и
self::$disableHandler = true;
должны присутствовать в обработчике OnAfterIBlockElementUpdate  если мы хотим использовать метод CIBlockElement::Update в середине данного обработчика.