We are using lot tracking on some parts and have marked those with the manufacturing date as mandatory and the expiration date as tracked. I seem to have wrongly assumed the system would take the shelf life for the part, add it to the manufactured date and fill in the expiration date. What would be the best method to accomplish this if possible? If I create a BAQ to calculate the date, is there a way to push the calculated date into the expiration field? Would a data directive be the route to go?
I’m not much of an Epicor expert but I’m all that we have here so any advice would be appreciated. I tried using the BPM designer in an updateable BAQ to push a calculated result into a field with no luck.
Where is the shelf life stored?
I’ve only seen it on Lot.
Shelf life is on the Part table (Shelf Life/Days). The expiration and manufactured dates are in PartLot.
I think your best bet would be to do a BPM that takes the Shelf Life from the part and calculate the expiration on the lot with the mfg date. Could be a little tricky, but should be doable.
Would that have to be custom (C#) code? I tried Set by Query, but I didn’t see a way to add a calculated field or a way to bring in the shelf life value from the Part table when I started with PartLot.
No, you could do it all with widgets. If you know what the method is that is called to save the lot info, check to see if the part tableset is included. If it isn’t, you could use the BO widget to call getbyid for the part number to get to the data.
Not sure your skill level, so ask as many questions as you need.
Thank you. Skill level? Ever seen an old man on a skateboard? That’s me with BPMs. Sometimes the trick works other times I just break stuff. I will take your advice and see what I can figure out. I will likely come back with many questions later.
Granted this was a single test.
I went into the education database.
- Selected H-4600 as a lot controlled part
- Set the shelf life to 14 days
- Created a job for H-4600
- Received the job to inventory
- Expired Date was calculated automatically during the receipt process.
The same would occur when receiving a purchased part to stock.
No BPM should be required.
@LarsonSolutions I did see some recently purchased parts that I was informed did have the expiration date filled in already, but it based the date on the date of receipt plus the shelf life. That’s where we run into an issue. The part in question may be manufactured months prior to the purchase/receipt but due to the nature of the material, it needs to be based on the date of manufacture provided by the vendor. The manufacture date is manually entered.
Could you kindly share your setup for the part lot in the Part Master?
The following is what shows when I run a query. Lot 2503-59 has not been adjusted. The expiration date calculated from the receipt date. Lot 2503-60 (02/2025) was manually updated.

In light of my understanding of your issue, I suggest implementing a data directive for the part lot table. This directive should include a condition row that retrieves the shelf life from the Part table. Subsequently, you can add the number of days (calculated by adding the shelf life to the manufacturing date) to determine the expiry date and set it accordingly. This approach should effectively address your problem.
@surendrapal The PartLot table is where I started with a data directive but I do not know how to “include a condition row that retrieves the shelf life from the Part table.” Would the calculation (shelf life plus manufactured date) just be in C code? Please forgive my lack of experience. I am somewhat self-taught with the use of BPMs with my only training at Insights conferences and documentation.
Hey Dan,
At least here, anything we purchase that has a shelf life, it already has a best by or expiration date and we don’t have to calculate it.
I assume this is some kind of internal process?
@Mark_Wonsil we purchase a seal material that the vendor only provides a manufactured date for the lot. Based on the material data sheet, we know the length of time before the seals will no longer be usable. The system seems to fill in the expiration date based on the receipt date but that could be months after the manufactured date. I’m not sure why they want it done this way. They have to enter the manufactured date so I don’t know why they just don’t enter the expiration date instead other than the shelf life for each type is already entered in the system.
We enter the manufacturers’ expiration date at time of receipt in 2024.1 and never use shelf life.
It CAN be modified later, too.
Thank you all for the input. I discussed this with the affected users and they agreed it would be better just to enter the expiration date. Logic prevailed.