We have a Customer Order (CO) It has a Customer Order Line (COL) for a manufactured part that isn't in stock That line is connected to a Shop Order (SO) The Shop Order has a line (SOL) for a manufactured part that isn't in stock MRP finds that Invent Order shop order line and creates another Shop Order (SO2)
CO --> COL --> SO --> SOL --> SO2
How do I link the whole chain? How do I determine whether any given Shop Order is for a true customer demand, versus whether it's just to satisfy a safety stock?
Page 1 / 1
A direct link with the whole chain sounds like beyond the scope of classical make to stock planning such as MRP. It will be always a gross supply vs gross demand. There are other parameters in the calculation such as netting, lot sizing rules, etc that further dilute the possibility of having a direct link end-to-end. The more levels MRP has to dive down (e.g. 3 or 4 level BOM), you will see that then MRP indicates the source as “MRP Planned Demand”, due to the inherent way MRP works.
I’d say depending on how critical building this “link”, you’d have better chance using a proper MTO planning such as DOP (Dynamic Order Processing). DOP has its own negatives, such as being too nosy, but you could have a DOP and MRP mixed planning to have best of both worlds. If DOP is out of the question, possibly refining manufacturing setup to cut down some levels, and use manual pegging where possible would help you get a better shot at finding this elusive link. You could also try if MRP Action Proposals would be help too.
As mentioned by @asanka the only way to have a hard multilevel relationship between demand and supply is through DOP, or manual pegging.
However you can use the MRP Part Information/Bottom Up Planning to trace from where a demand origins in an MRP environment.
I had about same request, but another way, customer ask possible SO’s for COL. (much easier case as you have). As there is no direct unique links, I made custom fiels what shows all possible SO’s, and that was fine for them. Maybe you can do something similar but another way.
SELECT LISTAGG(SO, ' ; '|| CHR(13)||CHR(10)) WITHIN GROUP (ORDER BY SO) SO FROM ( SELECT order_no||' - '|| state||' - '|| revised_due_date||' - '|| revised_qty_due||' Qty' SO FROM shop_ord WHERE objstate NOT IN ('Closed','Planned','Cancelled') AND contract = 'xxxxx' AND part_no = :part_no )
The shop orders for pegged customer order demand are directly connected via the customer order number which is inherited as the Shop Order number - in our case, Axxxxxx vs 1xxxxxxx for inventory Shop Orders. We use a custom field on the shop order for soft linking the additional lower level demand to the upper level Customer Order. This has to be done manually by the Planner at the point of scheduling/releasing the shop order. If the Shop Order isn’t linked to the customer order via the customer field, it is either an inventory order it is isn’t relevant enough to have been marked. Why do you ask and what problem are you trying to solve?
Why do you ask and what problem are you trying to solve?
The Finance Department wants to differentiate between stock demand and customer demand for inventory grading. My concern with not diving deep enough is that grandchild parts will look overstocked when they're actually necessary to build in-demand parent parts. They agreed, but we weren't sure how easy this would be to do.
Relying on a custom field with manual entry assumes the data is mostly complete. This is a subtly different need than tracking the most important orders.
Fortunately, my further analysis found this isn't a critical issue most of the time, since grandchild shop orders don't spend a lot of time in limbo between release and reservation.