Jobs Processed Over Multiple Shifts in MES/Data Collection

First post, eek!

We are looking at utilising Data Collection (MES) within our various shop-floor areas. We have already implemented it in one area of the business and aside from human-errors, the system is working well.

In this area of the business each individual operator logs in with their employee barcode and starts/ends activity. The nature of this area of the business is that a job can be paused mid-production and would not be continuously processed over various shifts – e.g. it could be started by one employee in Shift 1 and then paused in Shift 1 but then resumed 4 hours later in Shift 2 by another employee.

The challenge we are now facing is how to deal with jobs that process continuously over various shifts.

All other areas of our business have jobs that could be started in Shift 1 by an employee and then cross over into Shift 2 to be ended by another employee – we wouldn’t ‘pause’ production due to a shift handover. We also don’t have specific machines/employees – e.g. 1 employee could run 5 different machines in the department (not at the same time).

The way we currently record our Time & Expense entries is retrospectively so hasn’t been a problem. We have separate departments, resource groups, and resources.

From my understanding I have 2x options and neither are particularly favourable…

  1. Employees start activity on a job during their shift, if the job will go over the shift, they will then end activity with a QTY of 0 (we don’t know how much has been produced until the end in some cases) and then mark the operation as ‘not complete’. The employee on the next shift would then start the activity and record the completed quantity when ending activity.
  • PROS: Provides visibility of who is working on the job and when
  • CONS: Mucks up efficiency information when looking at individual transactions which our production centres use for reporting. Also relies on employees remembering to end activity correctly / start activity in a timely manner.
  1. Create generic ‘Machine’ employees that can be used. This would allow a job to be started in Shift 1 and then continue into Shift 2 without needing to end/start activity.
  • PROS: Provides more accurate production information.
  • CONS: Prevents us from seeing who is completing what and when.
    I did wonder if the solution to this though would be to add a prompt on the labour comments making the employee add their name?

Has anybody else encountered this problem? If you have, how did you work around it? Is there another option I haven’t considered or been made aware of?

Thank you!

1 Like

Welcome @CWright !!

Do you have Advanced Planning and Scheduling?

Thank you!
Yes we do, not sure if relevant here but we also have Advanced Material Management.

Welcome!! And welcome to the multi-shift-operation club. :slight_smile:

We have the same problem and have been trying to find a work-around for years. ON the surface, the Epicor scheduling engine will not do this, if you have co-dependent resources (required) on an operation, when they have different availabilities. Eg - We have a machine and an operator required on an operation, and the machine is avail 20hr x 7 days, but the operator is 10hr x 5 days. Once the scheduler allocates a machine AND operator, it will only schedule that operation for that machine/Op pairing based on availability of both.

We’ve tried the virtual machine and virtual operator configuration, and while it works, you lose the link to the actual operator and their calendar exceptions. Plus, as operator counts change, the management of the virtual operators becomes an issue. And, if the operator count is different on each shift, it’s even hard to allocate the correct virtual operator count.

@jkane undertook a deep dive of this earlier this year, and I suppose he’s working up his response right now, but you can search for his posts where he explains some options and his findings. I’ve not had the time to adjust and test in our system, but it looks like he may have found the solution.

There are Ideas that you can vote on as well :slight_smile:
Job Operation should allow sequential resource | Epicor Ideas Portal

and

Support Multiple Shifts | Epicor Ideas Portal

I am definitely a fan of option 1 and do not like option 2. But that is my personal preference, both will work. I have never understood it when people say that entering 0 and not completing an operation is bad (not you, you didn’t say it, just going on a tangent). The employee logging in records 2 things, the time they spent on an operation and the quantity they finished. If they did not finish anything, then that is a valid quantity.

#1 should not mess up your efficiencies as you should be looking at the totals for the operation, not just a single transaction.

Yes, as @MikeGross said, I have developed an approach to have the schedule accurately reflect what employees are working on across shifts. This is really only relevant if you want your schedule and load to reflect reality, as it cannot right now without splitting operations across shifts. It is not a complete solution yet, @MikeGross has not been a good guinea pig. :laughing:

I would go with #1 as that provides the detail you will want. If you want to take a crack splitting your operations across shifts, let me know and I can explain the approach.

2 Likes

Kenan Thompson Snl GIF by Saturday Night Live

3 Likes

Thank you, I’d be intrigued to see what the approach looks like where you split operations across shifts please. Not entirely sure if we would be able to resource it here, but may be the missing puzzle piece and we’ve not realised it!

Ok! I did a lot of testing and was able to get the system to split operations across shifts, but it does not provide the cleanest results. Here is the writeup that I did.

Calendar Setup:

All calendars should have the Default Hours Per Day set to 24. Then the specific working hours should be selected each day.

Machine Resources

There should be as many calendars as the business requires that reflect what is reality. If a company runs two shifts, there should be a calendar for machine resources that run during both shifts. If there is a machine resource that only runs one shift, there should be a calendar for that. Etc.

Employee Resources

There should be a calendar for each shift. If employees get an hour’s lunch, the calendar can reflect that by leaving an hour open in the middle of the shift.

Resource Group/Resource Setup:

Machine Resources

The setup depends on the company’s current setup and if they split operations between machines to reduce lead time. My guess would be that a company that is trying to split across shifts does not generally try to split an operation between machines.

First the preferred option. To get the scheduling engine to split a job operation across shifts for machine resources, each RG should have only 1 Resource in it. This is because we are using Split Operations functionality and don’t want the engine to split the operation over multiple machines. The resource should be finite, have 1 scheduling block, and split operations as true.

The second option. If the company does want to split operations across machines and across shifts, they can use RGs or capabilities to group the like machines together. The resources should be finite, have 1 scheduling block, split operations as true, and a concurrent capacity equal to the length of a single shift.

