MOREQTY: MODETAIL.RELEASEDQTY (Already released qty)
LOTQTY: LOT.LOTSIZE (Pending release qty)
newQTY: New quantity from ERP
MODIQTY: SFT_MO_MODI sum (Supplementary release qty)
BATQTY: SFT_BATCH_REC sum (Split batch qty)
5.1 Increase Quantity Scenario
newQTY > (MOQTY - MODIQTY)
// Increase quantity - directly add
Increase amount = newQTY - (MOQTY - MODIQTY)
IF LOT exists THENUPDATE LOT SET LOTSIZE += increase amount
ELSEINSERT LOT (create new lot record)
END IFUPDATE MODETAIL SET PLANRELEASEQTY += increase amount
5.2 Decrease Quantity Scenario
newQTY < (MOQTY - MODIQTY)
// Decrease quantity - need to check changeable allowance
Max changeable amount = MOQTY - MOREQTY - BATQTY
This change amount = MOQTY - newQTY - MODIQTY
IF Max changeable amount >= This change amount THEN// Can decreaseIF LOTQTY - This change amount > 0 THENUPDATE LOT SET LOTSIZE -= This change amount
ELSEDELETE FROM LOT // Qty becomes zero or negative after decreaseEND IFUPDATE MODETAIL SET PLANRELEASEQTY -= This change amount
ELSE// Cannot decrease - already released or split batch exceeds allowanceThrow Exception("JS_0126_00060")
END IF
Important Restriction
If MES side released qty + split batch qty > new qty, cannot decrease, throws error JS_0126_00060.
5.3 Flow Diagram
6. Error Codes
Code
Message
Description
JS_0126_00060
Change qty less than pending release qty, not allowed
{
"code": "500",
"msg": "JS_0126_00060", // Released qty exceeds new qty"query": []
}
8. Database Update SQL
8.1 UPDATE MODETAIL (Update Order Master)
UPDATE MODETAIL SET
PLANPROCESSST = :PLANPROCESSST, -- Planned start date
DUEDATETIME = :DUEDATETIME, -- Planned end date
DOID = :DOID, -- Sales order number
SEQUENCE = :SEQUENCE, -- Sales order line
FACTORYID = :FACTORYID, -- Factory code
WAREHOUSEID = :WAREHOUSEID, -- Warehouse code
DESCRIPTION = :DESCRIPTION, -- Remarks
MO032 = :MO032, -- Priority
LASTMAINTAINUSER = :userid,
LASTMAINTAINDATETIME = N'{current_time}',
FLAG = (SELECT MAX(FLAG)+1 FROM MODETAIL WHERE CMOID = :CMOID)
WHERE CMOID = :CMOID
8.2 Increase Quantity (UPDATE LOT)
-- Increase amount = newQTY - (MOQTY - MODIQTY)UPDATE LOT SET
LOTSIZE = LOTSIZE + {increase amount}
WHERE MOID = :CMOID
-- Also update MODETAIL planned release qtyUPDATE MODETAIL SET
PLANRELEASEQTY = PLANRELEASEQTY + {increase amount},
QTY = :newQTY
WHERE CMOID = :CMOID
8.3 Decrease Quantity (UPDATE/DELETE LOT)
-- Decrease amount = MOQTY - newQTY - MODIQTY-- First check changeable allowance
Max changeable amount = MOQTY - MOREQTY - BATQTY
IF LOTQTY - decrease amount > 0 THEN-- Still has remaining after decreaseUPDATE LOT SET
LOTSIZE = LOTSIZE - {decrease amount}
WHERE MOID = :CMOID
ELSE-- Qty becomes zero or negative after decrease, delete lotDELETE FROM LOT WHERE MOID = :CMOID
END IF-- Also update MODETAIL planned release qtyUPDATE MODETAIL SET
PLANRELEASEQTY = PLANRELEASEQTY - {decrease amount},
QTY = :newQTY
WHERE CMOID = :CMOID
8.4 Recalculate Process
-- Recalculate all processes after update
SFT_OP_REALRUN.sqlUpdate_RecalculateAll("updateMODETAIL")