It is easiest if you break down your items into sections.
Try this:
DROP TABLE IF EXISTS #ItemMasterFile;
DROP TABLE IF EXISTS #Probale;
DROP TABLE IF EXISTS #tbl_BalPacM;
DROP TABLE IF EXISTS #tbl_PckDetail;
DROP TABLE IF EXISTS #tbl_SBDispatchM;
DROP TABLE IF EXISTS #tbl_SBDispatachD;
GO
CREATE TABLE #ItemMasterFile(CodeItem INT,Descriptionitem VARCHAR(50))
CREATE TABLE #Probale(BID INT,CodeItem INT,prdQTY INT,Entrydate DATETIME,PID int)
CREATE TABLE #tbl_BalPacM(PID INT, Orderno int,Entrydate DATETIME,ID int)
CREATE TABLE #tbl_PckDetail(DID INT,PID int,BID int,Codeitem int,Pack_Qty int)
Create TABLE #tbl_SBDispatchM(ID int,Entrydate DATETIME)
Create TABLE #tbl_SBDispatachD (DID int,ID int ,PID int)
INSERT INTO #ItemMasterFile VALUES(1,'A')
INSERT INTO #ItemMasterFile VALUES(2,'B')
INSERT INTO #ItemMasterFile VALUES(3,'C')
INSERT INTO #ItemMasterFile VALUES(4,'D')
INSERT INTO #ItemMasterFile VALUES(5,'e')
INSERT INTO #ItemMasterFile VALUES(6,'f')
INSERT INTO #ItemMasterFile VALUES(7,'g')
INSERT INTO #ItemMasterFile VALUES(8,'h')
INSERT INTO #ItemMasterFile VALUES(9,'K')
INSERT INTO #ItemMasterFile VALUES(10,'L')
INSERT INTO #ItemMasterFile VALUES(11,'M')
INSERT INTO #Probale VALUES(10007,1,1,'2022-07-02',null)
INSERT INTO #Probale VALUES(10008,3,1,'2022-07-02',null)
INSERT INTO #Probale VALUES(10009,1,1,'2022-07-05',null)
INSERT INTO #Probale VALUES(10010,3,1,'2022-07-05',null)
INSERT INTO #Probale VALUES(10011,1,1,'2022-08-01',1001)
INSERT INTO #Probale VALUES(10012,3,1,'2022-08-01',1001)
INSERT INTO #Probale VALUES(10013,11,1,'2022-08-01',1001)
INSERT INTO #Probale VALUES(10014,10,1,'2022-08-01',1001)
INSERT INTO #Probale VALUES(10015,8,1,'2022-08-01',null)
INSERT INTO #Probale VALUES(10016,9,1,'2022-08-01',null)
INSERT INTO #Probale VALUES(10017,9,1,'2022-08-01',null)
INSERT INTO #Probale VALUES(10018,1,1,'2022-08-02',1002)
INSERT INTO #Probale VALUES(10019,3,1,'2022-08-02',1002)
INSERT INTO #Probale VALUES(10020,11,1,'2022-08-02',1002)
INSERT INTO #Probale VALUES(10021,10,1,'2022-08-02',1002)
INSERT INTO #tbl_BalPacM VALUES(1001,111,'2022-08-01',1)
INSERT INTO #tbl_PckDetail VALUES(1,1001,10011,1,1)
INSERT INTO #tbl_PckDetail VALUES(2,1001,10012,3,1)
INSERT INTO #tbl_PckDetail VALUES(3,1001,10013,11,1)
INSERT INTO #tbl_PckDetail VALUES(4,1001,10014,10,1)
INSERT INTO #tbl_BalPacM VALUES(1002,111,'2022-08-02',null)
INSERT INTO #tbl_PckDetail VALUES(1,1002,10018,1,1)
INSERT INTO #tbl_PckDetail VALUES(2,1002,10019,3,1)
INSERT INTO #tbl_PckDetail VALUES(3,1002,10020,11,1)
INSERT INTO #tbl_PckDetail VALUES(4,1002,10021,10,1)
INSERT INTO #tbl_SBDispatchM VALUES(1 ,'2022-08-01')
INSERT INTO #tbl_SBDispatachD VALUES (11 ,1,1001)
DECLARE @startdate date, @enddate date;
SET @startdate = '2022-08-01'
SET @enddate = '2022-08-02'
;with OpeningQty as (
select CodeItem,
SUM(prdQty) as OpeningQty
from #Probale
where EntryDate < @startdate
GROUP BY CodeItem
),
InQty as (
select CodeItem,
SUM(prdQty) as InQty
from #Probale
where EntryDate BETWEEN @startdate and @enddate
GROUP BY CodeItem
),
OutQty as (
SELECT pd.CodeItem,
SUM(Pack_Qty) as OutQty
FROM #tbl_SBDispatchM dm
INNER JOIN #tbl_SBDispatachD dd
ON dd.ID = dm.ID
INNER JOIN #tbl_BalPacM b
ON b.PID = dd.PID
INNER JOIN #tbl_PckDetail pd
ON pd.PID = dd.PID
WHERE dm.EntryDate BETWEEN @startdate and @enddate
GROUP BY pd.CodeItem
),
final as (
SELECT m.Descriptionitem as [Item],
ISNULL(o.OpeningQty,0) as [Opening QTY],
ISNULL(i.InQty,0) AS [IN QTY],
ISNULL(ot.[OutQty],0) AS [OUT QTY]
FROM #ItemMasterFile m
LEFT OUTER JOIN OpeningQty o
ON o.CodeItem = m.CodeItem
LEFT OUTER JOIN InQty i
ON i.CodeItem = m.CodeItem
LEFT OUTER JOIN OutQty ot
ON ot.CodeItem = m.CodeItem
)
SELECT *,
ISNULL(([Opening QTY]+[IN QTY])-[OUT QTY],0) as [Closing QTY]
FROM final
ORDER BY [Item]