Finite Capacity Resource Scheduling

Right now, we have all infinitely scheduled resources and run a full Regen MRP each night. We are trying to institute finite scheduling on some of our constraint resource groups. We set our operations to the resource group level. Following all the steps below, we cannot get the scheduler to finite schedule. It will have overlapping jobs consistently throughout the finite horizon. Simply put, nothing is changing from when we were infinitely scheduling.

Steps followed:

  1. I started with a resource group with a single resource to finite capacity schedule. I set the finite horizon on the resource group and resource to 120 and click the finite capacity on the resource.
  2. I set the Finite Horizon to 120 on the Site and Company Maintenance.
  3. I set the production calendar to our normal company calendar on both, as well. I also checked this calendar to make sure we have at least a solid 8 hour block available M-F.
  4. Ran Generate Shop Load. Likely unnecessary, but I ran the shop load report to see that Epicor showed this resource group had 40 hours capacity. It showed it had negative hours for every week listed (over the 40).
  5. Ran MRP net change with the parts that go through that Operation/Resource Group. We clicked the box Run Finite Scheduling during MRP Calculation (which we never do regularly)
  6. Ran a full MRP regen across the entire company with same checkbox true.
  7. Ran Global Scheduling with finite load checkbox true.

All these complete successfully, and seem to schedule properly if we were still infinite capactiy. We are also entirely a make to inventory and ship from inventory company. Our MRP does properly backward schedule every job correctly when we are using infinite.

I have checked Epicor KB KB0038311 - How Finite Capacity works in Epicor
Also checked through each step on this:

Can anyone offer an insight on something else I should check or change that is needed for Finite Scheduling?

Did you run Calculate Global Scheduling Order? That’s where global scheduling gets Days Late (I think) and overall priority (definitely). You seem to have covered your bases, but that one item was missing from your list.

I had not. Am running it now. I’ll update as it completes. Looks like it can only be run site wide.
It completed, but looking at the F1 help on it, it looks like I need to run global scheduling after, so I’m doing that now.

Yeah, Global Scheduling needs the Order calculated first. Not quite sure what it would do without it. Nothing? I know GS doesn’t touch a job if certain fields are left at zero (which means Order couldn’t figure them out).

Anyway, once the order is sorted out, GS is going to backwards schedule from due date (which should be similar to your MRP dates), until it hits a capacity limit. From there, it should forward schedule the constrained resource. It’s going to use order and priority from the Calc program to decide which job gets to sit at the front of the line and which get sent to the back, while generally minimizing days late.

This is all in the F1 help, BTW.

Also, if you change scheduling types (finite to infinite, infinite to finite) you need to remove all of the Jobs from the schedule. Epicor will hold the “original” type when the Job was first scheduled. The only way to fix this is to remove the Job from the schedule and then reschedule.

I would test it on 1 job first to make sure there is not something else causing the issue.

@jtownsend & @jkane Thank you for the assistance!

I believe we have success on this. Right now, it looks like Epicor is planning properly for a 120 days finite horizon. It seems the Global Scheduling Order run was the fix for our issue. I will confirm this with a run across another resource group. Once complete, I’ll mark @jtownsend 's reply as the solution.

I have not encountered the Global Scheduling Order menu yet. It is good to know that it exists. I assumed that MRP would be able to fill in the scheduling necessary to do this, but, as always, I have more to learn.

Do you typically run this daily, similar to how we run MRP, and then the Global Scheduling process following it?

Always run Calc Order right before Global Scheduling.

There is an “Adjust Global Scheduling Order” app you can use to manually tweak things instead of letting Calc Order handle it, but I honestly wouldn’t touch it. Global Sched Order uses user-unfriendly numbers to prime Global Scheduling. Schedulers should be managing their job priorities and req dates instead and letting the system make the integer calculations from there.

To grossly simplify things:
MRP is, basically, for matching supply to demand. So if a job is going to be late for an order, it’s going to suggest you do something. Otherwise, it doesn’t necessarily care. Finite capacity just means it’s going to try to plug the unfirm job into an open slot.

Global scheduling takes the entirety of your jobs, ranks them by priority, require date, and the time needed for inputs to arrive. If possible, it will backwards schedule everything from the due date and be done. However, if you’re constrained it makes tradeoffs. It’s not really looking at demand… It will not create new jobs to fill unmet demand. It will not tell you your require date is out of line with what you really need. That’s what MRP is for.

So you need both. MRP to satisfy demand with new jobs and PO’s. GS to prioritize the jobs you’ve got already. MRP is a crappy scheduler. GS will never create a job and almost blindly follows the require date on your job as its goal.

I marked this as the solution, @jtownsend. This is a fantastic explanation and makes sense to me. I understand there are a ton of other complexities to go into scheduling and MRP planning. However, this helps me understand the purposes of each.

The missing element for us was the Calculate Global Scheduling Order. I confirmed this with a second Resource Group that looks great now. I can see no concurrent jobs for the new 365 Finite Horizon I created for our Site and Resource Group. Then, immediately following this Horizon, Epicor is planning infinitely, exactly as expected and wanted.

Our next steps are to get this into LIVE and I plan on creating a Process Set to run our MRP, Generating PO Suggestions, Calculate Global Scheduling Order, and then Global Scheduling each night.