Задача: Автоматически менять на заданную цену в заданное число в каталоге 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();"; } |