Had a similar message yesterday: "Physical updating quantity in the unit Lbs must be other than zero," when trying to post a PO invoice.
NOTE: The item causing the issue is ordered in Lbs and stocked in Ea. The unit conversion (Iventtory Mgmt / Item Detail, Setup/Unit Conversion) is "Lbs * 15.3144 + 0 = EA, Round off". Using DAX 2009, kernel version 5.0.1500.2116.
PO sequence: ordered 32Lbs, posted PO / changed order to 64 Lbs, re-posted PO / pack slip posted 64Lbs / invoiced 32Lbs / error on invoice of 2nd 32Lbs.
Cause of error: rounding error, off by .000001 Lbs
Classes\InventUpd_Financial\initUpdate
At line 23, insert -- info(strFmt('%1', str2Num(physical, 0,10,0,0) ));
Result: "0.0000010000" - this is the Remaining Physical Qty and gets rounded to zero in InventMovement, causing the "must be other than zero" error.
Temporary resolution:
Waited until after hours, applied following edits, posted invoice, then commented out these edits: Still need to find out what the proper rounding should be before I leave it in there.
Classes\InventUpd_Financial
method initUpdate, insert at line 23:
if(abs(physical) < 0.00001)
physical = 0.00;
method updateFinancialReceipt, insert at line 41:
if(abs(addQty) < 0.00001)
addQty = 0.00;
Permananet Solution:
Still need to track through the code to see where the value is rounded. The variable "physical" is used in InventUpd_Financial\updateNow to determine if class InventUpd_Physical needs to be called - somewhere in InventUpd_Physical this number is rounded and InventUpd_Physical/checkUpdQty throws an error message with @SYS19586. My gut says that rounding the calculations to the same precision will solve the problem, but my schedule says it'll be a while before I can do that, hence the "get this PO invoiced & paid for" dirty solution.