so a customer orders a bunch of items and we end up needing to make a minor substitution of a product. Same thing, same specification, different product code, perhaps from a different supplier. We can change this on the delivery order, but then the sales order never gets completed. I can't cancel the sales order and re-raise it with different products because some of them might already have been shipped. Is there a way to manually tell a sales order that it has been fully delivered even if the system thinks it hasn't?
I have a similar situation managing spare parts sales for agricultural machinery. In my case I use manufacturing. Let me explain.
Each product can have few substitutes or alternatives. I manage them through product specification for each substitute. Lets say your customer whant to buy 6008 bearing and you have about 3 possible alternatives of SKF, NSK and INA. You make 3 specifications for "6008 bearing" and depending on which one you will get from supplier you choose the appropriate specification in production order.
this scheme is useful when you have not lot of such sales. But when you have thousands of products in your DB (I have more than 250k) it's better to choose the propper product during sales Quotation and Purchase to have the same product in Pickings.