From 73b389652ffaefb586500c32ec797827761f8e47 Mon Sep 17 00:00:00 2001 From: Andreas Sumerauer Date: Sat, 26 Jun 2021 07:18:54 +0200 Subject: [PATCH] IDEMPIERE-4849: fix for MProduction.createLines() storage issue (#743) * fix for MProduction.createLines/( storage issue * extended if clause to cover storage lines with the same AsiID Co-authored-by: Andreas --- .../src/org/compiere/model/MProduction.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/model/MProduction.java b/org.adempiere.base/src/org/compiere/model/MProduction.java index 5010ae0c2d..8448154d8d 100644 --- a/org.adempiere.base/src/org/compiere/model/MProduction.java +++ b/org.adempiere.base/src/org/compiere/model/MProduction.java @@ -254,8 +254,6 @@ public class MProduction extends X_M_Production implements DocAction { int M_Warehouse_ID = finishedLocator.getM_Warehouse_ID(); - int asi = 0; - // products used in production String sql = "SELECT M_ProductBom_ID, BOMQty" + " FROM M_Product_BOM" + " WHERE M_Product_ID=" + finishedProduct.getM_Product_ID() + " ORDER BY Line"; @@ -339,6 +337,7 @@ public class MProduction extends X_M_Production implements DocAction { MProductionLine BOMLine = null; int prevLoc = -1; int previousAttribSet = -1; + int prevAsi = -1; // Create lines from storage until qty is reached for (int sl = 0; sl < storages.length; sl++) { @@ -350,11 +349,11 @@ public class MProduction extends X_M_Production implements DocAction { int loc = storages[sl].getM_Locator_ID(); int slASI = storages[sl].getM_AttributeSetInstance_ID(); - int locAttribSet = new MAttributeSetInstance(getCtx(), asi, + int locAttribSet = new MAttributeSetInstance(getCtx(), slASI, get_TrxName()).getM_AttributeSet_ID(); // roll up costing attributes if in the same locator - if (locAttribSet == 0 && previousAttribSet == 0 + if (((locAttribSet == 0 && previousAttribSet == 0) || (slASI == prevAsi)) && prevLoc == loc) { BOMLine.setQtyUsed(BOMLine.getQtyUsed() .add(lineQty)); @@ -379,6 +378,7 @@ public class MProduction extends X_M_Production implements DocAction { } prevLoc = loc; previousAttribSet = locAttribSet; + prevAsi = slASI; // enough ? BOMMovementQty = BOMMovementQty.subtract(lineQty); if (BOMMovementQty.signum() == 0)