Special Report (General)
We overcame most of these issues many years ago by learning to use SQL-L better.
Eg SQL-L bank reconciliation will "gather up" all transactions on same date with identical reference field, including identical nulls. Its a feature, not a bug. Makes it possible to pay multiple invoices for multiple customers all tallied up into a single deposit.
Most banks do that if you deposit a bundle of cheques in a single batch.
Same for payments to suppliers.
So use the reference field cleverly to distinguish your different transactions.
We have very lightly modified the code to make it look like a "Bank Statement" in our region, eg changed headings for "Withdrawal" and "Deposit".
Just cosmetic, not logic changes.
It works for us for many years.