This Transaction will result in a negative on hand quantity

Hello!

Our logistics team is trying to zero out remaining inventory in a previous warehouse via manual inventory adjustments. When they are attempting to zero this sku out we are getting this message, even though the quantity on hand looks ok. 51 -51 = 0. What could be causing this issue? Everything shows 0 in part tracker for this warehouse. Thanks!


Did you try running the part transaction history tracker out to a future date of like 2999 to see if there were any future dated transactions?

I just checked that and we do not have any future dated transactions. We also ran the refresh part quantities and allocations process last night.

Any chance you have this going on?

and this

Hmm no asterisks that I can see, and I’ll have to dig into the rounding issue. We are on 10.2.300.9

only the one bin?
And can you do a Qty Adj of 50.999999? (just to see if it is a 10th place rounding thing)

Check it in SQL (Not sure a BAQ will show it) sometimes there are several decimal places out and you can’t see it. I have had that happen in the past. THe part may say 21.00 but in SQL i see 21.00022

@ckrusen @Kimberley this is what is showing in SQL on the PArtWhse table. This is only for one bin yes.

DemandQty ReservedQty AllocatedQty PickingQty PickedQty CountedDate OnHandQty NonNettableQty BuyToOrderQty SalesDemandQty SalesReservedQty SalesAllocatedQty SalesPickingQty SalesPickedQty JobDemandQty JobReservedQty JobAllocatedQty JobPickingQty JobPickedQty UnfirmJobDemandQty TFOrdDemandQty TFOrdReservedQty TFOrdAllocatedQty TFOrdPickingQty TFOrdPickedQty
0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 NULL 51.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000

Query the PartBin table

Results from the PartBin table:

BinNum OnhandQty LotNum DimCode AllocatedQty SalesAllocatedQty SalesPickingQty SalesPickedQty JobAllocatedQty JobPickingQty JobPickedQty TFOrdAllocatedQty TFOrdPickingQty TFOrdPickedQty ShippingQty PackedQty
000 51.00000000 EA 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00

If the part is fifo or lot fifo, In part tracker confirm the bin quantity is on the same fifo layer and not split.

Is that part have any outstanding allocations? Like being included on a packer that is not yet marked SHIPPED, or as a backflushable BOM component on an open job?

Actually, try doing a Qty Adj of -50. If it lets you, then it might be a rounding thing. If it doesn’t than the “other” thing driving it is obviously a qty of more than 1.

I enabled tracing and see that there is a Negative inventory Test method being called.

<tracePacket>
  <businessObject>Erp.Proxy.BO.InventoryQtyAdjImpl</businessObject>
  <methodName>NegativeInventoryTest</methodName>
  <appServerUri>net.tcp://usdataps00122/MC-UAT/</appServerUri>
  <returnType>System.Void</returnType>
  <localTime>4/4/2019 14:44:40:7926334 PM</localTime>
  <executionTime>146</executionTime>
  <parameters>
    <parameter name="pcPartNum" type="System.String"><![CDATA[CB-0005]]></parameter>
    <parameter name="pcWhseCode" type="System.String"><![CDATA[mfg]]></parameter>
    <parameter name="pcBinNum" type="System.String"><![CDATA[D0302]]></parameter>
    <parameter name="pcLotNum" type="System.String"><![CDATA[]]></parameter>
    <parameter name="pcPCID" type="System.String"><![CDATA[]]></parameter>
    <parameter name="pcDimCode" type="System.String"><![CDATA[FT]]></parameter>
    <parameter name="pdDimConvFactor" type="System.Int32"><![CDATA[1]]></parameter>
    <parameter name="ipSellingQuantity" type="System.Decimal"><![CDATA[6225.00]]></parameter>
    <parameter name="pcNeqQtyAction" type="System.String"><![CDATA[]]></parameter>
    <parameter name="pcMessage" type="System.String"><![CDATA[]]></parameter>
  </parameters>
</tracePacket>

Maybe check to see what value is being passed via the "ipSellingQuantity" param

also, the PreSetInventoryQtyAdj method includes the current QOH and the Adj Qty’s

