天天看點

IFS前台資料檢查寫法

源代碼檔案: 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

 ..以下省略

繼續閱讀