• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/product/sku.php
  • Класс: BitrixCatalogProductSku
  • Вызов: Sku::loadProductPrices
static function loadProductPrices()
{
	if (empty(self::$calculatePriceTypes) || empty(self::$offersIds))
		return;

	sort(self::$offersIds);
	foreach (array_chunk(self::$offersIds, 500) as $pageOfferIds)
	{
		$filter = MainEntityQuery::filter();
		$filter->whereIn('PRODUCT_ID', $pageOfferIds);
		$filter->whereIn('CATALOG_GROUP_ID', self::$calculatePriceTypes);
		$filter->where(MainEntityQuery::filter()->logic('or')->where('QUANTITY_FROM', '<=', 1)->whereNull('QUANTITY_FROM'));
		$filter->where(MainEntityQuery::filter()->logic('or')->where('QUANTITY_TO', '>=', 1)->whereNull('QUANTITY_TO'));

		$iterator = CatalogPriceTable::getList(array(
			'select' => array(
				'PRODUCT_ID', 'CATALOG_GROUP_ID', 'PRICE', 'CURRENCY',
				'PRICE_SCALE', 'TMP_ID'  //TODO: add MEASURE_RATIO_ID
			),
			'filter' => $filter,
			'order' => array('PRODUCT_ID' => 'ASC', 'CATALOG_GROUP_ID' => 'ASC')
		));
		while ($row = $iterator->fetch())
		{
			/*
			if ($row['MEASURE_RATIO_ID'] !== null)
				continue;
			unset($row['MEASURE_RATIO_ID']);
			*/

			$typeId = (int)$row['CATALOG_GROUP_ID'];
			$offerId = (int)$row['PRODUCT_ID'];
			$productId = self::$offersMap[$offerId];
			if (!isset(self::$deferredSku[$productId][self::ACTION_PRICE][$typeId]))
				continue;
			unset($row['PRODUCT_ID']);

			if (!isset(self::$skuPrices[$productId][$typeId]))
				self::$skuPrices[$productId][$typeId] = $row;
			elseif (self::$skuPrices[$productId][$typeId]['PRICE_SCALE'] > $row['PRICE_SCALE'])
				self::$skuPrices[$productId][$typeId] = $row;
		}
		unset($row, $iterator);
		unset($filter);
	}
}