Arnel, your query is returning bill 3 as outstanding and a TotalBill amount of 5184 which is double the actual bill.
My simpler query returns only bills that have unpaid amount. To view all bills, just remove the WHERE clause. I would probably not use filter criteria in query and instead apply to report displaying records.
I modified to use FinalAmt.
SELECT tblBills.*, SumPmts FROM tblBills LEFT JOIN (SELECT BillNos, Sum(Amount) AS SumPmts FROM tblPayments GROUP BY BillNos) AS Pmts
ON tblBills.BNos = Pmts.BillNos WHERE GrossAmount>Nz(SumPmts,0)
Change db to Overlapping Windows and you can arrange objects to be viewed simultaneously. Really nice to compare query results.