• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/component/storeamount.php
  • Класс: BitrixCatalogComponentStoreAmount
  • Вызов: StoreAmount::getVariationsTotalData
protected function getVariationsTotalData(array $variationIds): array
{
	$products = [];

	$filter = [
		'=PRODUCT_ID' => $variationIds,
		'=STORE.ACTIVE' => 'Y',
	];

	$filter = array_merge(
		$filter,
		AccessController::getCurrent()->getEntityFilter(
			ActionDictionary::ACTION_STORE_VIEW,
			StoreProductTable::class
		)
	);

	$commonProductData = StoreProductTable::getList([
		'select' => [
			'PRODUCT_ID',
			'MEASURE_ID' => 'PRODUCT.MEASURE',
			'PRICE' => 'PRODUCT.PURCHASING_PRICE',
			'CURRENCY' => 'PRODUCT.PURCHASING_CURRENCY',
			'QUANTITY_COMMON',
		],
		'filter' => $filter,
		'group' => ['PRODUCT_ID'],
		'runtime' => [
			new EntityExpressionField('QUANTITY_COMMON', 'SUM(AMOUNT)'),
		],
	])->fetchAll();

	foreach ($commonProductData as $productData)
	{
		$products[$productData['PRODUCT_ID']] = $productData;
	}

	$productQuantityReservedData = StoreProductTable::getList([
		'select' => [
			'PRODUCT_ID',
			'RESERVED_AMOUNT',
		],
		'filter' => [
			'=PRODUCT_ID' => $variationIds,
			'=STORE.ACTIVE' => 'Y',
		],
		'group' => ['PRODUCT_ID'],
		'runtime' => [
			new EntityExpressionField('RESERVED_AMOUNT', 'SUM(QUANTITY_RESERVED)'),
		],
	])->fetchAll();

	foreach ($productQuantityReservedData as $productData)
	{
		$products[$productData['PRODUCT_ID']]['QUANTITY_RESERVED'] = $productData['RESERVED_AMOUNT'];
	}

	return $products;
}