@denism300

Как в Битриксе обновить доступное количество товара?

Задача такая: в фиде количество товаров разбито по складам, при импорте нужно его просуммировать и получившуюся сумму записать в доступное количество.
Написал такой обработчик:
use Bitrix\Main\Loader;
use Bitrix\Catalog\Model\Product;
use Bitrix\Catalog\StoreProductTable;
use CIBlockElement;

Loader::includeModule('iblock');
Loader::includeModule('catalog');

class ProductSetQtyAutoUpdate
{
    public static function onAfterIBlockElementSetPropertyValuesExHandler($elementId, $iblockId, $propertyValues, $propertyList)
    {
        if (in_array($iblockId, array(2, 3))) {
            $productItem = new CIBlockElement;
            // Получаем значения свойств
            if (2 == $iblockId) {
                $ruNizQty = isset($propertyValues[62]) ? (int)$propertyValues[62] : 0;
                $ruPnzQty = isset($propertyValues[63]) ? (int)$propertyValues[63] : 0;
            }
            if (3 == $iblockId) {
                $ruNizQty = isset($propertyValues[70]) ? (int)$propertyValues[70] : 0;
                $ruPnzQty = isset($propertyValues[71]) ? (int)$propertyValues[71] : 0;
            }

            $previewText = isset($propertyValues['IE_PREVIEW_TEXT']) ? html_entity_decode($propertyValues['IE_PREVIEW_TEXT']) : '';
            $detailText  = isset($propertyValues['IE_DETAIL_TEXT']) ? html_entity_decode($propertyValues['IE_DETAIL_TEXT']) : '';

            $totalQty = $ruNizQty + $ruPnzQty;

            $arData = array(
                "PREVIEW_TEXT_TYPE" => "html",
                "PREVIEW_TEXT_TEXT" => $previewText,
                "DETAIL_TEXT_TYPE"  => "html",
                "DETAIL_TEXT_TEXT"  => $detailText,
                "QUANTITY"                 => $totalQty,
            );

            AddMessage2Log(print_r($totalQty, 1), "ProductSetQtyAutoUpdate");
            // Обновляем общее количество товара
            $productItem->Update($elementId, $arData);

            // Обновляем количество товаров для склада с ID 1
            self::updateStoreQuantity($elementId, 1, $ruNizQty);

            // Обновляем количество товаров для склада с ID 2
            self::updateStoreQuantity($elementId, 2, $ruPnzQty);
        }
    }
}

который висит на событиях
EventManager::getInstance()->AddEventHandler("iblock", "OnAfterIBlockElementSetPropertyValues", array("ProductSetQtyAutoUpdate", "onAfterIBlockElementSetPropertyValuesExHandler"));
EventManager::getInstance()->AddEventHandler("iblock", "OnAfterIBlockElementSetPropertyValuesEx", array("ProductSetQtyAutoUpdate", "onAfterIBlockElementSetPropertyValuesExHandler"));

И количество не обновляется. Описание и краткое описание, при этом, корректно обрабатываются.
В отладке, в переменной $totalQty количество > 0
  • Вопрос задан
  • 241 просмотр
Пригласить эксперта
Ответы на вопрос 1
no_one_safe
@no_one_safe
Для обновления количества товара необходимо использовать другой класс
CCatalogProduct::Update
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы