/** * <p>Функция обновляет параметры записи в таблице курсов валют на значения из массива <i>arFields</i>. Перед обновлением выполняется проверка, нет ли курса этой валюты на эту дату с другим ID. Если есть - то произойдет ошибка.</p> <p>В случае успешного обновления сбрасываются кеш <b>currency_rate</b> и тэгированный кеш <b>currency_id_КОД_ВАЛЮТЫ</b>.</p> * * * * * @param int $ID Код записи. * * * * @param array $arFields <p>Ассоциативный массив новых параметров курса валюты, ключами * которого являются названия параметров, а значениями - значения * параметров.</p> <p>Допустимые ключи:</p> <ul> <li>CURRENCY - код валюты * (обязательный);</li> <li>DATE_RATE - дата БЕЗ ВРЕМЕНИ, за которую * устанавливается курс (обязательный);</li> <li>RATE_CNT - количество * единиц валюты, которое участвует в задании курса валюты * (например, если 10 Датских крон стоят 48.7 рублей, то 10 - это * количество единиц);</li> <li>RATE - курс валюты.</li> </ul> * * * * @return bool <p>В случае успеха возвращает ID изменённого курса, иначе <i>false</i>. * Текст ошибки выводится через <code>$APPLICATION->GetException()</code>.</p> <br><br> * * @static * @link http://dev.1c-bitrix.ru/api_help/currency/developer/ccurrencyrates/ccurrencyrates__update.1f36666f.php * @author Bitrix */ public static function Update($ID, $arFields) { global $DB; global $APPLICATION; global $stackCacheManager; $ID = (int) $ID; if ($ID <= 0) { return false; } $arMsg = array(); foreach (GetModuleEvents("currency", "OnBeforeCurrencyRateUpdate", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false) { return false; } } if (!CCurrencyRates::CheckFields("UPDATE", $arFields, $ID)) { return false; } $db_result = $DB->Query("SELECT 'x' FROM b_catalog_currency_rate WHERE CURRENCY = '" . $DB->ForSql($arFields["CURRENCY"]) . "' " . "\tAND DATE_RATE = " . $DB->CharToDateFunction($DB->ForSql($arFields["DATE_RATE"]), "SHORT") . " AND ID<>" . $ID . " "); if ($db_result->Fetch()) { $arMsg[] = array("id" => "DATE_RATE", "text" => GetMessage("ERROR_ADD_REC2")); $e = new CAdminException($arMsg); $APPLICATION->ThrowException($e); return false; } else { $strUpdate = $DB->PrepareUpdate("b_catalog_currency_rate", $arFields); if (!empty($strUpdate)) { $strSql = "UPDATE b_catalog_currency_rate SET " . $strUpdate . " WHERE ID = " . $ID; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $stackCacheManager->Clear("currency_rate"); CCurrency::updateCurrencyBaseRate($arFields['CURRENCY']); CCurrency::clearTagCache($arFields['CURRENCY']); } foreach (GetModuleEvents("currency", "OnCurrencyRateUpdate", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($ID, $arFields)); } } return true; }
/** * <p>Функция обновляет параметры записи в таблице курсов валют на значения из массива <i>arFields</i>. Перед обновлением выполняется проверка, нет ли курса этой валюты на эту дату с другим ID. Если есть - то произойдет ошибка.</p> <p>В случае успешного обновления сбрасываются кеш <b>currency_rate</b> и тэгированный кеш <b>currency_id_КОД_ВАЛЮТЫ</b>.</p> * * * * * @param int $ID Код записи. * * * * @param array $arFields <p>Ассоциативный массив новых параметров курса валюты, ключами * которого являются названия параметров, а значениями - значения * параметров.</p> <p>Допустимые ключи:</p> <ul> <li>CURRENCY - код валюты * (обязательный);</li> <li>DATE_RATE - дата БЕЗ ВРЕМЕНИ, за которую * устанавливается курс (обязательный);</li> <li>RATE_CNT - количество * единиц валюты, которое участвует в задании курса валюты * (например, если 10 Датских крон стоят 48.7 рублей, то 10 - это * количество единиц);</li> <li>RATE - курс валюты.</li> </ul> * * * * @return bool <p>В случае успеха возвращает ID изменённого курса, иначе <i>false</i>. * Текст ошибки выводится через <code>$APPLICATION->GetException()</code>.</p><br><br> * * @static * @link http://dev.1c-bitrix.ru/api_help/currency/developer/ccurrencyrates/ccurrencyrates__update.1f36666f.php * @author Bitrix */ public static function Update($ID, $arFields) { global $DB; global $CACHE_MANAGER; global $APPLICATION; global $stackCacheManager; $ID = intval($ID); $arMsg = array(); if (!CCurrencyRates::CheckFields("UPDATE", $arFields, $ID)) return false; $db_result = $DB->Query("SELECT 'x' ". "FROM b_catalog_currency_rate ". "WHERE CURRENCY = '".$DB->ForSql($arFields["CURRENCY"])."' ". " AND DATE_RATE = ".$DB->CharToDateFunction($DB->ForSql($arFields["DATE_RATE"]), "SHORT")." ". " AND ID<>".$ID." "); if ($db_result->Fetch()) { $arMsg[] = array("id"=>"DATE_RATE", "text"=> GetMessage("ERROR_ADD_REC2")); $e = new CAdminException($arMsg); $APPLICATION->ThrowException($e); return false; } else { $strUpdate = $DB->PrepareUpdate("b_catalog_currency_rate", $arFields); if (!empty($strUpdate)) { $strSql = "UPDATE b_catalog_currency_rate SET ".$strUpdate." WHERE ID = ".$ID; $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__); $stackCacheManager->Clear("currency_rate"); if (defined("BX_COMP_MANAGED_CACHE")) $CACHE_MANAGER->ClearByTag("currency_id_".$arFields["CURRENCY"]); } } return true; }