<tracePacket>
  <businessObject>Erp.Proxy.BO.InventoryQtyAdjImpl</businessObject>
  <methodName>PreSetInventoryQtyAdj</methodName>
  <appServerUri>net.tcp://usdataps00122/MC-UAT/</appServerUri>
  <returnType>System.Void</returnType>
  <localTime>4/4/2019 14:44:40:9475967 PM</localTime>
  <executionTime>128</executionTime>
  <parameters>
    <parameter name="ds" type="InventoryQtyAdjDataSet">
      <InventoryQtyAdjDataSet xmlns="http://www.epicor.com/Ice/300/BO/InventoryQtyAdj/InventoryQtyAdj">
        <InventoryQtyAdj>
          <Company>MC</Company>
          <PartNum>CB-0005</PartNum>
          <WareHseCode>mfg</WareHseCode>
          <OnHandQty>6225</OnHandQty>
          <BinNum>D0302</BinNum>
          <AdjustQuantity>-6225.00</AdjustQuantity>
          <ReasonCode></ReasonCode>
          <LotNum></LotNum>
          <Reference>CRK Test</Reference>
          <UnitOfMeasure>FT</UnitOfMeasure>
          <TransDate>2019-04-04T00:00:00-04:00</TransDate>
          <ReasonType>M</ReasonType>
          <SerialNoQty>0</SerialNoQty>
          <TempSerialNo>0</TempSerialNo>
          <ReasonCodeReq>false</ReasonCodeReq>
          <AllowNegQty>false</AllowNegQty>
          <LegalNumberMessage></LegalNumberMessage>
          <StkUOMCode>FT</StkUOMCode>
          <EnableSN>false</EnableSN>
          <OnHandUOM>FT</OnHandUOM>
          <TranDocTypeID></TranDocTypeID>
          <PCID></PCID>
          <SysRowID>00000000-0000-0000-0000-000000000000</SysRowID>
          <PartTrackLots>false</PartTrackLots>
          <PartTrackDimension>false</PartTrackDimension>
          <PartSalesUM>FT</PartSalesUM>
          <PartPricePerCode>E</PartPricePerCode>
          <PartSellingFactor>1</PartSellingFactor>
          <PartTrackSerialNum>false</PartTrackSerialNum>
          <PartIUM>FT</PartIUM>
          <PartPartDescription>Cable- KYNAR/HMWPE #8          20 mil Kynar / 90 mil HMWPE</PartPartDescription>
          <ReasonCodeDescription></ReasonCodeDescription>
          <WareHseDescription>Main, CHALFONT</WareHseDescription>
          <WhseBinDescription>ROW D, SECTION 03, LEVEL 02</WhseBinDescription>
          <RowMod></RowMod>
        </InventoryQtyAdj>
      </InventoryQtyAdjDataSet>
    </parameter>
    <parameter name="requiresUserInput" type="System.Boolean"><![CDATA[False]]></parameter>
  </parameters>
  <paramDataSetChanges>
    <paramDataSet name="ds" useDataSetNbr="0">
      <changedValue tableName="InventoryQtyAdj" rowState="Modified" rowNum="0" colName="BinNum"><![CDATA[D0302]]></changedValue>
      <changedValue tableName="InventoryQtyAdj" rowState="Modified" rowNum="0" colName="AdjustQuantity"><![CDATA[-6225.00]]></changedValue>
      <changedValue tableName="InventoryQtyAdj" rowState="Modified" rowNum="0" colName="Reference"><![CDATA[CRK Test]]></changedValue>
      <changedValue tableName="InventoryQtyAdj" rowState="Modified" rowNum="0" colName="WhseBinDescription"><![CDATA[ROW D, SECTION 03, LEVEL 02]]></changedValue>
    </paramDataSet>
  </paramDataSetChanges>
</tracePacket>

check to see if these match

image

Let me check and see if we have any open packs for this sku. I also did run that same trace as well, and it stopped after the Negative Inventory test.

<tracePacket>
  <businessObject>Erp.Proxy.BO.InventoryQtyAdjImpl</businessObject>
  <methodName>NegativeInventoryTest</methodName>
  <appServerUri>net.tcp://29743-e102-a1/EpicorERP/</appServerUri>
  <returnType>System.Void</returnType>
  <localTime>4/4/2019 12:52:32:3934328 PM</localTime>
  <threadID>1</threadID>
  <executionTime total="21" roundTrip="20" channel="0" bpm="0" other="1" />
  <retries>0</retries>
  <parameters>
    <parameter name="pcPartNum" type="System.String"><![CDATA[BAC363]]></parameter>
    <parameter name="pcWhseCode" type="System.String"><![CDATA[GA-3PL]]></parameter>
    <parameter name="pcBinNum" type="System.String"><![CDATA[000]]></parameter>
    <parameter name="pcLotNum" type="System.String"><![CDATA[]]></parameter>
    <parameter name="pcPCID" type="System.String"><![CDATA[]]></parameter>
    <parameter name="pcDimCode" type="System.String"><![CDATA[EA]]></parameter>
    <parameter name="pdDimConvFactor" type="System.Int32"><![CDATA[1]]></parameter>
    <parameter name="ipSellingQuantity" type="System.Decimal"><![CDATA[51]]></parameter>
    <parameter name="pcNeqQtyAction" type="System.String"><![CDATA[]]></parameter>
    <parameter name="pcMessage" type="System.String"><![CDATA[]]></parameter>
  </parameters>
  <returnValues>
    <returnParameter name="pcNeqQtyAction" type="System.String"><![CDATA[Stop]]></returnParameter>
    <returnParameter name="pcMessage" type="System.String"><![CDATA[This transaction will result in a negative onhand quantity for the bin.]]></returnParameter>
  </returnValues>
</tracePacket>

Let me try in BL tester

We have no open packs for this sku. I can’t adjust the quantity with 50. We purchase this part/don’t manufacture it so nothing in the job area.

The fact that the field name in the NegQty Test includes ipSellingQuantity, makes me think it has to do with some outstanding demand.

Do you have any quantities in nonconformance or inspection processing?

Others have mentioned the decimal issue, when under a quantity of 1, I’ve found running a quick BAQ for that part’s on hand can tell you the exact decimal, if it exists. I’ve not been able to see it anywhere else.

for the user who asked…the asterisk means there is a decimal. If you click on it, the number should expand to the full decimal.

We do not have anything in non-conformance or inspection processing.

Epicor support is working on getting us a data fix. They believe the running totals for the part transaction history are outta-whack and need to be re-synchronized.