Задача стоит в автоматическом добавлении для товаров розничных цен на основе базовых с учётом наценки. Товары добавляются импортом из CSV. В файле импорта добавляется только базовая цена, розничная рассчитывается автоматически, остаётся лишь задать её для товаров. Проблема состоит в том, что функция CPrice::Add не срабатывает при вызове её в событии OnAfterIBlockElementAdd или OnProductAdd. Проверяю пока на одном создаваемом товаре. Один и тот же код обработки работает в командной php-строке в админке или просто в файле скрипте, но не работает в init.php.
В чём может быть проблема? Может следует использовать событие вообще другого типа?
После создания товара на сайте и ручной обработке скриптом розничная цена с кодом 2 и наценкой с кодом 1 привязывается без вопросов, но вот из init.php функция CPrice::Add просто не выполняется. В логах задаётся один и тот же массив:
В случае невыполнения никакой ошибки не возвращается.
Код |
---|
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 ) |
В случае невыполнения никакой ошибки не возвращается.