MRP creates jobs with prod qty = 0

We are running Epicor 10.2.700.39 on prem. We recently discovered an issue with our MRP runs. It seems that since last November we have MRP jobs being produced where the Prod Qty = 0. The number of parts and the specific part numbers varies each time. When we check the MRP logs, the log shows it has created the MRP job with Quantity 1. (Our parts are set up with Min/Max Lot Sizing set to “1”). When we review the un-firm jobs by part number in Job Status Maintenance, the MRP jobs display with Prod Qty = 0. Opening up the MRP job in Job Entry also displays Prod Qty = 0 and the demand link is blank. We presented this to Epicor Tech Support and they requested a copy of our database so they could test. When Tech Support eliminated the use of all customizations and BPM’s on the copy of our database, the problem is resolved and they did not get any MRP jobs where Prod Qty = 0. They advised us to do the same. The problem is when we remove all customizations and disable all BPMs (data and method directives), we still get the MRP jobs where Prod Qty = 0. Epicor is now saying that they will need a technical person in Epicor Services to look at this. I thought I would bring this situation here knowing that some of the best Epicor technical people are in this forum. Has anyone ever seen anything similar to this or maybe see some things we can try to work toward a solution?

Is this potentially a decimal rounding issue? What would you expect the prod quantity to be if you removed the min/max lot size of 1?

Any chance there are screen customizations that could be affecting them?

I think it is a good thought, but this issue just started at the end of last year and all of our parts are and have been “each” for years. Min/max has always been 1, so if it were the case, it should have shown up well before then. We are guessing that something changed then, so unless your thought could expose what had changed, I don’t know it gives us any more information?

Customizations shouldn’t affect MRP. Customizations run on the client, and the client doesn’t run anything during MRP.

What kind of BPM’s are you running? Anything touching jobs or sales orders?

This is what Epicor figured. Most likely Job Entry. We had implemented a few Job Entry customizations at that time so it seemed to be a good candidate. Our issue at this point is eliminating (actually physically deleting ALL) customizations and disabling ALL BPMs, we still see jobs created with Prod qty = 0. I am not sure what is the difference between our test environment and Epicor’s, but when they run MRP they get NO jobs with Prod qty = 0.

What does the MRP log say?

If you look at time phase for one of the parts that has a 0 prod qty, is it still showing the demand?

This was my thought. Customizations are strictly for the UI so why would they affect MRP? We have one data directive that writes to a UD Field on JobHead that we use to designate reworks, and a UD table that holds the rework info and one data directive that throws an exception when an invalid part is being used. Nothing that updates standard Epicor JobHead fields. We have disabled all BPMs for testing and still have the issue occurring.

That’s the weird part. The MRP log shows that the Job is created with prod qty = 1. But by the time we look at it in Job Tracker or Job Status Maintenance it shows zero.

Time Phase shows demand but not the MRP Job with prod qty = 0.

if you have a data BPM that is “adjusting” the jobhead table, it is possible to affect MRP i believe… but this definiately does not sound like a base code problem, or we would have 100s of customers complaining about it.

Add a data directive to JobHead and JobProd table to log new records? If MRP says qty should be 1, the next step is to see if that’s what it’s actually trying to write to the DB.

Tim, we don’t have any BPMs that adjust JobHead and I agree, it must be something we are doing, not base Epicor. I don’t understand that when I delete all customizations and manually disable all data and method directives that the problem is still there. I know I am missing something but I am looking for clues as to what.

I like the idea. I will give it a go. Thanks, John.

Along the same line as @jtownsend, add a Change Log Data Directive to the JobProd table to log all changes to the JobProd.ProdQty field, at least it will show that it was changed.

I think I will grab the ProdQty from both JobProd and JobHead as well. Thank you, Ernie.

I created data directives to log when a record is created in JobHead or JobProd. We ran MRP last night against the Test database and 9371 JobHead (MRP job) records were created/logged for ProdQty = 1. This matches what the MRP log shows as well. Only 9323 JobProd records were written. The difference of 48 records matches exactly with the number MRP Jobs showing ProdQty = 0. We are not sure why these JobProd records are not getting created, but this seems to be what the core issue is.

Here are some relevant sections of the MRP logs including start and end processing details for example PN noted as: 1xxxxxxC.

MRP log – shows delete of JobHead and JobProd tables:
19:45:28 Beginning of Delete Unfirm Jobs
20:08:26 Site: MfgSys After Delete of Table: JobProd
20:13:03 Site: MfgSys After Delete of Table: JobHead
20:13:03 End of Delete Unfirm Jobs===

Start processing part:
21:15:19 Processing Part:1xxxxxxC. Attribute Set: ‘’. V600
21:15:19 Processing Part:1xxxxxxC Attribute Set: ‘’
21:15:19 Parameters: Receive Time → 0; Planning Fence → 0; Delta In → 0; Delta Out → 0; Lead Time CutOff → , Use Dynamic DOS → False, Allow Consume Min → False
21:15:19 Deleting suggestions
21:15:19 Processing non-stock transactions for Part:1xxxxxxC, Attribute Set: ‘’.
21:15:19 Processing stock transactions for Part:1xxxxxxC. Attribute Set: ‘’.
21:15:19 Beginning Balance 27.00000000
MRP002 Log shows MRP job creating un-firm job with Qty = 1
21:31:30 Created new unfirm job:MRP00000004501 Quantity:1xxxxxxC.
21:31:30 Created new unfirm job:MRP00000004501 Quantity:1.00.
21:31:30 Adding to job:MRP00000004501 Quantity:1.00.
21:31:30 Copying BOM from Part:1xxxxxxC Rev:- to Job:MRP00000004501.
21:31:32 Sent job MRP00000004501 to SchedJobI
End processing part:
21:39:25 Done with Part 1xxxxxxC. Attribute Set ‘’.
21:39:25 Done with Part 1xxxxxxC.

Open example MRP job – MRP00000004501 in Job Entry which shows JobHead.ProdQty = 0 and Demand Link is blank:

Are you using AUOM?

JobHead.ProdQty isn’t a primary field, it’s a summation of the child JobProd records. So, yeah, failure to write JobProd records will result in a Job with an overall qty of zero.

This exact line, I believe, is MRP trying to add the JobProd record. That it proceeds with the detail pull suggests that MRP thinks it successfully updated the job. Then again, I’m not sure if it’s actually checking to see if it wrote correctly.