Employee Resources

All employees can be in the same RG. The important thing is to put the correct calendar on each employee for the actual shift they work.

Method Creation

When creating a method, the scheduling blocks need to be set based on the total run time of the operation. If the shifts are 8 hours long and the operation will take 40 hours, the scheduling blocks should be set to 5.

Both the machine resource and employee resource need to be added as scheduling resources for the operation. An operation on 1 machine across two shifts would need two resources: the machine and the employee RG.

Results

Setting up Epicor this way will get the engine to split an operation over shifts. The machine resource will be selected and since it is a single resource in an RG, it will only split the operation over that one resource. The employee resource will select an employee for each shift based on the calendars that are assigned to the resources.

If a company cannot have a single resource in an RG, the same result can be reached using concurrent capacity. You can put an RG or a capability as the scheduling resource and setting the concurrent capacity will limit the engine to selecting only one resource per shift. There is the potential for the engine to schedule the operation on machine 1 for first shift and machine 3 for second shift, but you still get very close with less manual intervention.

Problems

Since Epicor is not really set up to be able to split operations across shifts, the above does come with problems. Here is what I have found so far:

  • Split Operation does an even split of the hours. If you have an operation that takes 21 hours and you run 8-hour shifts, the engine will create three 7-hour blocks.
  • You will get some really funny results due to split operations.
  • Complex solution that will break easily if there is not someone who fully understands it at the company.

I have tested this out and it does work. Although my testing was done in the pilot environment and the solution has not been done in production. If a company implemented this, a lot of stress testing would need to be done to find other quirks.

Ideas

There are two main Ideas I came up with that would make Epicor be able to handle this type of functionality better.

  1. A flag on Operation Scheduling Resources for “Keep on Resource”. This flag would tell the scheduling engine to only schedule the operation on the resource it first picks. Basically, once you pick machine 2 for the first scheduling block, every other scheduling block must be on machine 2. This helps get around the chance of the engine selecting different machines for different shifts. It would also speed up the engine as it is not checking every resource for every block. I think logic to check for a continuous block for the whole operation would have to be added too.

  2. A flag related to Scheduling Blocks that would allow the engine to do an un-even split and dynamically determine the Scheduling Blocks. I picture the logic being like this

  • Engine sees that an operation is estimated to take 21 hours and searches for a continuous time on a single machine resource.
  • Engine finds a block that starts with 1 ½ hours left on an employee resource and schedules that.
  • Engine calculates that 19 ½ hours are left and creates a second scheduling block.
  • Engine schedules the same machine resource for 8 hours and then looks for an employee resource.
  • Engine calculates that 11 ½ hours are left and creates a third scheduling block.
  • Engine schedules the same machine resource for 8 hours and then looks for an employee resource.
  • Engine calculates that 3 ½ hours are left and creates a fourth scheduling block.
  • Engine schedules the same machine resource for 3 ½ hours and then looks for an employee resource.
Customization

I also thought of a customization that could be done to make the results better.

Since the engine is being run finitely, there could be a data directive and/or function to intercept the writing to RTU. Since each operation is being run individually, changing the output of the engine should not impact the next scheduling step as it will look at RTU and see whatever was changed.

2 Likes

Are you also saying that the Configurator could calculate this value and set it accordingly on a Configurator generated MOM (on a quote)?
And what if you set it for a number <> 1, but also <> the correct calculated value? Say, we set everything to 4 - will short operations still get split into 4, and long operations fail to schedule?

This is the direction we were heading, but I think your findings may allow for a simpler solution. It’s still a cascading calendar sort of thing, but simpler. It would be MUCH simpler if Epicor could just get your scheduling block idea implmented instead of the even-split process it does today.

1 Like

Yes, I don’t see why that would not be possible. You know how long your shifts are, so once the est time is set, you could easily divide the est time by 8 and round up or down the scheduling blocks.

That just means that you will either get blocks that are longer or shorter than 8 hours. Everything will still schedule, you just might not get the split shifts like you wanted. So, yes an operation that is est 4 hrs will get split into 4 1 hour blocks.

The customization can be as simple as a function that gets called on an in transaction DD that smoothes out the rough edges of the even split. Since you would be doing this in a Finite schedule, the next block would not process until after the save of the first block.

But would it see that I changed the length of Block 1 and recalc Block 2 - or will it just assume the same even split? And what if my ‘rounding out’ of blocks means the last block isn’t required? In my head the code is getting complicated - but still not that bad.

I know we’re going down a rabbit hole here and until we try it, we’ll not really know the result. :slight_smile:

1 Like

Yes, deep in the weeds heading for the rabbit hole. :laughing:

And completely hi-jacked someone else’s post.

This is how I have mapped it out in my head.

  • First block hits the In Transaction DD.
  • Use the information in the record to send the employee, machine, and date to the function.
  • Do a check against RTU to see if any other rows already exist for Job/Asm/Op.
  • If no, use the inputs to find the earliest time both resources are available on the date passed.
  • Alter the record to start at the earliest and end at shift.
  • I forget if there is a field that you can already use, but basically have a field that you key the next record off of.
  • The second row comes in.
  • Do your check if other rows exist.
  • Sum the time of all the rows and subtract from the estimated. If > shift length, then you know to book the whole next shift, else just book time left.
  • Make sure the machine resource is the same and alter as necessary.

I mean, there is a lot more of little things that would need to be decided and tested, but when the next job goes to schedule it will see all of the altered records and consider those times. If you look at a scheduling log, you see that all of the RTU records are committed at the end as the last step. So it should not be too hard to create your own logic to use.

1 Like

how timely…

1 Like

Yep - that’s about it! Maybe one of us will get this up and running before Nashville :man_shrugging:

2 Likes