• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/InventoryManagement/Helpers/Doctor.php
  • Класс: BitrixCatalogInventoryManagementHelpersDoctor
  • Вызов: Doctor::getSql
private function getSql(): string
{
	return '
		SELECT
			cp.ID AS `PRODUCT_ID`,
			cp.QUANTITY AS `PRODUCT_QUANTITY_AVAILABLE`,
			csp.QUANTITY_AVAILABLE AS `STORE_QUANTITY_AVAILABLE`,
			cp.QUANTITY_RESERVED AS `PRODUCT_QUANTITY_RESERVED`,
			csp.QUANTITY_RESERVED AS `STORE_QUANTITY_RESERVED`,
			sbr.QUANTITY_RESERVED AS `SALE_QUANTITY_RESERVED`
		FROM
			b_catalog_product AS cp
			LEFT JOIN (
				SELECT
					PRODUCT_ID,
					SUM(AMOUNT) as QUANTITY,
					SUM(QUANTITY_RESERVED) as QUANTITY_RESERVED,
					SUM(AMOUNT - QUANTITY_RESERVED) as QUANTITY_AVAILABLE
				FROM
					b_catalog_store_product
					INNER JOIN b_catalog_store ON b_catalog_store.ID = b_catalog_store_product.STORE_ID AND b_catalog_store.ACTIVE = "Y"
				GROUP BY PRODUCT_ID
			) as csp ON cp.ID = csp.PRODUCT_ID
			LEFT JOIN (
				SELECT
					sb.PRODUCT_ID,
					SUM(sbr.QUANTITY) AS QUANTITY_RESERVED
				FROM
					b_sale_basket AS sb
					LEFT JOIN b_sale_basket_reservation AS sbr ON sbr.BASKET_ID = sb.ID AND sbr.QUANTITY != 0
				WHERE
					sb.PRODUCT_ID > 0
					AND sbr.QUANTITY != 0
				GROUP BY sb.PRODUCT_ID
			) as sbr ON cp.ID = sbr.PRODUCT_ID
		WHERE
			(
				cp.QUANTITY != 0
				OR cp.QUANTITY_RESERVED != 0
				OR csp.QUANTITY != 0
				OR csp.QUANTITY_RESERVED != 0
				OR csp.QUANTITY_AVAILABLE != 0
				OR sbr.QUANTITY_RESERVED != 0
			)
	';
}