Иногда возникает задача сменить цены и валюту в каталоге товаров в Битриксе. Причем не на выводе для посетителей, а именно для самого каталога (для внутреннего учета).
Сделать это можно таким скриптом (предварительно только сделать бэкап базы данных!):
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule('iblock');
CModule::IncludeModule('catalog');
CModule::IncludeModule('sale');
$rate = 0.035; //курс новой валюты
$CATALOG_IBLOCK_ID = 1; //ID каталога
$cur_name = 'RUB'; //название новой валюты
$db_res = CIblockElement::GetList([],['IBLOCK_ID' => $CATALOG_IBLOCK_ID], false, false, ['ID', 'NAME']);
while ($ar_res = $db_res->Fetch())
{
$dbProductPrice = CPrice::GetListEx([],["PRODUCT_ID" => $ar_res['ID']],false,false,[]);
while ($arPrices = $dbProductPrice->fetch()) {
pr ($arPrices['ID']);
$arFields = Array(
"PRODUCT_ID" => $arPrices['PRODUCT_ID'],
"CATALOG_GROUP_ID" => $arPrices['CATALOG_GROUP_ID'],
"PRICE" => ceil(floatval($arPrices['PRICE']) / $rate),
"CURRENCY" => $cur_name,
);
CPrice::Update($arPrices['ID'], $arFields);
}
}
Данный скрипт обновляет 10 тыс. цен примерно за 15 секунд.
Больше полезных материалов в нашем Telegram канале. Вступайте и будем на связи! https://t.me/bf_conversion