A bit late at this point, but I wrote this up last week and apparently never clicked the post button. Putting it in anyways for future reference:
I've unfortunately been the customer cancelling the order a few times. Typically it's been my boss changing his mind on something and ordering me to cancel either the order, or my continued employment. Might be a program ending, company being sold, whatever. It's always been:
1. Cost of any materials ordered.
2. Cost of any work completed.
3. Cost of any work in progress/effort put in.
Item 3 is typically phrased in such a way that the supplier can be made whole because it provides a way to work in the cost of quoting, programming, etc. IME, they don't really end up billing for the quoting effort, which is unfortunate.
As for long term blanket orders, it needs to be clear up front who carries the risk. When negotiating them I've often been given two options:
Option 1, PO is for a year, but releases are only weekly, and provided 3 weeks out. The supplier makes about 1 months worth of parts at a time, and ships weekly. Obviously this doesn't get the same price break as having everything made at once.
Option 2, same as the above, but the supplier makes an entire year's worth up front, stores them all, carries the cost, and releases weekly as before. This allows a lower piece price because they all get run at once, but requires a statement in the contract that the customer is responsible for the cost for them even if they decide they don't want them later. It sucks if a quality issue or design change comes up. There also needs to be a time based issue as I've seen auto OEMs try to be clever by dropping the order to 1 per week instead of formally cancelling so that they don't have to pay for the (previously committed) parts on the shelf.