使用批次管理的公司可能經常會在一些地方想着批次確定,或者給出一些批次指導,方便業務做單等
至於系統標准的批次確定怎么配置,百度一大堆,而且基本都是正確可行的。。。美中不足的就是,會跳轉到批次確認策略的界面,讓用戶一次確認,稍微麻煩
為了給老板們省時間,所以開發自動批次填充和拆分。。。
1.依舊使用‘批次確認’按鈕。
2.在批次確認的邏輯里增強
程序 LCOWBFC1 call_batch_determination 這個FORM里。。。結尾的地方
ENHANCEMENT 1 ZCO15_ENH. "active version "循環內表處理 DATA:GV_LINE TYPE I."重新生成的兩表對應序列 DATA:VT_MCHB TYPE TABLE OF MCHB. DATA:VS_MCHB TYPE MCHB. DATA:LV_ERFMG TYPE MB_ERFMG."需求數量 DATA:LV_LINE TYPE I. DATA:LV_FLAG TYPE C. CLEAR:GV_LINE,VT_MCHB[],VS_MCHB,LV_ERFMG,LV_LINE."情況臨時變量\ DESCRIBE TABLE GT_CONTROL_TAB LINES LV_LINE. IF SY-TCODE = 'CO15'. SORT GT_COMP BY MATNR ASCENDING. LOOP AT GT_COMP." WHERE MARK = 'X'. GV_LINE = GV_LINE + 1."初始化次數 AT NEW MATNR. LV_FLAG = 'X'. CLEAR:VT_MCHB[]. ENDAT. LV_ERFMG = GT_COMP-ERFMG."將數量存入變量,后續判斷使用 * * IF GT_COMP-CHARG IS NOT INITIAL."排出已經確定的批次 * LV_ERFMG = LV_ERFMG - GT_COMP-ERFMG. * ENDIF. IF GT_COMP-MARK EQ 'X' AND GT_COMP-LGORT IS NOT INITIAL AND GT_COMP-WERKS IS NOT INITIAL AND GT_COMP-CHARG IS INITIAL. "查詢所有物料,工廠,庫位級別的批次庫存 IF LV_FLAG = 'X'. SELECT MATNR WERKS LGORT CHARG CLABS INTO CORRESPONDING FIELDS OF TABLE VT_MCHB FROM MCHB WHERE MATNR = GT_COMP-MATNR AND WERKS = GT_COMP-WERKS AND LGORT = GT_COMP-LGORT AND LVORM = '' AND CLABS <> 0. ENDIF. SORT VT_MCHB BY CHARG ASCENDING. LOOP AT VT_MCHB INTO VS_MCHB WHERE CLABS <> 0. IF LV_ERFMG > 0."判斷是否數量已滿足 IF VS_MCHB-CLABS >= LV_ERFMG."滿足數量要求,選擇批次,並把數量置0 GT_COMP-CHARG = VS_MCHB-CHARG. VS_MCHB-CLABS = VS_MCHB-CLABS - LV_ERFMG."更新批次剩余數量 LV_ERFMG = 0. ELSE."數量不足,使用全部本批次,不足數量循環下一批,並插入行 GT_COMP-CHARG = VS_MCHB-CHARG. LV_ERFMG = LV_ERFMG - VS_MCHB-CLABS. GT_COMP-ERFMG = VS_MCHB-CLABS. VS_MCHB-CLABS = VS_MCHB-CLABS - LV_ERFMG."更新批次剩余數量 IF VS_MCHB-CLABS < 0. VS_MCHB-CLABS = 0. ENDIF. GT_COMP-IND_ST = GV_LINE. INSERT GT_COMP. CLEAR:GT_COMP-CHARG. GT_COMP-ERFMG = LV_ERFMG. GV_LINE = GV_LINE + 1."自增一位 LV_LINE = LV_LINE + 1."自增一位 GT_CONTROL_TAB-IND_TO_TABLE = LV_LINE. GT_CONTROL_TAB-IND_FOR_START_SORT = LV_LINE. APPEND GT_CONTROL_TAB. ENDIF. MODIFY VT_MCHB FROM VS_MCHB. ENDIF. ENDLOOP. ENDIF. GT_COMP-IND_ST = GV_LINE. MODIFY GT_COMP. CLEAR:LV_FLAG. ENDLOOP. ENDIF. ENDENHANCEMENT.
因為如果配了批次,系統可能還是會跳的策略那個界面,所以找個地方屏蔽
程序 LV01FFD0 dialog 這個FORM最開始
ENHANCEMENT 1 ZCO15_ENHS. "active version IF SY-TCODE = 'CO15'. no_dialog = 'X'. ENDIF. ENDENHANCEMENT.
設置不跳出這個DIALOG。。。
完美解決
下圖這個是因為物料庫存不足。。。所以拆分了