I would suggest you do two group-by queries, one for each table, grouping by branch, gl id and currency, totaling the amounts, then two queries that compare the intermediate queries. First comparison could be a left join of g/l totals to sales total, then second could be a left joined from sales total to g/l total, looking for unmatched records. Something like:
qryGLTotal
SELECT Branch, [GL ID], Currency, sum(Amount) as MonthlyGLAmount
FROM [table G]
GROUP BY Branch, [GL ID], Currency;
qrySalesTotal
SELECT Branch, [GL ID], Currency, sum(Amount) as MonthlySalesAmount
FROM [table A]
GROUP BY Branch, [GL ID], Currency;
qryGLtoSales
SELECT qryGLTotal.Branch, qryGLTotal.[GL ID], qryGLTotal.Currency, qryGLTotal.MonthlyGLAmount, qrySalesTotal.MonthlySalesAmount
FROM qryGLTotal LEFT JOIN qrySalesTotal ON (qryGLTotal.Currency = qrySalesTotal.Currency) AND (qryGLTotal.[GL ID] = qrySalesTotal.[GL ID]) AND (qryGLTotal.Branch = qrySalesTotal.Branch);
qrySalesnoGL
SELECT [table A].Branch, [table A].[GL ID], [table A].Currency, [table A].Amount
FROM [table A] LEFT JOIN [table G] ON ([table A].Currency = [table G].Currency) AND ([table A].[GL ID] = [table G].[GL ID]) AND ([table A].Branch = [table G].Branch)
WHERE ((([table G].Branch) Is Null));