【點晴模切ERP】SAP系統(tǒng)實現(xiàn)物料批次自動編號介紹
批次編號處理 批次編號范圍(將采用批次管理的物料分為兩類,一類是自制件(E),另一類是采購件(F),對于既有自制、又有采購的,根據實際狀況處理) 1、對于自制件,批次編號跟生產訂單編號一致(使用出口來實現(xiàn)) 2、對于外購件,批次編號采用6位日期+3位流水碼(使用出口來實現(xiàn)) 內部編號范圍分配目前邏輯如下,根據物料的生產方式。 1、F->外購件-> 批次編號采用6位日期+3位流水號 a. 對于1個物料來說,如果批次號碼內部給號而不是手工輸入,那么流水碼從001 直到999,每次貨物移動,流水碼自動加1 b. 對于不同的物料來說,比如之前有個物料使用了流水碼180111000,如果MCH1物料+流水碼查詢不到記錄,那么此物料仍然可以使用流水碼180111000 2、E->外購件->批次編號采用生產訂單編號 3、X->判斷當前的生產訂單編號是否為空 a. 生產訂單編號為空-> 6位日期+3位流水號 b. 生產訂單編號不為空->生產訂單編號(生產訂單編號采用10位,前兩位為工廠代碼) 對于增強批次自動編號說一下我的理解: 用戶出口 SAPLVO1Z 是用戶自動分配批次號碼(內部給號的),并且只有在配置了基于移動類型生成新批次,并且設置成 B,此出口才會被觸發(fā),所有的配置 B 的移動類型,在用 MIGO 進行貨物移動時,都會觸發(fā)增強的邏輯,并且增強邏輯只對(沒有輸入批次號碼)這種情況下才生效。 集團配置的自動創(chuàng)建批次移動類型為 101、103、501:
對于批次,整個集團的規(guī)則是,批次號碼均是自動生成,只有特殊情況才可以手工輸入(561初始化,以及盤盈 701、711): 1、只有收貨(101、103、501-僅限采購件),才能自動產生新批次(設置成B-Automatic/Manual and check in USER EXIT),其他的移動類型都要設成G-no creation。 2、對于消耗的移動類型(201、261、281、601、541、543),批次都是根據批次確定規(guī)則(FIFO&剩余貨架壽命),自動排出批次(在 migo里面也要配置增強,如果輸入的批次號不在 MCH1 或者 MCHA 中會報錯),且不允許產生新批次->全部設成G-no creation,且需要配置批次確定規(guī)則。 3、對于移庫類(241/242、301/302、303/304、305/306、309/310、311/312、313/314、315/316、344/343、411/412、413/414、415/416、551/552。。)如果物料有用到批次管理,會檢查輸入的批次是否存在,如果不存在,會報錯,也是在MIGO 增強里面做檢查,因為移庫可能沒法使用 FIFO 規(guī)則。且不允許產生新批次->全部設成G-no creation,且不需要配置批次確定規(guī)則。 4、對于 561,并不設置內部檢查規(guī)則(即采用默認配置),對于561初始化庫存時,批次可以手工輸入。 5、對于701(盤盈),理論上,所有的盤盈并不會產生新批次,如果真的產生新批次的物料,批次可以手工輸入,即701也采用默認配置。 CMOD 創(chuàng)建增強項目
注:EXIT_SAPLV01Z_001 &EXIT_SAPLV01Z_002適用于內部給號的情況。
對出口 EXIT_SAPLV01Z_002 加代碼。 源代碼 *&-----------* *& Include ZXVBZU02 *& 內部編號范圍分配目前邏輯如下 *& 根據物料的生產方式 *& F->外購件->批次編號采用6位日期+3位流水號 *& 流水號含義->對于1個物料來說如果批次號碼內部給號而不是手工輸入,那么流水碼從 001 直到999, *& 每次貨物移動,流水碼自動加1 *& 對于不同的物料來說,比如之前有個物料使用了流水碼180111001 如果MCH1 物料+流水碼 *& 查詢不到記錄,那么此物料仍然可以使用流水碼180111001 *& E->外購件->批次編號采用生產訂單編號 *& X->判斷當前的生產訂單編號是否為空 *& 生產訂單編號為空 -> 位日期+3位流水號 *& 生產訂單編號不為空->生產訂單編號 *&--------------------------* TABLES:zbatch,mch1,marc. DATA tab01 LIKE TABLE OF zbatch WITH HEADER LINE. DATA batch_number TYPE mch1-charg. DATA pre_flow_number(3) TYPEn. "前一個流水號 DATA cur_flow_number(3) TYPEn. "當前流水號 DATA zbeskz TYPE marc-beskz. "采購方式 CLEAR batch_number. "批次號碼 CLEAR pre_flow_number. CLEAR cur_flow_number. CLEAR tab01. "首先獲取物料的采購方式 SELECT SINGLE marc~beskzINTO zbeskzFROM marc WHERE marc~werks = x_bncom-werks AND marc~matnr = x bncom-matnr. "首先獲取當前日期,當前物料下,該物料的最大批次號 CASE zbeskz. WHEN 'F'. "外購件,使用流水碼的批次號 SELECT MAX( charg ) INTObatch_number FROM MCH1 WHERE matnr = x_bn com-matnr AND ERSDA=sy-datum. IF batch_number IS INITIAL "如果當天的批次號不存在,那么當前流水號為001 cur_flow_number ='001'. ELSE. pre_flow_number = batch_number+6(3). "如果當天的批次存在,那么前一個流水號=取到的流水號 cur_flow_number = pre_flow_number+1. "當前流水號=前一個流水號+1 ENDIF. "將此次的批次信息插入到表ZBATCH 中 CONCATENATEsy-datum+2(6) cur_flow_number INTObatch_number "當前日期后6位+當前流水號作為當前的批次號碼 WHEN 'E'. IF x_bncom-bwart <> '101' or x_bncom-bwart <> '103'. MESSAGE e001(00)WITH'Please input batch number!'. ELSE. batch_number = x_bncom-aufnr. ENDIF. WHEN 'X'. IF x_bncom-aufnr IS INITIAL. SELECT MAX( charg) INTObatch_number FROM zbatch WHERE matnr = x bncom-matnr AND cdate=sy-datum. IF batch_number IS INITIAL. "如果當天的批次號不存在,那么當前流水號為001 cur_flow_number ='001'. ELSE. pre_flow_number = batch_number+6(3). "如果當天的批次存在,那么前一個流水號=取到的流水號 cur_flow_number = pre_flow_number+1 "當前流水號=前一個流水號+1 ENDIF. "將此次的批次信息插入到表ZBATCH 中 CONCATENATE sy-datum+2(6) cur_flow_number INTO batch_number "當前日期后6位+當前流水號作為當前的批次號碼 ELSE. IF x_bncom-bwart <> '101' or x_bncom-bwart <> '103'. MESSAGE e001(00)WITH'Please input batch number! Finished Goods auto batch numer only allowed for mvt 101'. ELSE. batch number = x bncom-aufnr. ENDIF. ENDIF. ENDCASE. * tab01-charg = batch_number. * tab01-matnr = x_bncom-matnr. * tab01-cdate =sy-datum. * tab01-werks = x_bncom-werks. * APPEND tab01. * * IF sy-ucomm = 'OK_POST1'. "只有post才會將數(shù)據寫入到表 ZBATCH 中 * INSERT zbatch FROM tab01. * COMMIT WORK. * ENDIF. new_charg = batch_number. 測試驗證: 采購件
根據當前系統(tǒng)日期帶出批次編號,測試通過。 點晴模切ERP更多信息:http://moqie.clicksun.cn,聯(lián)系電話:4001861886 該文章在 2024/8/28 10:54:49 編輯過 |
關鍵字查詢
相關文章
正在查詢... |