Задача стоит в автоматическом добавлении для товаров розничных цен на основе базовых с учётом наценки. Товары добавляются импортом из CSV. В файле импорта добавляется только базовая цена, розничная рассчитывается автоматически, остаётся лишь задать её для товаров. Проблема состоит в том, что функция CPrice::Add не срабатывает при вызове её в событии OnAfterIBlockElementAdd или OnProductAdd. Проверяю пока на одном создаваемом товаре. Один и тот же код обработки работает в командной php-строке в админке или просто в файле скрипте, но не работает в init.php.
Код |
---|
AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("AddPrice", "OnAfterIBlockElementAddHandler"));
class AddPrice
{
function OnAfterIBlockElementAddHandler(&$arFields)
{
$PRODUCT_ID = $arFields["ID"];
$PRICE_ROZNICA_ID=2; //код цены розницы
$ExtraTypeID=1; //код наценки
$arNewSelling = array(
'PRODUCT_ID' => $PRODUCT_ID,
'EXTRA_ID' => $ExtraTypeID, // код наценки
'CATALOG_GROUP_ID' => $PRICE_ROZNICA_ID, // ID типа цены (розничная цена)
'PRICE' => 0, // новая цена с наценкой
'CURRENCY' => 'RUB' // валюта!
);
if(CModule::IncludeModule("catalog"))
{
AddMessage2Log(print_r($arNewSelling,true),$PRODUCT_ID);
global $APPLICATION;
if(!CPrice::Add($arNewSelling, true))
{
if($ex = $APPLICATION->GetException())
AddMessage2Log($ex->GetString(),$PRODUCT_ID);
AddMessage2Log("Не выполнено!",$PRODUCT_ID);
}
else
{
AddMessage2Log("Успешно выполнено!",$PRODUCT_ID);
}
}
}
}
|
В чём может быть проблема? Может следует использовать событие вообще другого типа?
После создания товара на сайте и ручной обработке скриптом розничная цена с кодом 2 и наценкой с кодом 1 привязывается без вопросов, но вот из init.php функция CPrice::Add просто не выполняется. В логах задаётся один и тот же массив:
Код |
---|
Array
(
[PRODUCT_ID] => 1291
[EXTRA_ID] => 1
[CATALOG_GROUP_ID] => 2
[PRICE] => 0
[CURRENCY] => RUB
)
|
В случае невыполнения никакой ошибки не возвращается.