| Задача: Автоматически менять на заданную цену в заданное число в каталоге CRM. Используются ТОЛЬКО простые товары без торг предложений. |
NEW_PRICE - типа деньги
DATE_NEW_PRICE - типа дата без времени
2. функция в init.php
function SetNewPriceForProductsAgent(){
CModule::IncludeModule('iblock');
//получим товары, у которых надо обновить СЕГОДНЯ цену и НОВУЮ ЦЕНУ
$arFilter = [
"IBLOCK_ID"=>28,
"ACTIVE"=>"Y",
"PROPERTY_DATE_NEW_PRICE" => date("Y-m-d"),
"!PROPERTY_NEW_PRICE" => false
];
$arSelect = ["ID", "IBLOCK_ID","PROPERTY_NEW_PRICE"];
$res = CIBlockElement::GetList(["sort"=>"asc"], $arFilter, false, ["nPageSize"=>6000,"iNumPage"=>1], $arSelect);
$arItems = [];
$arIds = [];
while($arItem = $res->Fetch()){
$price = explode("|", $arItem["PROPERTY_NEW_PRICE_VALUE"]);
if(!empty($price[1]) && ($price[1]=='RUB')){ //базовая в рублях
$arItems[$arItem["ID"]] = $price[0];
$arIds[] = $arItem["ID"];
}
}
//получим текущие цены товаров
if(!empty($arIds) && CModule::IncludeModule('catalog')){
$dbPrices = CPrice::GetList(
[],
[
"PRODUCT_ID" => $arIds,
"CATALOG_GROUP_ID" => 1
],
false,
false,
["ID","PRODUCT_ID","PRICE"]
);
$arPrices = [];
while($arPrice = $dbPrices->Fetch()){
if($arPrice["PRICE"] == $arItems[$arPrice["PRODUCT_ID"]]){//цена не изменилась
unset($arItems[$arPrice["PRODUCT_ID"]]);
}
else{
$arPrices[$arPrice["PRODUCT_ID"]] = $arPrice["ID"];
}
}
//обновим цену или добавим новую
foreach ($arItems as $id => $newPrice){
$arPriceFields = [
"PRODUCT_ID" => $id,
"CATALOG_GROUP_ID" => 1,
"PRICE" => $newPrice,
"CURRENCY" => "RUB",
];
if(!empty($arPrices[$id])){//цена есть, обновляем на новую
CPrice::Update($arPrices[$id], $arPriceFields); }
else{//цены нет, добавляем
CPrice::Add($arPriceFields);
}
}
}
return "SetNewPriceForProductsAgent();";
} |