源代碼檔案: SplitReservedLot.apl
相關視窗: frmSplitReservedLot2
問題描述: 批号拆分時,可任意拆分批号,會導緻拆分後批号資料不正确
例子: 批号(1900-1) 有5道工序(10/20../50) 數量為20
若批号1900-1未做到20工序,就在20工序拆分會導緻資料不正确;
PS: 目前2K4/SP4版本未能做到在工序上拆分,這是我們後來客戶化的地方
也就是在RESERVED_LOT_BATCH_TAB表裡增加一新FIELD:
Parent_Operation_No表示此子批号從父批号的某道工序開始拆分的資料
後續會講WIP的部分,基本上來說按批号管理的IFS'S WIP資料都不準确;
解決方法:
在拆分批号APPLY時檢查此批号在此道工序上的WIP是否夠用?
接上例,假設拆分前資料
OPERATION_NO LOT_NO OUTPUT WIP
10 1900-1 20 0 =>表示第10工序已經完工
20 1900-1 15 5 =>表示第20工序上有WIP數量為5
30 1900-1 0 15 =>表示第30工序上有WIP數量為15
此時在此10工序應該不允許拆分批号,
20工序至多隻能拆分5個數量;
30工序至多隻能拆分15個數量;
具體實作:
1) 寫一CheckQty函數:檢查WIP數量是否夠,不通過nCheck=1;否則nCheck=0;
Function: CheckQty
Description:
Returns
Parameters
Static Variables
Local variables
Number: nRowI
Number: nRowJ
Number: nSum
Number: nOpNoI
Number: nOpNoJ
Number: nWip
Actions
Set nSum= 0
Set nRowI = TBL_MinRow
--兩層LOOP,此處為外LOOP
While SalTblFindNextRow(hWndTbl, nRowI, 0, ROW_MarkDeleted)
Call SalTblSetContext(hWndTbl, nRowI)
Set nSum= 0
Set nOpNoI = hWndTbl.colnParentOperationNo
Set nWip = hWndTbl.colnWipQty
Set nRowJ = TBL_MinRow
--此處為内LOOP
While SalTblFindNextRow(hWndTbl, nRowJ, 0, ROW_MarkDeleted)
Call SalTblSetContext(hWndTbl, nRowJ)
Set nOpNoJ = hWndTbl.colnParentOperationNo
--相同OPERATION_NO,統計拆分數量
If nOpNoI = nOpNoJ
Set nSum = nSum + hWndTbl.colnReservedQty
--拆分數量超過WIP數量,傳回1
If nSum > nWip
Set nCheck = 1
Return TRUE
Set nCheck = 0
Return FALSE
2)修改PM_DataSourceSave
On PM_DataSourceSave
If wParam =METHOD_Execute
If dfnQtySplit > nOrigReservedQty
Call AlertBox(TranslateConstant(TEXT_SplitResLot_QtySplit) , CAPTION_Error, INFO_Ok )
Return FALSE
--增加此處調用
Call CheckQty()
--檢查不通過,錯誤對話框
If nCheck = 1
Call AlertBox(TranslateConstant(TEXT_SplitResLot_QtyWip) , CAPTION_Error, INFO_Ok )
Return FALSE
..以下省略