- Модуль: 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
)
';
}