Автоматически установить цену при обмене с 1С
Допустим стоит задача при выполнении обмена с 1С, повлиять на конечные цены которые попадут на сайт после завершения обмена. Для модификации цены воспользуемся событием OnSuccessCatalogImport1C - это стандартное событие, вызывается после окончания обмена одним XML-файлом. Создадим функцию OnBeforeAllPriceUpdateHandler и поместим данный код в файл
/bitrix/php_interface/init.php
если данного файла нет в вашем проекте просто создайте его по этому пути. Подробнее о файле init.php в этой статье
Не забудьте указать ID нужного информационнного блока. Обратите внимание, что в данном примере цены просто обнуляются, в переменную $price вы должны положить свое значение. Данное значение цены будет обновлено через API битрикс:
AddEventHandler('catalog', 'OnSuccessCatalogImport1C', 'OnBeforeAllPriceUpdateHandler');
function OnBeforeAllPriceUpdateHandler()
{
Cmodule::IncludeModule("catalog");
Cmodule::IncludeModule("iblock");
Cmodule::IncludeModule("sale");
$resIblock = CIBlockElement::GetList(
array('ID' => 'ASC'),
array(
'IBLOCK_ID' => 1 // id информационного блока 1С_CATALOG
),
false,
false,
array("ID")
);
$price = 0; // тут указываем что хотим сделать с ценой, например сконвертировать по текущему курсу полученные из 1С значение цены
while($arID = $resIblock->Fetch()){
$arPriceFields = array(
"PRODUCT_ID" => $arID['ID'],
"PRICE" => $price,
"CATALOG_GROUP_ID" => 1,
"CURRENCY" => 'RUB',
);
$res = CPrice::GetList(
array(),
array('PRODUCT_ID' => $arID['ID']),
false,
array('nTopCount' => 1),
array()
);
if($res){
CPrice::Update($arID["ID"], Array("PRICE" => $arPriceFields));
} else {
CPrice::Add($arPriceFields);
}
}
}