Part has no allocations but cannot be marked inactive

We’re trying to mark an item as inactive and getting the error ‘Part cannot be marked as inactive if there is quantity allocated’. It’s a non stock item and a phantom BOM…

I’ve run the Refresh Part Quantities and Allocations Report only and receive a no records selected error

I’ve looked in the PartDtl table, part isn’t in there

I’ve looked at Part Tracker, item is in 2 warehouses and both have a quantity on hand of 0, which makes sense as it’s a non stock item…

I’ve looked in the material queue, it’s also not there.

What am I missing? Is there some other place this might be hiding? .

Anything on Time Phase?

Nope, forgot to list that one. There’s nothing on Time Phase

Maybe run the Refresh PartBin QOH from PartTran as well?

I’m wondering if it’s because the parts in the phantom bom still have a quantity on hand… Well, it’s not that…

Refresh PartBin and Part Tran shows no differences found

Sometimes it helps if I try to delete the part. You might get a different error message that can help.

I mean, don’t do that if it’s actually possible to delete it. Only if the part has transactions and you know it won’t work.

I tried that and got the error ‘Cannot delete part that has on hand quantity’… Except it doesn’t have any on hand, it’s a non stocked item. Both the Qty On Hand and Non Nettable Qty in Part Tracker show 0 on hand.

Non-stock can have qty.

Also, are ALL bins zero? You might have +5 here and -5 there.

Bins are all empty.

Well rats.

So quantity is stored in like 972 places.

PartBin
PartWhse
Plant?
PartQty
PartAlloc
…and I lose track.

I think you are on a BAQ hunt now…

Yeah, I’ve been trying BAQs and still haven’t had any luck. I am waiting to hear back from support lol… I gave up for the time being. But I’ll update when I have more info.

Or just ‘cheat’ and pop in an EpiCare case. I bet that’s happened before. You might get a KB article pointing out the fix, or a a request for a BAQ of some table, and a datafix response.

Yeah, they sent me a datafix to try so we’ll see.

FX_RefreshPartBin_Allocated_Picked_PickingQty

Adjust your decimals for the UOM of the part to the max allowable (8?).

In the past I have also run into issues where i cannot inactivate a part because of inventory on hand. Part Tracker shows 0.00, but when i increased the decimals there would be some qty like 0.00000084 EA. Qty adjust that out and then inactivate.

Note: after increasing the decimals allowable for the UOM Code you’ll need to restart Epicor to see it.

Thanks, I took a look at that, but not sure that will help.

The UOM is set to no rounding and we don’t allow decimals. Not sure there would be a quantity of something like 0.00000084 based on our UOM setting.

Did you find a resolution?

I’m on 10.2.500

What are you seeing? Don’t trust the settings in rounding to eliminate the possibilities of some small fraction showing up in inventory. Epicor rounding rules aren’t bulletproof especially with UOM conversions. Check the part in table and if there are any records for the part number in that table there is “inventory”. To fix it, temporarily set thrme decimals to 8, make the adjustment to get it to actually 0, then put the decimal settings back.

I have taken everything out of the system. So PartBin and (PartWhse with some extra effort) are all empty now. but I CANNOT change the cost method for 5 part numbers still (out of >25k). Cost method is grayed out in the system and so is mark inactive.

I have also performed the Refresh part qty from PartTran and refresh QOH and allocations with no success.

For anyone interested in the fix for making PartWhse resync: it was as simple as quantity adjust in and quantity adjust out in the affected bins.

Select * from Erp.PartBin -- empty table

SELECT * FROM ERP.PartAlloc -- empty table

select * from Erp.PartQty where erp.partqty.onhandqty>0 -- empty table

select * from Erp.PartWhse where erp.partwhse.OnHandQty>0 -- empty table


select * from Erp.partbininfo where erp.partbininfo.OnhandQty>0 -- WAS very not empty = 1,571 rows

-- AND


select * from Erp.PartLot where Erp.PartLot.OnHand >0
select * from Erp.PartLotDeferred where Erp.PartLotDeferred.OnHand >0
select * from IM.IMPartLot where IM.IMPartLot.OnHand >0

select * from dbo.PartBinInfo where dbo.PartBinInfo.OnhandQty >0
select * from Erp.GlbVendPart where Erp.GlbVendPart.OnhandQty >0
select * from Erp.JMtlStat where Erp.JMtlStat.OnHandQty >0
select * from Erp.PartBin where Erp.PartBin.OnhandQty >0
select * from Erp.PartBinDeferred where Erp.PartBinDeferred.OnhandQty >0
select * from Erp.PartBinInfo where Erp.PartBinInfo.OnhandQty >0
select * from Erp.PartFIFOCost where Erp.PartFIFOCost.OnHandQty >0
select * from Erp.PartQty where Erp.PartQty.OnHandQty >0
select * from Erp.PartQtyDeferred where Erp.PartQtyDeferred.OnHandQty >0
select * from Erp.PartWhse where Erp.PartWhse.OnHandQty >0
select * from Erp.PPlanQty where Erp.PPlanQty.OnhandQty >0
select * from Erp.VendPart where Erp.VendPart.OnhandQty >0
select * from IM.IMGlbVendPart where IM.IMGlbVendPart.OnhandQty >0
select * from IM.IMJMtlStat where IM.IMJMtlStat.OnHandQty >0
select * from IM.IMPartBin where IM.IMPartBin.OnhandQty >0
select * from IM.IMPartBinInfo where IM.IMPartBinInfo.OnhandQty >0
select * from IM.IMPartFIFOCost where IM.IMPartFIFOCost.OnHandQty >0
select * from IM.IMPartQty where IM.IMPartQty.OnHandQty >0
select * from IM.IMPartWhse where IM.IMPartWhse.OnHandQty >0
select * from IM.IMPPlanQty where IM.IMPPlanQty.OnhandQty >0
select * from IM.IMVendPart where IM.IMVendPart.OnhandQty >0

output of those queries:


You’re checking for greater than 0 but you can also have negatives.