1С-Битрикс: убрать склад из расчета доступного количества


Используя приведенный ниже код, можно реализовать ручной пересчет доступного количества товара (значение на вкладке “Параметры” раздела “Торговый каталог” в товаре), исключив из этой суммы какой-либо склад.

Доступное количество в товаре

В примере исключается склад с ID 1, его можно посмотреть здесь же на вкладке “Склады”. Либо в разделе “Магазин” -> “Складской учет” -> “Склады”.

AddEventHandler("catalog", "OnStoreProductUpdate", "recalculateQuantity"); 

function recalculateQuantity($id, $arFields) { 

  CModule::IncludeModule("catalog"); 

  static $handlerDisallow; 

  if ($handlerDisallow) return; 

  $rsStoreProduct = \Bitrix\Catalog\StoreProductTable::getList(array( 

    'filter' => array('=PRODUCT_ID'=> $arFields['PRODUCT_ID'], 'STORE.ACTIVE' => 'Y'), 

    'select' => array('AMOUNT', 'STORE_ID', 'STORE_TITLE' => 'STORE.TITLE'), 

  )); 

  $quantity = 0; 

  while ($arStoreProduct = $rsStoreProduct->fetch()) { 

  // здесь указываем в примере "1" - ID склада, исключаемого при суммировании доступного количества  
  if ($arStoreProduct['STORE_ID'] != 1) $quantity += (int)$arStoreProduct['AMOUNT'];

    $handlerDisallow = true; 

    CCatalogProduct::Update( 

      $arFields['PRODUCT_ID'], 

      array( 

        "QUANTITY" => $quantity 

      ) 

    ); 

    $handlerDisallow = false; 

  } 

}