I think I have a workaround/fix, but you'll have to do some checking/verifying with your data.
Here is some sql that should identify QtyAvailable for each Product whether or not they have had sales.
In fact it deals with Sales, and then adds in those that had NO sales to identify total QtyAvailable and then TotalValue of Available Stocks.
The first part is what currently exists. After UNION,is the part that deals with Products that have had no sales.
Code:
SELECT QryStockAvailableSub.BatchNo, QryStockAvailableSub.PDate, Products.ProductDesc, QryStockAvailableSub.PQty AS [Purchased Qty], QryStockAvailableSub.PPrice, IIf([TSale]>[popn],[pruntot]-[TSale],[pqty]) AS AvailableQty, [AvailableQty]*[PPrice] AS StockValue
FROM Products INNER JOIN (QryTotalSales INNER JOIN QryStockAvailableSub ON QryTotalSales.Product = QryStockAvailableSub.Product) ON Products.ProductId = QryTotalSales.Product
WHERE (((QryStockAvailableSub.PDate)<=[forms]![frmreports]![TDate]) AND ((QryStockAvailableSub.PRunTot)>[TSale]))
UNION SELECT Purchase.BatchNo, Purchase.PDate, Products.ProductDesc, Purchase.PQty AS PurchasedQty, Purchase.PPrice, Purchase.PRunTot AS AvailableQty, ([AvailableQty]*[PPrice]) AS StockValue
FROM Products INNER JOIN (Purchase LEFT JOIN Sales ON Purchase.Product = Sales.Product) ON Products.ProductId = Purchase.Product
WHERE (Sales.Product Is Null AND Purchase.PDate<=[forms]![frmreports]![TDate]);
I named this query: QryStockAvailableWithAndWithoutSales
You have to change the record source of the Report: StockReportOnFifoBasis
From: QryStockAvailable
TO : QryStockAvailableWithAndWithoutSales
If you are unclear with this process, let me know, and I'll send a new database with the changes.
It is important to test with some sample data before making this a permanent change.