Example #1
0
 /**
  * @param $entity
  * @param $orderId
  * @param null|int $id
  * @return bool
  */
 public static function collectEntityFields($entity, $orderId, $id = null)
 {
     $oldFields = array();
     $fields = array();
     if (!($poolEntity = static::getPoolByEntity($entity, $orderId))) {
         return false;
     }
     if ($id !== null) {
         $found = false;
         foreach ($poolEntity as $entityId => $fieldValue) {
             if ($entityId == $id) {
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             return false;
         }
     }
     foreach ($poolEntity as $entityId => $fieldValue) {
         if ($id !== null && $entityId != $id) {
             continue;
         }
         foreach ($fieldValue as $data) {
             if ($data['RECORD_TYPE'] == static::SALE_ORDER_HISTORY_RECORD_TYPE_ACTION) {
                 static::addRecord($entity, $orderId, $data['TYPE'], $data['ID'], $data['DATA']);
                 unset(static::$pool[$entity][$orderId][$data['ID']][$data['TYPE']]);
                 continue;
             }
             $value = $data['VALUE'];
             $oldValue = $data['OLD_VALUE'];
             if (static::isDate($value)) {
                 $value = static::convertDateField($value);
             }
             if (static::isDate($oldValue)) {
                 $oldValue = static::convertDateField($oldValue);
             }
             $oldFields[$data['NAME']] = $oldValue;
             $fields[$data['NAME']] = $value;
             if (!empty($data['DATA']) && is_array($data['DATA'])) {
                 if (!empty($data['DATA']['PRODUCT_ID'])) {
                     $fields['~PRODUCT_ID'] = $data['DATA']['PRODUCT_ID'];
                 }
                 if (!empty($data['DATA']['NAME'])) {
                     $fields['~NAME'] = $data['DATA']['NAME'];
                 }
             }
         }
         unset(static::$pool[$entity][$orderId][$entityId]);
     }
     \CSaleOrderChange::AddRecordsByFields($orderId, $oldFields, $fields, array(), $entity, $id);
     unset(static::$pool[$entity][$orderId]);
 }
Example #2
0
 function Update($ID, $arFields, $bDateUpdate = true)
 {
     global $DB, $USER_FIELD_MANAGER, $CACHE_MANAGER;
     $ID = IntVal($ID);
     $arFields1 = array();
     foreach ($arFields as $key => $value) {
         if (substr($key, 0, 1) == "=") {
             $arFields1[substr($key, 1)] = $value;
             unset($arFields[$key]);
         }
     }
     if (!CSaleOrder::CheckFields("UPDATE", $arFields, $ID)) {
         return false;
     }
     foreach (GetModuleEvents("sale", "OnBeforeOrderUpdate", true) as $arEvent) {
         if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false) {
             return false;
         }
     }
     $strUpdate = $DB->PrepareUpdate("b_sale_order", $arFields);
     foreach ($arFields1 as $key => $value) {
         if (strlen($strUpdate) > 0) {
             $strUpdate .= ", ";
         }
         $strUpdate .= $key . "=" . $value . " ";
     }
     //get old fields
     $arOrderOldFields = CSaleOrder::GetByID($ID);
     $strSql = "UPDATE b_sale_order SET " . "\t" . $strUpdate . " ";
     if ($bDateUpdate) {
         $strSql .= ",\tDATE_UPDATE = " . $DB->GetNowFunction() . " ";
     }
     $strSql .= "WHERE ID = " . $ID . " ";
     $res = $DB->Query($strSql, true, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     if (!$res) {
         return false;
     }
     $USER_FIELD_MANAGER->Update("ORDER", $ID, $arFields);
     if ($res) {
         CSaleOrderChange::AddRecordsByFields($ID, $arOrderOldFields, $arFields);
     }
     unset($GLOBALS["SALE_ORDER"]["SALE_ORDER_CACHE_" . $ID]);
     foreach (GetModuleEvents("sale", "OnOrderUpdate", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array($ID, $arFields));
     }
     if (isset($arFields["TRACKING_NUMBER"])) {
         foreach (GetModuleEvents("sale", "OnTrackingNumberChange", true) as $arEvent) {
             ExecuteModuleEventEx($arEvent, array($ID, $arFields["TRACKING_NUMBER"]));
         }
         if (strlen($arFields["TRACKING_NUMBER"]) > 0 && $arOrderOldFields["TRACKING_NUMBER"] != $arFields["TRACKING_NUMBER"]) {
             $accountNumber = isset($arFields["ACCOUNT_NUMBER"]) ? $arFields["ACCOUNT_NUMBER"] : $arOrderOldFields["ACCOUNT_NUMBER"];
             $userId = isset($arFields["USER_ID"]) ? $arFields["USER_ID"] : $arOrderOldFields["USER_ID"];
             $payerName = "";
             $payerEMail = '';
             $dbUser = CUser::GetByID($userId);
             if ($arUser = $dbUser->Fetch()) {
                 if (strlen($payerName) <= 0) {
                     $payerName = $arUser["NAME"] . (strlen($arUser["NAME"]) <= 0 || strlen($arUser["LAST_NAME"]) <= 0 ? "" : " ") . $arUser["LAST_NAME"];
                 }
                 if (strlen($payerEMail) <= 0) {
                     $payerEMail = $arUser["EMAIL"];
                 }
             }
             $arEmailFields = array("ORDER_ID" => $accountNumber, "ORDER_DATE" => Date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT", $arOrderOldFields["LID"]))), "ORDER_USER" => $payerName, "ORDER_TRACKING_NUMBER" => $arFields["TRACKING_NUMBER"], "BCC" => COption::GetOptionString("sale", "order_email", "order@" . $SERVER_NAME), "EMAIL" => $payerEMail, "SALE_EMAIL" => COption::GetOptionString("sale", "order_email", "order@" . $SERVER_NAME));
             $event = new CEvent();
             $event->Send("SALE_ORDER_TRACKING_NUMBER", $arOrderOldFields["LID"], $arEmailFields, "N");
         }
     }
     if (defined("CACHED_b_sale_order") && $bDateUpdate && $arFields["UPDATED_1C"] != "Y") {
         $CACHE_MANAGER->Read(CACHED_b_sale_order, "sale_orders");
         $CACHE_MANAGER->SetImmediate("sale_orders", true);
     }
     return $ID;
 }
Example #3
0
 function _Update($ID, &$arFields)
 {
     global $DB;
     $ID = (int) $ID;
     //CSaleBasket::Init();
     if (!CSaleBasket::CheckFields("UPDATE", $arFields, $ID)) {
         return false;
     }
     foreach (GetModuleEvents("sale", "OnBeforeBasketUpdateAfterCheck", true) as $arEvent) {
         if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false) {
             return false;
         }
     }
     $arOldFields = false;
     $updateHistory = isset($arFields["ORDER_ID"]) && (int) $arFields["ORDER_ID"] > 0;
     $strUpdate = $DB->PrepareUpdate("b_sale_basket", $arFields);
     if (!empty($strUpdate)) {
         if ($updateHistory) {
             $oldOrderIterator = CSaleBasket::GetList(array(), array('ID' => $ID), false, false, array_keys($arFields));
             $arOldFields = $oldOrderIterator->Fetch();
         }
         $strSql = "update b_sale_basket set " . $strUpdate . ", DATE_UPDATE = " . $DB->GetNowFunction() . " where ID = " . $ID;
         $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     } else {
         $updateHistory = false;
     }
     if (isset($arFields["PROPS"]) && !empty($arFields["PROPS"]) && is_array($arFields["PROPS"])) {
         $sql = "delete from b_sale_basket_props where BASKET_ID = " . $ID;
         $bProductXml = false;
         $bCatalogXml = false;
         foreach ($arFields["PROPS"] as $prop) {
             if (!isset($prop['CODE'])) {
                 continue;
             }
             if ($prop["CODE"] == "PRODUCT.XML_ID") {
                 $bProductXml = true;
             }
             if ($prop["CODE"] == "CATALOG.XML_ID") {
                 $bCatalogXml = true;
             }
             if ($bProductXml && $bCatalogXml) {
                 break;
             }
         }
         if (!$bProductXml) {
             $sql .= " and CODE <> 'PRODUCT.XML_ID'";
         }
         if (!$bCatalogXml) {
             $sql .= " and CODE <> 'CATALOG.XML_ID'";
         }
         $DB->Query($sql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         if (!$bProductXml || !$bCatalogXml) {
             $sql = "delete from b_sale_basket_props where BASKET_ID = " . $ID . " and CODE IS NULL";
             $DB->Query($sql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         }
         foreach ($arFields["PROPS"] as $prop) {
             if (!isset($prop["NAME"])) {
                 continue;
             }
             $prop["NAME"] = (string) $prop["NAME"];
             if ($prop["NAME"] != '') {
                 $arInsert = $DB->PrepareInsert("b_sale_basket_props", $prop);
                 $strSql = "INSERT INTO b_sale_basket_props(BASKET_ID, " . $arInsert[0] . ") VALUES(" . $ID . ", " . $arInsert[1] . ")";
                 $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
             }
         }
     }
     if ($updateHistory) {
         CSaleOrderChange::AddRecordsByFields($arFields["ORDER_ID"], $arOldFields, $arFields, array('PROPS'), "BASKET");
     }
     foreach (GetModuleEvents("sale", "OnBasketUpdate", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array($ID, $arFields));
     }
     return true;
 }
Example #4
0
	function _Update($ID, &$arFields)
	{
		global $DB;

		$ID = (int)$ID;
		//CSaleBasket::Init();

		if (!CSaleBasket::CheckFields("UPDATE", $arFields, $ID))
			return false;

		foreach(GetModuleEvents("sale", "OnBeforeBasketUpdateAfterCheck", true) as $arEvent)
			if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields))===false)
				return false;

		$arOldFields = CSaleBasket::GetByID($ID);

		$strUpdate = $DB->PrepareUpdate("b_sale_basket", $arFields);
		if(!empty($strUpdate))
		{
			$strSql = "update b_sale_basket set ".$strUpdate.", DATE_UPDATE = ".$DB->GetNowFunction()." where ID = ".$ID;
			$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
		}

		if (isset($arFields["PROPS"]) && !empty($arFields["PROPS"]) && is_array($arFields["PROPS"]))
		{
			$sql = "delete from b_sale_basket_props where BASKET_ID = ".$ID;

			$bProductXml = false;
			$bCatalogXml = false;
			foreach($arFields["PROPS"] as $prop)
			{
				if ($prop["CODE"] == "PRODUCT.XML_ID")
					$bProductXml = true;

				if ($prop["CODE"] == "CATALOG.XML_ID")
					$bCatalogXml = true;

				if ($bProductXml && $bCatalogXml)
					break;
			}
			if (!$bProductXml)
				$sql .= " and CODE <> 'PRODUCT.XML_ID'";
			if (!$bCatalogXml)
				$sql .= " and CODE <> 'CATALOG.XML_ID'";
			$DB->Query($sql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
			if (!$bProductXml || !$bCatalogXml)
			{
				$sql = "delete from b_sale_basket_props where BASKET_ID = ".$ID." and CODE IS NULL";
				$DB->Query($sql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
			}

			foreach($arFields["PROPS"] as $prop)
			{
				if(strlen($prop["NAME"]) > 0)
				{
					$arInsert = $DB->PrepareInsert("b_sale_basket_props", $prop);
					$strSql = "INSERT INTO b_sale_basket_props(BASKET_ID, ".$arInsert[0].") VALUES(".$ID.", ".$arInsert[1].")";
					$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
				}
			}
		}

		if (isset($arFields["ORDER_ID"]) && (int)$arFields["ORDER_ID"] > 0)
			CSaleOrderChange::AddRecordsByFields($arFields["ORDER_ID"], $arOldFields, $arFields, array(), "BASKET");

		foreach(GetModuleEvents("sale", "OnBasketUpdate", true) as $arEvent)
			ExecuteModuleEventEx($arEvent, Array($ID, $arFields));

		return true;
	}
Example #5
0
 /**
  * @param $entityName
  * @param $orderId
  * @param null|int $id
  * @return bool
  */
 public static function collectEntityFields($entityName, $orderId, $id = null)
 {
     if (!($poolEntity = static::getPoolByEntity($entityName, $orderId))) {
         return false;
     }
     if ($id !== null) {
         $found = false;
         foreach ($poolEntity as $entityId => $fieldValue) {
             if ($entityId == $id) {
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             return false;
         }
     }
     foreach ($poolEntity as $entityId => $fieldValue) {
         if ($id !== null && $entityId != $id) {
             continue;
         }
         $entity = null;
         $dataFields = array();
         $oldFields = array();
         $fields = array();
         foreach ($fieldValue as $dataList) {
             foreach ($dataList as $key => $data) {
                 if ($data['RECORD_TYPE'] == static::SALE_ORDER_HISTORY_RECORD_TYPE_ACTION) {
                     static::addRecord($entityName, $orderId, $data['TYPE'], $data['ID'], $data['ENTITY'], $data['DATA']);
                     unset(static::$pool[$entityName][$orderId][$data['ID']][$data['TYPE']][$key]);
                     if (empty(static::$pool[$entityName][$orderId][$data['ID']][$data['TYPE']])) {
                         unset(static::$pool[$entityName][$orderId][$data['ID']][$data['TYPE']]);
                     }
                     continue;
                 }
                 $value = $data['VALUE'];
                 $oldValue = $data['OLD_VALUE'];
                 if (static::isDate($value)) {
                     $value = static::convertDateField($value);
                 }
                 if (static::isDate($oldValue)) {
                     $oldValue = static::convertDateField($oldValue);
                 }
                 $oldFields[$data['NAME']] = $oldValue;
                 $fields[$data['NAME']] = $value;
                 if (!empty($data['DATA']) && is_array($data['DATA'])) {
                     $dataFields = array_merge($dataFields, $data['DATA']);
                 }
                 $dataType = static::FIELD_TYPE_TYPE;
                 if (isset($data['RECORD_TYPE']) == static::SALE_ORDER_HISTORY_RECORD_TYPE_FIELD) {
                     $dataType = static::FIELD_TYPE_NAME;
                 }
                 if (isset($data[$dataType])) {
                     unset(static::$pool[$entityName][$orderId][$data['ID']][$data[$dataType]][$key]);
                     if (empty(static::$pool[$entityName][$orderId][$data['ID']][$data[$dataType]])) {
                         unset(static::$pool[$entityName][$orderId][$data['ID']][$data[$dataType]]);
                     }
                 }
                 if ($entity === null && array_key_exists('ENTITY', $data)) {
                     $entity = $data['ENTITY'];
                 }
             }
         }
         \CSaleOrderChange::AddRecordsByFields($orderId, $oldFields, $fields, array(), $entityName, $id, $entity, $dataFields);
         if (empty(static::$pool[$entityName][$orderId][$entityId])) {
             unset(static::$pool[$entityName][$orderId][$entityId]);
         }
     }
     if (empty(static::$pool[$entityName][$orderId])) {
         unset(static::$pool[$entityName][$orderId]);
     }
     if (empty(static::$pool[$entityName])) {
         unset(static::$pool[$entityName]);
     }
 }
Example #6
0
	/**
	 * <p>Функция изменяет параметры заказа с кодом ID на новые параметры из массива <i> arFields</i>. Перед добавлением заказа вызываются обработчики события OnBeforeOrderUpdate модуля магазина, а после добавления - обработчики события OnOrderUpdate модуля магазина. </p>
	 *
	 *
	 *
	 *
	 * @param int $ID  Код заказа.
	 *
	 *
	 *
	 * @param array $arFields  Ассоциативный массив параметров заказа, ключами в котором
	 * являются названия параметров заказа, а значениями - новые
	 * значения.<br> Допустимые ключи: <ul> <li> <b>LID</b> - код сайта, на котором
	 * сделан заказ;</li> <li> <b>PERSON_TYPE_ID</b> - тип плательщика, к которому
	 * принадлежит посетитель, сделавший заказ (заказчик);</li> <li> <b>PAYED</b> -
	 * флаг (Y/N) оплачен ли заказ;</li> <li> <b>DATE_PAYED</b> - дата оплаты заказа;</li>
	 * <li> <b>EMP_PAYED_ID</b> - код пользователя (сотрудника магазина), который
	 * установил флаг оплаты;</li> <li> <b>CANCELED</b> - флаг (Y/N) отменён ли
	 * заказ;</li> <li> <b>DATE_CANCELED</b> - дата отмены заказа;</li> <li> <b>EMP_CANCELED_ID</b> -
	 * код пользователя, который установил флаг отмены заказа;</li> <li>
	 * <b>REASON_CANCELED</b> - текстовое описание причины отмены заказа;</li> <li>
	 * <b>STATUS_ID</b> - код статуса заказа;</li> <li> <b>EMP_STATUS_ID</b> - код пользователя
	 * (сотрудника магазина), который установил текущий статус
	 * заказа;</li> <li> <b>PRICE_DELIVERY</b> - стоимость доставки заказа;</li> <li>
	 * <b>ALLOW_DELIVERY</b> - флаг (Y/N) разрешена ли доставка (отгрузка) заказа;</li>
	 * <li> <b>DATE_ALLOW_DELIVERY</b> - дата, когда была разрешена доставка заказа;</li>
	 * <li> <b>EMP_ALLOW_DELIVERY_ID</b> - код пользователя (сотрудника магазина),
	 * который разрешил доставку заказа; </li> <li> <b>PRICE</b> - общая стоимость
	 * заказа;</li> <li> <b>CURRENCY</b> - валюта стоимости заказа;</li> <li> <b>DISCOUNT_VALUE</b>
	 * - общая величина скидки;</li> <li> <b>USER_ID</b> - код пользователя
	 * заказчика;</li> <li> <b>PAY_SYSTEM_ID</b> - платежная система, которой (будет)
	 * оплачен заказа;</li> <li> <b>DELIVERY_ID</b> - способ (служба) доставки
	 * заказа;</li> <li> <b>USER_DESCRIPTION</b> - описание заказа заказчиком;</li> <li>
	 * <b>ADDITIONAL_INFO</b> - дополнительная информация по заказу;</li> <li> <b>COMMENTS</b>
	 * - произвольные комментарии;</li> <li> <b>TAX_VALUE</b> - общая сумма
	 * налогов;</li> <li> <b>STAT_GID</b> - параметр события в статистике; </li> <li>
	 * <b>PS_STATUS</b> - флаг (Y/N) статуса платежной системы - успешно ли оплачен
	 * заказ (для платежных систем, которые позволяют автоматически
	 * получать данные по проведенным через них заказам);</li> <li>
	 * <b>PS_STATUS_CODE</b> - код статуса платежной системы (значение зависит от
	 * системы);</li> <li> <b>PS_STATUS_DESCRIPTION</b> - описание результата работы
	 * платежной системы;</li> <li> <b>PS_STATUS_MESSAGE</b> - сообщение от платежной
	 * системы;</li> <li> <b>PS_SUM</b> - сумма, которая была реально оплачена через
	 * платежную систему;</li> <li> <b>PS_CURRENCY</b> - валюта суммы;</li> <li>
	 * <b>PS_RESPONSE_DATE</b> - дата получения статуса платежной системы;</li> <li>
	 * <b>SUM_PAID </b> - сумма, которая уже была оплачена покупателем по
	 * данному счету (например, с внутреннего счета);</li> <li> <b>PAY_VOUCHER_NUM </b> -
	 * номер платежного поручения;</li> <li> <b>PAY_VOUCHER_DATE</b> - дата платежного
	 * поручения.</li> <li> <b>DATE_INSERT</b> - дата создания заказа.</li> </ul>
	 *
	 *
	 *
	 * @param bDateUpdat $e  Обновление даты изменения заказа. Значения <i>true/false</i>
	 * (по-умолчанию <i>true</i>).
	 *
	 *
	 *
	 * @return int <p>Возвращается код добавленного заказа или <i>false</i> в случае
	 * ошибки.</p><a name="examples"></a>
	 *
	 *
	 * <h4>Example</h4> 
	 * <pre>
	 * &lt;?
	 * $arOrder = CSaleOrder::GetByID($ID);
	 * if ($arOrder)
	 * {
	 *    $arFields = array(
	 *       "PAYED" =&gt; "Y",
	 *       "DATE_PAYED" =&gt; Date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL", LANG))),
	 *       "USER_ID" =&gt; $arOrder["USER_ID"],
	 *       "EMP_PAYED_ID" =&gt; $USER-&gt;GetID()
	 *    );
	 *    CSaleOrder::Update($ID, $arFields);
	 * }
	 * ?&gt;
	 * </pre>
	 *
	 *
	 * @static
	 * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csaleorder/csaleorder__update.a8be5ffa.php
	 * @author Bitrix
	 */
	public static function Update($ID, $arFields, $bDateUpdate = true)
	{
		global $DB, $USER_FIELD_MANAGER;

		$ID = IntVal($ID);

		$arFields1 = array();
		foreach ($arFields as $key => $value)
		{
			if (substr($key, 0, 1)=="=")
			{
				$arFields1[substr($key, 1)] = $value;
				unset($arFields[$key]);
			}
		}

		if (!CSaleOrder::CheckFields("UPDATE", $arFields, $ID))
			return false;

		foreach(GetModuleEvents("sale", "OnBeforeOrderUpdate", true) as $arEvent)
			if (ExecuteModuleEventEx($arEvent, Array($ID, &$arFields))===false)
				return false;

		$strUpdate = $DB->PrepareUpdate("b_sale_order", $arFields);

		foreach ($arFields1 as $key => $value)
		{
			if (strlen($strUpdate)>0) $strUpdate .= ", ";
			$strUpdate .= $key."=".$value." ";
		}

		//get old fields
		$arOrderOldFields = CSaleOrder::GetByID($ID);

		$strSql =
			"UPDATE b_sale_order SET ".
			"	".$strUpdate." ";
		if($bDateUpdate)
			$strSql .=	",	DATE_UPDATE = ".$DB->GetNowFunction()." ";
		$strSql .=	"WHERE ID = ".$ID." ";

		$res = $DB->Query($strSql, true, "File: ".__FILE__."<br>Line: ".__LINE__);

		if (!$res)
			return false;

		$USER_FIELD_MANAGER->Update("ORDER", $ID, $arFields);

		if ($res)
			CSaleOrderChange::AddRecordsByFields($ID, $arOrderOldFields, $arFields);

		unset($GLOBALS["SALE_ORDER"]["SALE_ORDER_CACHE_".$ID]);

		foreach(GetModuleEvents("sale", "OnOrderUpdate", true) as $arEvent)
			ExecuteModuleEventEx($arEvent, Array($ID, $arFields));

		return $ID;
	}
Example #7
0
 function Update($ID, $arFields, $bDateUpdate = true)
 {
     global $DB, $USER_FIELD_MANAGER, $CACHE_MANAGER, $APPLICATION;
     $isOrderConverted = \Bitrix\Main\Config\Option::get("main", "~sale_converted_15", 'N');
     $ID = IntVal($ID);
     $arFields1 = array();
     foreach ($arFields as $key => $value) {
         if (substr($key, 0, 1) == "=") {
             $arFields1[substr($key, 1)] = $value;
             unset($arFields[$key]);
         }
     }
     if (!CSaleOrder::CheckFields("UPDATE", $arFields, $ID)) {
         return false;
     }
     foreach (GetModuleEvents("sale", "OnBeforeOrderUpdate", true) as $arEvent) {
         if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false) {
             return false;
         }
     }
     if ($isOrderConverted == "Y") {
         if (!empty($arFields1)) {
             $arFields1 = \Bitrix\Sale\Compatible\OrderCompatibility::backRawField(\Bitrix\Sale\Compatible\OrderCompatibility::ENTITY_ORDER, $arFields1);
         }
         $result = \Bitrix\Sale\Compatible\OrderCompatibility::update($ID, array_merge($arFields, $arFields1), $bDateUpdate);
         if (!$result->isSuccess()) {
             foreach ($result->getErrorMessages() as $error) {
                 $APPLICATION->ThrowException($error);
             }
             return false;
         } else {
             $arOrderOldFields = array();
             $resultFields = $result->getData();
             if (!empty($resultFields['OLD_FIELDS']) && is_array($resultFields['OLD_FIELDS'])) {
                 $arOrderOldFields = $resultFields['OLD_FIELDS'];
             }
             $updated = true;
         }
     } else {
         $strUpdate = $DB->PrepareUpdate("b_sale_order", $arFields);
         foreach ($arFields1 as $key => $value) {
             if (strlen($strUpdate) > 0) {
                 $strUpdate .= ", ";
             }
             $strUpdate .= $key . "=" . $value . " ";
         }
         //get old fields
         $arOrderOldFields = CSaleOrder::GetByID($ID);
         $strSql = "UPDATE b_sale_order SET " . "\t" . $strUpdate . " ";
         if ($bDateUpdate) {
             $strSql .= ",\tDATE_UPDATE = " . $DB->GetNowFunction() . " ";
         }
         $strSql .= "WHERE ID = " . $ID . " ";
         $updated = $DB->Query($strSql, true, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         if (!$updated) {
             return false;
         }
     }
     $USER_FIELD_MANAGER->Update("ORDER", $ID, $arFields);
     if ($updated) {
         CSaleOrderChange::AddRecordsByFields($ID, $arOrderOldFields, $arFields);
     }
     unset($GLOBALS["SALE_ORDER"]["SALE_ORDER_CACHE_" . $ID]);
     foreach (GetModuleEvents("sale", "OnOrderUpdate", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array($ID, $arFields));
     }
     if (isset($arFields["TRACKING_NUMBER"])) {
         foreach (GetModuleEvents("sale", "OnTrackingNumberChange", true) as $arEvent) {
             ExecuteModuleEventEx($arEvent, array($ID, $arFields["TRACKING_NUMBER"]));
         }
         if (strlen($arFields["TRACKING_NUMBER"]) > 0 && $arOrderOldFields["TRACKING_NUMBER"] != $arFields["TRACKING_NUMBER"]) {
             $accountNumber = isset($arFields["ACCOUNT_NUMBER"]) ? $arFields["ACCOUNT_NUMBER"] : $arOrderOldFields["ACCOUNT_NUMBER"];
             $userId = isset($arFields["USER_ID"]) ? $arFields["USER_ID"] : $arOrderOldFields["USER_ID"];
             $payerName = "";
             $payerEMail = '';
             $dbUser = CUser::GetByID($userId);
             if ($arUser = $dbUser->Fetch()) {
                 if (strlen($payerName) <= 0) {
                     $payerName = $arUser["NAME"] . (strlen($arUser["NAME"]) <= 0 || strlen($arUser["LAST_NAME"]) <= 0 ? "" : " ") . $arUser["LAST_NAME"];
                 }
                 if (strlen($payerEMail) <= 0) {
                     $payerEMail = $arUser["EMAIL"];
                 }
             }
             $arEmailFields = array("ORDER_ID" => $accountNumber, "ORDER_DATE" => Date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT", $arOrderOldFields["LID"]))), "ORDER_USER" => $payerName, "ORDER_TRACKING_NUMBER" => $arFields["TRACKING_NUMBER"], "BCC" => COption::GetOptionString("sale", "order_email", "order@" . $_SERVER['SERVER_NAME']), "EMAIL" => $payerEMail, "SALE_EMAIL" => COption::GetOptionString("sale", "order_email", "order@" . $_SERVER['SERVER_NAME']));
             $event = new CEvent();
             $event->Send("SALE_ORDER_TRACKING_NUMBER", $arOrderOldFields["LID"], $arEmailFields, "N");
         }
     }
     if (defined("CACHED_b_sale_order") && $bDateUpdate && $arFields["UPDATED_1C"] != "Y") {
         $CACHE_MANAGER->Read(CACHED_b_sale_order, "sale_orders");
         $CACHE_MANAGER->SetImmediate("sale_orders", true);
     }
     return $ID;
 }