Сейчас использую код
Скрытый текст |
---|
[CODE] //CATALOG_GROUP_5 - Код базовой цены // UFA_PRICE_TYPE Код второго типы цены
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", Array("CUpdateTypePrice", "OnAfterIBlockElementUpdateHandler")); AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", Array("CUpdateTypePrice", "OnAfterIBlockElementUpdateHandler"));
class CUpdateTypePrice {
// создаем обработчик события "OnAfterIBlockElementUpdate" function OnAfterIBlockElementUpdateHandler(&$arFields) { // if ($arFields["IBLOCK_ID"] == PRODUCT_IBLOCK) { //dumps($arFields); $arSelect = Array("ID", "IBLOCK_ID", 'CATALOG_GROUP_5'); $arFilter = Array("IBLOCK_ID" => PRODUCT_IBLOCK, "ID" => $arFields["ID"]); $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect); if ($ob = $res->GetNextElement()) { $arField = $ob->GetFields(); // Диапазон цен для типов цен, подставляем код наценки в зависимости от цены поставщика if ($arField["CATALOG_PRICE_5"] >= 0 && $arField["CATALOG_PRICE_5"] < 200) { $EXTRA_UFA = UFA_CITY_CAT_EXTRA_100_200; $EXTRA_OTHER = OTHER_CITY_CAT_EXTRA_100_200; } if ($arField["CATALOG_PRICE_5"] >= 200 && $arField["CATALOG_PRICE_5"] < 5000) { $EXTRA_UFA = UFA_CITY_CAT_EXTRA_200_5000; $EXTRA_OTHER = OTHER_CITY_CAT_EXTRA_200_5000; } if ($arField["CATALOG_PRICE_5"] >= 5000) { $EXTRA_UFA = UFA_CITY_CAT_EXTRA_5000; $EXTRA_OTHER = OTHER_CITY_CAT_EXTRA_5000; } PriceTypeUpdate($arFields["ID"], UFA_PRICE_TYPE, $EXTRA_UFA); PriceTypeUpdate($arFields["ID"], OTHER_CITY_PRICE_TYPE, $EXTRA_OTHER);
// return false; } //} }
}
//Обновление типов цен function PriceTypeUpdate($PRODUCT_ID, $PRICE_TYPE_ID, $EXTRA_ID) { if (CModule::IncludeModule("sale") && CModule::IncludeModule("catalog")) { $arrFields = Array( "PRODUCT_ID" => $PRODUCT_ID, "CATALOG_GROUP_ID" => $PRICE_TYPE_ID, "EXTRA_ID" => $EXTRA_ID, "CURRENCY" => "RUB" ); $res = CPrice::GetList( array(), array( "PRODUCT_ID" => $PRODUCT_ID, "CATALOG_GROUP_ID" => $PRICE_TYPE_ID ) ); if ($arr = $res->Fetch()) { CPrice::Update($arr["ID"], $arrFields, true); return true; } else { CPrice::Add($arrFields); return true; } } }[/CODE] |
Но он работает только при импорте товаров из csv файла.
Необходимо чтобы при сохранение товара в ИБ он тоже работал и при выгрузке из 1с.
Причем CPrice::Add($arrFields); возвращает число (ид цены) но не сохраняется в карточке товара