You could have repeating rows in your products pricing with a date field to archive it. If null, the price is current. If not, it gives you a marker that you can match up with an invoice or PO. My db background is mechanical and ISO related databases, so I've never really understood this problem. It's always been my understanding that your PO or invoice line item contains whatever price was current at the time as a field record, not as a reference to the price data. That way if it was $1 at the time, it remains $1 on the report/invoice/PO forever.
The more we hear silence, the more we begin to think about our value in this universe.
Paraphrase of Professor Brian Cox.