Не давно столкнулся с такой проблемой при выгрузке из 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
|
|
|