What are people using to be able to determine part shortages for jobs, preferably not on a job-by-job basis but at more of an enterprise level? This would be used both to make decisions on releasing jobs and also showing shortages for released jobs. Currently doing this off-system in a spreadsheet.
Production Planner Workbench
I use a baq from PartDtl that I found on the forum that does a running sum. This is a 10.2.400 version of it which is the earliest I have.
E10HelpTimePhaseJobMtlPO.baq (47.7 KB)
/*
* Disclaimer!!!
* This is not a real query being executed, but a simplified version for general vision.
* Executing it with any other tool may produce a different result.
*/
select
[PartDtl].[PartNum] as [PartDtl_PartNum],
[PartDtl].[PartDescription] as [PartDtl_PartDescription],
[PartDtl].[DueDate] as [PartDtl_DueDate],
(Max(PartDtl.DueDate)) as [Calculated_MltDate],
(max(PartDtl.SourceFile)) as [Calculated_Source],
[PartDtl].[RequirementFlag] as [PartDtl_RequirementFlag],
(MAX(Job.Calculated_Assembly)) as [Calculated_Asm],
[PartDtl].[Quantity] as [PartDtl_Quantity],
[PartDtl].[IUM] as [PartDtl_IUM],
[PartDtl].[JobNum] as [PartDtl_JobNum],
[PartDtl].[OrderNum] as [PartDtl_OrderNum],
[PartDtl].[OrderLine] as [PartDtl_OrderLine],
[PartDtl].[OrderRelNum] as [PartDtl_OrderRelNum],
[PartDtl].[PONum] as [PartDtl_PONum],
[PartDtl].[POLine] as [PartDtl_POLine],
[PartDtl].[PORelNum] as [PartDtl_PORelNum],
[Job].[Calculated_JobDueDate] as [Calculated_JobDueDate],
(SUM(case when WhseBin.NonNettable = 0 then PartBin.OnHandQty else 0 end)) as [Calculated_OnHand],
((Case when PartDtl.RequirementFlag=0 then PartDtl.BaseQty else (-1*PartDtl.BaseQty) end)) as [Calculated_Quantity],
(Sum(Quantity) over (partition by PartDtl.PartNum order by PartDtl.DueDate)+isnull(OnHand,0)) as [Calculated_RunningSum],
(MAX(Job.Calculated_Case)) as [Calculated_HDCase]
from Erp.PartDtl as PartDtl
left outer join Erp.PartBin as PartBin on
PartBin.Company = PartDtl.Company
and PartBin.PartNum = PartDtl.PartNum
left outer join Erp.WhseBin as WhseBin on
PartBin.Company = WhseBin.Company
and PartBin.WarehouseCode = WhseBin.WarehouseCode
and PartBin.BinNum = WhseBin.BinNum
left outer join (select
[JobHead].[Company] as [JobHead_Company],
[JobHead].[JobNum] as [JobHead_JobNum],
(MAX(JobHead.HDCaseNum)) as [Calculated_Case],
(MAX(JobHead.PartNum)) as [Calculated_Assembly],
(Max(JobHead.DueDate)) as [Calculated_JobDueDate]
from Erp.JobHead as JobHead
where (JobHead.JobComplete = 0)
group by [JobHead].[Company],
[JobHead].[JobNum]) as Job on
Job.JobHead_Company = PartDtl.Company
and Job.JobHead_JobNum = PartDtl.JobNum
inner join Erp.PartPlant as PartPlant on
PartDtl.Company = PartPlant.Company
and PartDtl.PartNum = PartPlant.PartNum
and PartDtl.Plant = PartPlant.Plant
and ( PartPlant.QtyBearing = 1 )
where (PartDtl.Type <> 'Sub' and PartDtl.SourceFile in ('JM', 'PO'))
group by [PartDtl].[PartNum],
[PartDtl].[PartDescription],
[PartDtl].[DueDate],
[PartDtl].[RequirementFlag],
[PartDtl].[Quantity],
[PartDtl].[IUM],
[PartDtl].[JobNum],
[PartDtl].[OrderNum],
[PartDtl].[OrderLine],
[PartDtl].[OrderRelNum],
[PartDtl].[PONum],
[PartDtl].[POLine],
[PartDtl].[PORelNum],
[Job].[Calculated_JobDueDate],
((Case when PartDtl.RequirementFlag=0 then PartDtl.BaseQty else (-1*PartDtl.BaseQty) end))
Yes, this is what I recommend too and it works well.
But be sure to run the Production Planning Process at least nightly or something after MRP to update the data.
If you search for Production Plan, you will get both programs you need.
So here is the concern I have regarding the Production Planner Workbench. I have an unfirm job that production planner workbench shows as Jobs with Full Availability and I am looking at one of the material components for that job and it shows the qty as available. However, when I review Time Phased Inquiry for the material component it shows that the availability as the result of an increase and expedite suggestion for an existing purchase order.
So it seems that production planner workbench is assuming that I can in fact expedite the existing PO from its current due date several months in the future to now. This seems to be misleading to me and quite probably not feasible to expedite the existing PO that much.
Have you seen the use case to which I am referring in your experience? If so, how do you account for this scenario?
If you’re getting bunk suggestions, I typically recommend people update their part settings to eliminate them.
Charles, try running the process with the “Ignore Expedite PO Suggestions” option enabled, so that you don’t see the availability that you mentioned. I also suggest enabling the “Ignore Future Receipts/Requirements” option (it would be nice if Epicor split this into separate options for receipts vs. requirements!). Lastly, you may want to enable the “Include Released Jobs” option, so that you can see the impact of released jobs on material availability.
@CStahl
@ScottLepley suggestion is the quickest to get better results.
But as @jtownsend suggests, you should configure your parts, part classes or PO’s to work according to reality. If this is an issue for this dashboard, it’s probably an issue in Purchasing but it’s being ignored or worked around. If you cannot change a PO at a certain point then Epicor needs to know that. You can do this a couple of ways:
- Set Planning Time Fence on Part Class Site to the number of days before a PO is due that it cannot be changed. Once the PO enters the Time Fence change suggestions are not made.
- Set Planning Time Fence on the Part Site (as above, but this is per part)
- Have Purchasing manually Lock either the Qty or Due Date on PO Releases (the respective locked item will not generate PO Suggestions)
- Setup a BPM that will auto lock the PO Release Qty and/or Due Date on some event, usually my clients need this when the PO is Approved. Basically have the BPM set the PORel Lock fields to whatever the POHead.Approve field is that way if it’s unapproved the PORel Locks will toggle off.
This, but also populate the lead time value in Part Class and/or the purchasing and urgent planning lead times on part/site.