Не давно столкнулся с такой проблемой при выгрузке из 1С каталога с товарными предложениями не ставилась цена для товара (цены были в предложениях), но мне она была необходима так как были самописные ajax фильтры (не хотелось их переделывать).
Для решения этой проблемы я создал в файле /bitrix/php_interface/init.php обработчик на добавление и обновление товара
CModule::IncludeModule("catalog"); CModule::IncludeModule("iblock"); AddEventHandler("iblock", "OnAfterIBlockElementAdd", "OnBeforeIBlockElementAddHandler"); AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "OnBeforeIBlockElementAddHandler"); // создаем обработчик события "OnBeforeIBlockElementUpdate и OnAfterIBlockElementAdd" для установки цены торгового предложения на сам товар function OnBeforeIBlockElementAddHandler(&$arFields) { $arSelect = Array("ID", "NAME", "PROPERTY_CML2_LINK", "CATALOG_GROUP_1" ); $res = CIBlockElement::GetList(Array(), Array("ID"=>$arFields['WF_PARENT_ELEMENT_ID']), false, Array("nPageSize"=>50), $arSelect); while($ar_res = $res->GetNextElement()) { // вычисление цены из массива $i = 1 ; foreach ($arFields['PRICES'][0] as $pri) { if($i == 3) { $price = $pri ; } $i++ ; } $ar_res = $ar_res->GetFields(); if($ar_res['PROPERTY_CML2_LINK_VALUE']) { $CATALOG_GROUP_ID_1 = 1; $CATALOG_CURRENCY_1 = 'RUB'; $arFieldsprice = Array( "PRODUCT_ID" => $ar_res['PROPERTY_CML2_LINK_VALUE'], "CATALOG_GROUP_ID" => $CATALOG_GROUP_ID_1, "PRICE" => $price, "CURRENCY" => $CATALOG_CURRENCY_1 ); $resPrice = CPrice::GetList( array(), array( "PRODUCT_ID" => $ar_res['PROPERTY_CML2_LINK_VALUE'], "CATALOG_GROUP_ID" => $CATALOG_GROUP_ID_1 ) ); if ($arr = $resPrice->Fetch()) { CPrice::Update($arr["ID"], $arFieldsprice); } else { CPrice::Add($arFieldsprice); } } } }
Теперь при выгрузке товаров на склад он будет брать цену из товарного предложения .
Опубликовано: 29 августа 2011
|
|