Интернет-агентство Александра Лырмина
Сайты на Битрикс от профессионала
с 15-ти летним опытом

Неверное число товара после включения складского учета

Неверное число товара после включения складского учета Ниже привожу скрипт который выравнивает количество товаров на складе с количественным учётом без учёта резервирования товара.
<?
// Устанавливаем параметры торгового каталога количественный учёт, резервирование товара и покупки при нуле
// в значиния по умолчанию используя CCatalogProduct::Update.
// Формируем Массив товаров $arProducts, где ключ - ID товара
Cmodule::IncludeModule('catalog');
$db_res = CCatalogProduct::GetList(
array(
"QUANTITY" => "DESC"
),
array(),
false,
false,
array(
"ID",
"ELEMENT_NAME",
"QUANTITY",
"QUANTITY_RESERVED",
"QUANTITY_TRACE_ORIG",
"CAN_BUY_ZERO_ORIG",
"NEGATIVE_AMOUNT_TRACE_ORIG",
"QUANTITY_TRACE",
"CAN_BUY_ZERO",
"NEGATIVE_AMOUNT_TRACE",
"SUBSCRIBE_ORIG",
"SUBSCRIBE"
)
);
while ($arProduct = $db_res->Fetch())
{
$arProducts[$arProduct["ID"]] = $arProduct;
CCatalogProduct::Update(
$arProduct['ID'],
Array(
"QUANTITY_TRACE" => "D",
"NEGATIVE_AMOUNT_TRACE" => "D",
"CAN_BUY_ZERO"=>"D"
)
);
}
$ELEMENTS = array_keys($arProducts);
array_unique($ELEMENTS);
sort($ELEMENTS);

// Получаем остатки товара на складах и дополняем массив $arProducts
// STORE - количество товара на всех складах
// QUANTITY_NEW - сумма остатков товара на складах
$rsStore = CCatalogStoreProduct::GetList(
array("PRODUCT_ID" => "ASC"),
array(
'PRODUCT_ID' => $ELEMENTS,
),
false,
false,
array("PRODUCT_ID", "AMOUNT", "STORE_ID")
);
while($arStore = $rsStore->Fetch())
{
$arProducts[$arStore['PRODUCT_ID']]["STORE"][$arStore['STORE_ID']] = $arStore['AMOUNT'];
$arProducts[$arStore['PRODUCT_ID']]["QUANTITY_NEW"] += $arStore['AMOUNT'];
}

// Прописываем новое значение количества товара в количественный учёт
foreach ($arProducts as $arProduct) {
if($arProduct["QUANTITY"] != $arProduct["QUANTITY_NEW"])
{
CCatalogProduct::Update($arProduct["ID"], Array("QUANTITY" => $arProduct["QUANTITY_NEW"]));
}
}

//print_r($arProducts);
?>
Возврат к списку