[QUOTE]Евгений Жуков написал:
[QUOTE] Артем Хлебус написал:
Хэлп.[/QUOTE]
Ваш обработчик зацикливается. [URL=http://dev.1c-bitrix.ru/community/blogs/vws/looping-event-handlers.php]Зацикливание обработчиков событий[/URL] [/QUOTE]
К сожалению ни к чему не привело, пробовал по-разному, остановился на этом:[CODE]AddEventHandler("catalog", "OnBeforePriceUpdate", array("MyClass", "OnBeforePriceUpdateHandler"));
class MyClass
{
protected static $handlerDisallow = false;
public static function OnBeforePriceUpdateHandler($PRICE_ID, $arFields)
{
// проверяем, что обработчик уже запущен
if (self::$handlerDisallow)
return;
// взводим флаг запуска
self::$handlerDisallow = true;
// наш код, приводящий к вызову CIBlockElement::Update
CModule::IncludeModule("iblock");
CModule::IncludeModule("sale");
CModule::IncludeModule("catalog");
$db_price = CPrice::GetList(
array(),
array(
"ID" => $PRICE_ID
)
);
if($ar_price = $db_price->Fetch())
{
if($ar_price['PRICE'] != $arFields['PRICE'])
{
CPrice::Update(1937, array("PRICE" => 123));
}
}
//вновь разрешаем запускать обработчик
self::$handlerDisallow = false;
}
}
[/CODE]Не уверен что модули нужны, но не помешают. Да и потом думаю с [CODE]CPrice::Update(1937, array("PRICE" => 123)); [/CODE]трудностей не возникнет,[CODE]$predID = CPrice::GetByID($arPrice[ID]); //метод передает массив ТОРГОВОГО ПРЕДЛОЖЕНИЯ
$elemID = CCatalogProduct::GetByID($arPrice["PRODUCT_ID"]); //метод передает массив ЭЛЕМЕНТА
CPrice::Update($predID[ID], array("PRICE" => $elemID["PURCHASING_PRICE"]));
[/CODE]
[QUOTE] Артем Хлебус написал:
Хэлп.[/QUOTE]
Ваш обработчик зацикливается. [URL=http://dev.1c-bitrix.ru/community/blogs/vws/looping-event-handlers.php]Зацикливание обработчиков событий[/URL] [/QUOTE]
К сожалению ни к чему не привело, пробовал по-разному, остановился на этом:[CODE]AddEventHandler("catalog", "OnBeforePriceUpdate", array("MyClass", "OnBeforePriceUpdateHandler"));
class MyClass
{
protected static $handlerDisallow = false;
public static function OnBeforePriceUpdateHandler($PRICE_ID, $arFields)
{
// проверяем, что обработчик уже запущен
if (self::$handlerDisallow)
return;
// взводим флаг запуска
self::$handlerDisallow = true;
// наш код, приводящий к вызову CIBlockElement::Update
CModule::IncludeModule("iblock");
CModule::IncludeModule("sale");
CModule::IncludeModule("catalog");
$db_price = CPrice::GetList(
array(),
array(
"ID" => $PRICE_ID
)
);
if($ar_price = $db_price->Fetch())
{
if($ar_price['PRICE'] != $arFields['PRICE'])
{
CPrice::Update(1937, array("PRICE" => 123));
}
}
//вновь разрешаем запускать обработчик
self::$handlerDisallow = false;
}
}
[/CODE]Не уверен что модули нужны, но не помешают. Да и потом думаю с [CODE]CPrice::Update(1937, array("PRICE" => 123)); [/CODE]трудностей не возникнет,[CODE]$predID = CPrice::GetByID($arPrice[ID]); //метод передает массив ТОРГОВОГО ПРЕДЛОЖЕНИЯ
$elemID = CCatalogProduct::GetByID($arPrice["PRODUCT_ID"]); //метод передает массив ЭЛЕМЕНТА
CPrice::Update($predID[ID], array("PRICE" => $elemID["PURCHASING_PRICE"]));
[/CODE]