• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/product/catalogprovider.php
  • Класс: BitrixCatalogProductCatalogProvider
  • Вызов: CatalogProvider::getCatalogProducts
static function getCatalogProducts(array $list, array $select): array
	{
		$usedStoreInventory = CatalogConfigState::isUsedInventoryManagement();

		$typesWithoutStores = [
			CatalogProductTable::TYPE_SET => true,
			CatalogProductTable::TYPE_SKU => true,
			CatalogProductTable::TYPE_SERVICE => true,
		];
		$typesWithoutReservation = [
			CatalogProductTable::TYPE_SET => true,
			CatalogProductTable::TYPE_SKU => true,
			CatalogProductTable::TYPE_SERVICE => true,
		];

		if (empty($select))
		{
			$select = ['*'];
		}
		else
		{
			$select[] = 'ID';
			$select[] = 'TYPE';
			$select[] = 'AVAILABLE';

			$select = array_unique($select);
		}
		MainTypeCollection::normalizeArrayValuesByInt($list, true);
		if (empty($list))
		{
			return [];
		}
		$resultList = [];
		foreach (array_chunk($list, 500) as $pageIds)
		{
			$iterator = CatalogModelProduct::getList([
				'select' => $select,
				'filter' => [
					'@ID' => $pageIds,
				],
			]);
			while ($row = $iterator->fetch())
			{
				$row['ID'] = (int)$row['ID'];
				$row['TYPE'] = (int)$row['TYPE'];
				$row['QUANTITY'] = (float)$row['QUANTITY'];
				$row['QUANTITY_RESERVED'] = (float)$row['QUANTITY_RESERVED'];
				$row['CHECK_QUANTITY'] = (
					$row['TYPE'] !== CatalogProductTable::TYPE_SERVICE
					&& $row['QUANTITY_TRACE'] === CatalogProductTable::STATUS_YES
					&& $row['CAN_BUY_ZERO'] === CatalogProductTable::STATUS_NO
				);
				CatalogProductSystemField::prepareRow($row, CatalogProductSystemField::OPERATION_PROVIDER);

				if (isset($typesWithoutStores[$row['TYPE']]))
				{
					$row['USED_STORE_INVENTORY'] = false;
				}
				else
				{
					$row['USED_STORE_INVENTORY'] = $usedStoreInventory;
				}
				if (isset($typesWithoutReservation[$row['TYPE']]))
				{
					$row['USED_RESERVATION'] = false;
					$row['QUANTITY_RESERVED'] = 0;
				}
				else
				{
					$row['USED_RESERVATION'] = true;
				}

				$resultList[$row['ID']] = $row;
			}
			unset($row, $iterator);
		}
		unset($pageIds);

		return $resultList;
	}