Подниму тему.
Нужно менять параметр CAN_BUY_ZERO в зависимости от свойства товара. Кусок кода который работает если запустить руками
Код |
---|
if( Cmodule::IncludeModule('catalog')){
$arFilter = Array(
"IBLOCK_ID"=>36,
"ACTIVE"=>"Y",
"ID"=>331
);
$res = CIBlockElement::GetList(Array("SORT"=>"ASC", "PROPERTY_ORDER_STATUS"=>"ASC"), $arFilter, Array("PROPERTY_ORDER_STATUS"));
while($ar_fields = $res->GetNext())
{
if($ar_fields["PROPERTY_ORDER_STATUS_ENUM_ID"]>0){
$property_enums = CIBlockPropertyEnum::GetList(Array("DEF"=>"DESC", "SORT"=>"ASC"), Array("IBLOCK_ID"=>36, "CODE"=>"ORDER_STATUS", "ID"=>$ar_fields["PROPERTY_ORDER_STATUS_ENUM_ID"]));
while($enum_fields = $property_enums->GetNext())
{
dump($enum_fields);
if(!empty($enum_fields) && $enum_fields["XML_ID"]!="n_1") {
$PRODUCT_ID = 331; // id товара
$arFields = array('CAN_BUY_ZERO' => "Y", 'QUANTITY_TRACE'=>"N");// зарезервированное количество
CCatalogProduct::Update($PRODUCT_ID, $arFields);
echo 1;
}else{
$PRODUCT_ID = 331; // id товара
$arFields = array('CAN_BUY_ZERO' => "N", 'QUANTITY_TRACE'=>"Y", 'QUANTITY' => 0);// зарезервированное количество
CCatalogProduct::Update($PRODUCT_ID, $arFields);
echo 2;
}
}
}
}
|
Дальше помещаю его в OnAfterIBlockElementUpdate
и метод CCatalogProduct::Update($PRODUCT_ID, $arFields); начинает отдавать false
Вопрос почему он не работает в событиях.
пробовал еще
Код |
---|
$result = \Bitrix\Catalog\Model\Product::update(intval($arFields['ID']),$arFields); |
результата нет
в $arFields['ID'] приходит id товара
Есть у кого идеи?