1. You can join to the currency table twice in the same query. Just add it to the grid a second time. The second instance will have "_1" as a suffix. It is not a duplicate table it is a second reference so you can solve the problem of sales and purchases having different currency types.
2. It makes no sense to have the report in numerous currencies. You need to convert the currency to some common currency at some point. It is probably easiest to store everything in your common currency to facilitate reporting and calculation. Why would you want to do the conversion every time you need the value. You need to store the date of the conversion if it is not the same as the transaction date as well as the transaction currency.