getAvailableQuantityByStore
\Bitrix\Sale\Result public \Bitrix\Catalog\Product\CatalogProvider::getAvailableQuantityByStore( array $products );
Метод рассчитывает доступное количество товаров с разбивкой по складам. Он ограничивает результат общим доступным остатком товара, если включен контроль количества. Нестатический метод.
Параметры
| Параметр | Описание |
|---|---|
$products |
Массив товаров с идентификаторами товаров в ключах. Складские количества передают в QUANTITY_LIST_BY_STORE в формате код позиции корзины => [идентификатор склада => количество]. Для внутреннего расчета данных каталога дополнительно передают QUANTITY_LIST с теми же кодами позиций и суммарным количеством каждой позиции по складам |
Возвращаемое значение
Метод возвращает объект \Bitrix\Sale\Result. Ключ AVAILABLE_QUANTITY_LIST_BY_STORE содержит массив вида идентификатор товара => [идентификатор склада => доступное количество].
Метод распределяет запрошенные количества с учетом общего количества товара и переданного резерва. Он не проверяет фактический остаток на каждом указанном складе. Если количество определить не удалось, складской массив товара может быть пустым; товары без данных каталога могут отсутствовать в результате.
Пример
<?php
use Bitrix\Catalog\Product\CatalogProvider;
use Bitrix\Main\Loader;
if (!Loader::includeModule('catalog') || !Loader::includeModule('sale'))
{
throw new RuntimeException('Не удалось подключить модули catalog и sale');
}
// Идентификаторы существующих товара и склада
$productId = 123;
$storeId = 1;
$provider = new CatalogProvider(['SITE_ID' => SITE_ID]);
$result = $provider->getAvailableQuantityByStore([
$productId => [
'PRODUCT_ID' => $productId,
'BASKET_CODE' => 'basket-item-1',
'QUANTITY_LIST' => ['basket-item-1' => 1],
'QUANTITY_LIST_BY_STORE' => [
'basket-item-1' => [$storeId => 1],
],
],
]);
if (!$result->isSuccess())
{
echo implode(PHP_EOL, $result->getErrorMessages());
return;
}
print_r($result->getData()['AVAILABLE_QUANTITY_LIST_BY_STORE'][$productId] ?? []);
© «Битрикс», 2001-2026, «1С-Битрикс», 2026