Preview:
SELECT 
    `Customer Name`, 
    `Sales Order Date`, 
    `Sales Order No`, 
    `Item Code`, 
    FORMAT(`Qty`, 2) AS `Qty`, 
    FORMAT(`Delivered Qty`, 2) AS `Delivered Qty`, 
    FORMAT(`Pending Qty`, 2) AS `Pending Qty`
FROM (
    -- Main sales order data
    SELECT 
        so.customer AS `Customer Name`, 
        so.transaction_date AS `Sales Order Date`, 
        so.name AS `Sales Order No`, 
        so_item.item_code AS `Item Code`,
        so_item.qty AS `Qty`, 
        IFNULL(so_item.delivered_qty, 0) AS `Delivered Qty`, 
        (so_item.qty - IFNULL(so_item.delivered_qty, 0)) AS `Pending Qty`,
        0 AS sort_order
    FROM 
        `tabSales Order` so
    JOIN 
        `tabSales Order Item` so_item ON so.name = so_item.parent
    WHERE 
        so.company = 'Cotton Craft Pvt Ltd'
        AND so.docstatus != 2  -- Exclude cancelled sales orders
        AND (%(from_date)s IS NULL OR so.transaction_date >= %(from_date)s)
        AND (%(to_date)s IS NULL OR so.transaction_date <= %(to_date)s)
        AND (so_item.qty - IFNULL(so_item.delivered_qty, 0)) > 0  -- Exclude rows where Pending Qty = 0
    
    UNION ALL
    
    -- Placeholder rows for customer grouping
    SELECT 
        so.customer AS `Customer Name`, 
        NULL AS `Sales Order Date`, 
        NULL AS `Sales Order No`, 
        NULL AS `Item Code`,
        NULL AS `Qty`, 
        NULL AS `Delivered Qty`, 
        NULL AS `Pending Qty`,
        1 AS sort_order
    FROM 
        `tabSales Order` so
    WHERE 
        so.company = 'Cotton Craft Pvt Ltd'
        AND so.docstatus != 2  -- Exclude cancelled sales orders
        AND (%(from_date)s IS NULL OR so.transaction_date >= %(from_date)s)
        AND (%(to_date)s IS NULL OR so.transaction_date <= %(to_date)s)
        AND EXISTS ( -- Only include customers that have at least one pending item
            SELECT 1 FROM `tabSales Order Item` soi 
            WHERE soi.parent = so.name 
            AND (soi.qty - IFNULL(soi.delivered_qty, 0)) > 0
        )
    GROUP BY 
        so.customer
) grouped_data
ORDER BY 
    `Customer Name`, sort_order, `Sales Order Date`, `Sales Order No`, `Item Code`;
downloadDownload PNG downloadDownload JPEG downloadDownload SVG

Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!

Click to optimize width for Twitter