Обучаю битриксу программистов, интеграторов. Подробнee ⇒

Автоматически менять на заданную цену в заданное число (агент)



Задача:
Автоматически менять на заданную цену в заданное число в каталоге CRM.

Используются ТОЛЬКО простые товары без торг предложений.
1. Добавила в каталоге у товаров 2 свойства
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();";
}
3. Посадила эту функцию на агент, который запускается раз в сутки
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

Сбер по номеру телефона +7 (953) 585-13-09 Вероника.
Спасибо!