Автоматическое обновление курса валют в 1С-Битрикс
В файл php_interface/init.php добавить функцию:
<?php
// ...
function GetRateFromCBR($CURRENCY)
{
global $DB;
global $APPLICATION;
CModule::IncludeModule('currency');
if (!CCurrency::GetByID($CURRENCY))
return false;
$DATE_RATE = date("d.m.Y");
$QUERY_STR = "date_req=" .
$DB->FormatDate(
$DATE_RATE,
CLang::GetDateFormat('SHORT'),
"D.M.Y"
);
$strQueryText = QueryGetData(
'www.cbr.ru',
80,
'/scripts/XML_daily.asp',
$QUERY_STR,
$errno,
$errstr
);
$charset = 'windows-1251';
if (preg_match("/<"."\?XML[^>]{1,}encoding=[\"']([^>\"']{1,})[\"'][^>]{0,}\?".">/i", $strQueryText, $matches)) {
$charset = Trim($matches[1]);
}
$strQueryText = preg_replace(
"/<!DOCTYPE[^>]{1,}>/",
"",
$strQueryText
);
$strQueryText = preg_replace(
"/<"."\?XML[^>]{1,}\?".">/",
"",
$strQueryText
);
$strQueryText = $APPLICATION->ConvertCharset($strQueryText, $charset, SITE_CHARSET);
require_once($_SERVER["DOCUMENT_ROOT"] . '/bitrix/modules/main/classes/general/xml.php');
$objXML = new CDataXML();
$res = $objXML->LoadString($strQueryText);
if($res !== false)
$arData = $objXML->GetArray();
else
$arData = false;
$NEW_RATE=Array();
if (is_array($arData) && count($arData["ValCurs"]["#"]["Valute"])>0) {
for ($j1 = 0; $j1<count($arData["ValCurs"]["#"]["Valute"]); $j1++) {
if ($arData["ValCurs"]["#"]["Valute"][$j1]["#"]["CharCode"][0]["#"]==$CURRENCY) {
$NEW_RATE['CURRENCY'] = $CURRENCY;
$NEW_RATE['RATE_CNT'] = IntVal($arData["ValCurs"]["#"]["Valute"][$j1]["#"]["Nominal"][0]["#"]);
$NEW_RATE['RATE'] = DoubleVal(
str_replace(
",",
".",
$arData["ValCurs"]["#"]["Valute"][$j1]["#"]["Value"][0]["#"]
)
);
$NEW_RATE['DATE_RATE'] = $DATE_RATE;
break;
}
}
}
if ((isset($NEW_RATE['RATE'])) && (isset($NEW_RATE['RATE_CNT']))) {
CModule::IncludeModule('currency');
$arFilter = array(
'CURRENCY' => $NEW_RATE['CURRENCY'],
'DATE_RATE' => $NEW_RATE['DATE_RATE']
);
$by = 'date';
$order = 'desc';
$db_rate = CCurrencyRates::GetList($by, $order, $arFilter);
if (!$ar_rate = $db_rate->Fetch())
CCurrencyRates::Add($NEW_RATE);
}
return 'GetRateFromCBR("' . $CURRENCY . '");';
}
Зайти в админке в агенты: https://site.com/bitrix/admin/agent_list.php?lang=ru
Нажать «Добавить агента»
Заполнить поля на подобии и сохранить: