We build various product and would like to drive our manufacturing schedule by product type. Until recently we’ve been relying on a BPM in Job Entry using changes in CheckOff5 that runs custom logic to move operational due dates after the Epicor scheduling engine runs. We call these jobs “Production Scheduled” and it works great for jobs that take weeks to build. However, we also have other types of jobs we want to stagger into the schedule and find that the scheduling engine is not quite flexible enough to do what we want for alternate product like quick turn parts and rework parts.
I started looking at the SchedulingEngine BO and saw an opportunity to hook into it using method directives (namely MoveJobItem) but I have discovered that there are processes that auto schedule including QuickJobEntry that do not run the directives (even though it appears under the covers that the scheduling engine is being called). Since I am unable to interface with the schedule engine, I’m curious what other people have done to resolve this. Has anyone created a 3rd party scheduling tool or have any work around ideas? We’ve played around with calendars and move time but are finding it is inconsistent and not everything gets placed where we want it to. Any advice is appreciated
I saw this post and thought “That sounds familiar… like what I did for MN Elevator”… hahah.. guess I was involved in that BPM many years ago (or one that started your company down that journey".
Sorry, but I dont have an answer for you. There are several differing triggers that do schedules, and MRP does its own work in such a way that BPMs are NOT triggered (due to possible negative side effects). This is one reason why we did the BPM based on a flag that is in the job itself. I have done a similar schedule override with a BPM when a job is marked FIRM or SCHEDULED (post processing).
Yes I do believe it was your logic we’ve used it since go live date about 10 years ago! Thanks for responding, any idea if customers can create their own 3rd party scheduling engines?
that would be hyper complex to do. probably would need to create your own engine that runs AFTER Kinetic does the initial schedule wiht MRP. This could be done with an Epicor FUNCTION and schedule it to be run after MRP.
No we don’t use global scheduling unfortunately. We just enter a job and it is scheduled if we check the box. We don’t use material constraints or calendars really which is a shame
The revised scheduling I created for MN Elevator used a theory that each operation took one week to complete. if i remember correctly, we simply scheduled each operation to be completed on a friday, and start on a monday, going back in time to find out when things should start. there was not any concept of how much work it took… only duration.
I have done the same kind of concept for another company that had duration based work… for example one company had an operation that took TWO WEEKS, but only had 2 HOURS of work. the operation was a “Get Permit” operation. we created a new BPM that looked at operations that were marked (in a UD Field) as “duration based”, and then the BPM rescheduled the operations based on the duration (UD) in the operation.
That would be the easiest answer in my opinion. If you were using Global Scheduling, you could use the priority to drive jobs that you want to get done first into the schedule.
Is there a way to make a single resource have infinite capacity and force in move time between the operations? I could dedicate a resource to each operation for each product type. In the end all we care about is that all operations of a certain type for a single job start and end on the same date regardless of the level within the subassemblies
@tanner You can interface with the scheduling engine and do what you want in a ubaq. The basic code is below. I also have routines that stretch a job by moving all operations after an operation and one that shortens a job by adding scheduling block to meet an X days start to finish.
And I have a bpm on MoveJobItem that does cleanup on job entry and the ubaq jobs.
Thanks! I actually found that thread before this post and it was extremely helpful to get me where I’m at. Unfortunately the issue I am encountering is I cannot intercept the parameters sent into the engine 100% of the time because Epicor does not honor BPM for the schedule engine under certain circumstances (ie QuickJobEntry and SalesOrderEntry Job Wizard).
This is a piece of code that pushes the first op back 14 days to make a gap in the operations calling the scheduling engine. It is done in a second pass after the job is created in the same baq.