Битрикс: На складах есть, а доступное количество 0. Почему?

Меняем количество на складах хоть в ручную, хоть через 1С, но доступное количество при этом не меняется.
Я ставлю количество товара на складе например в ручную 50. А доступное количество все ровно 0 остается.
Настройки торгового каталога такие:
Включить количественный учет: Да
Складской учет: Нет

5bc191c7f330b223966284.png
  • Вопрос задан
  • 15381 просмотр
Пригласить эксперта
Ответы на вопрос 3
winer
@winer
занимаюсь разработкой сайтов на 1c-bitrix
https://dev.1c-bitrix.ru/learning/course/index.php...

Важно! Количество товара на складах носит исключительно информационный характер и не влияет на расчет остатков товара после заказов. Таким образом, изменять значения количества товара на складах необходимо вручную.
Ответ написан
Afres
@Afres
Product Owner
Столкнулся с похожей проблемой, только источник у нее был другой, ранее инфоблок с товарами был "торговым каталогом" и товарные предложения были "торговым каталогом" (из-за кривого обмена с 1С), после того как сделали нормальный обмен, у товаров убрали галку "Является торговым каталогом", чтобы нормально считалась доступность исходя из доступных товарных предложений, но не смотря на доступность ТП, товар имел статус "Недоступен", т.к. системное свойство "Доступность" имело значение "Нет".

Причину не нашли (искать причины косяков Битрикса не благодарная работа), но нашли решение, тупое, но работает, нужно пересохранить товарные предложения и тогда пересчитается доступность. Для этого можно массово деактивировать товары, а потом активировать заново и доступность будет корректной.

Надеюсь кому-нибудь поможет.
Ответ написан
Комментировать
@sanshung
1С-Битрикс программист
Скрипт который решает эту проблему
AddEventHandler("catalog", "OnStoreProductUpdate", ["StoreProduct", "update"]);
AddEventHandler("catalog", "OnStoreProductAdd", ["StoreProduct", "update"]);
AddEventHandler("catalog", "OnBeforeStoreProductDelete", ["StoreProduct", "delete"]);

class StoreProduct
{
    public static function update($id, $arFields)
    {
        $allAmountProduct = 0;
        $obStoreProduct
            = \Bitrix\Catalog\StoreProductTable::GetList(['filter' => ['PRODUCT_ID' => $arFields['PRODUCT_ID']]]);
        while ($arStoreProduct = $obStoreProduct->Fetch()) {
            if(($id == 0 && $arFields['STORE_ID'] != $arStoreProduct['STORE_ID']) or $id > 0) {
                $allAmountProduct = $allAmountProduct + $arStoreProduct['AMOUNT'];
            }
        }
        $arFieldsProduct = array(
            "QUANTITY" => $allAmountProduct,
        );
        \Bitrix\Catalog\Model\Product::update($arFields['PRODUCT_ID'], $arFieldsProduct);
    }
    
    public static function delete($id)
    {
        $arFields = \Bitrix\Catalog\StoreProductTable::getRowById($id);
        if ($arFields != null) {
            self::Update(0, $arFields);
        }
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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