Модификация компонента «Элемент каталога» для учета остатков товара на региональных складах

В стандартном компоненте «Элемент каталога» часто отсутствует параметр 'STORES' учитывающий остатки товара на складах. В этом случае необходима доработка компонента.

Используем для этого файл компонента result_modifier.php, если данного файла в вашем компоненте нет, то создайте его в папке шаблона компонента.

Добавьте в него следующий код

        
global $DEGRES_REGION;

if (!empty($DEGRES_REGION['STORES']) && is_array($DEGRES_REGION['STORES']) && CModule::IncludeModule('catalog')) {

  $amount = 0;

  if (count($arResult['OFFERS']) > 0) {

    foreach ($arResult['OFFERS'] as $key => $offer) {

      $amount = 0;

      $rsStore = CCatalogStoreProduct::GetList(
        array(),
        array(
          'PRODUCT_ID' => $offer["ID"],
          'STORE_ID' => $DEGRES_REGION['STORES']
        ),
        false,
        false,
        array('AMOUNT')
      );
      while ($arStore = $rsStore->GetNext()){
        $amount = $amount + $arStore['AMOUNT'];
      }

      $arResult['OFFERS'][$key]['CATALOG_QUANTITY'] = $amount;
      $arResult['OFFERS'][$key]['PRODUCT']['QUANTITY'] = $amount;
    }

  } else {
    $rsStore = CCatalogStoreProduct::GetList(
      array(),
      array(
        'PRODUCT_ID' => $arResult["ID"],
        'STORE_ID' => $DEGRES_REGION['STORES']
      ),
      false,
      false,
      array('AMOUNT')
    );
    while ($arStore = $rsStore->GetNext()){
      $amount = $amount + $arStore['AMOUNT'];
    }

    $arResult['CATALOG_QUANTITY'] = $amount;
    $arResult['PRODUCT']['QUANTITY'] = $amount;
  }
}
      


Внимание!

Для учета количества товара доступного к покупке в настройках модуля «Торговый каталог» должен быть включен Количественный учет. Если для товаров количественный учет отключен, то они всегда будут доступны к покупке.