采购订单检查/保存BADI使用
生活随笔
收集整理的這篇文章主要介紹了
采购订单检查/保存BADI使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
BADI:ME_PROCESS_PO_CUST
需求:
2.1 根據采購申請是否經過修改或采購申請的類型,確定訂單為一級審批還是二級審批。一級
審批訂單匯總號為80,二級審批訂單匯總號為90。系統默認訂單匯總號為80,以下情況下訂
單需要做二級審批,程序增強將匯總號由80 變為90:
1)類型為NB 的采購申請轉采購訂單時,如果用戶修改了行項目的數量;
2)類型為NB 的采購申請轉采購訂單時,如果用戶未按貨源清單或設定的配額分配訂單時;
3)從類型為NB 的采購申請轉成的采購訂單,用戶通過ME22N 修改采購訂單;
4)類型為ZPR1、ZPR2、ZPR8(備貨采購、緊急采購、退貨)的采購申請轉采購訂單時;
5)定線訂單的確認數量經過修改時;
2.2 讀取最新的改版信息,與用戶錄入的版次進行校驗,提示用戶最新的改版版本
對于類型為ZP02(包材)的訂單,用戶在行項目的批次欄填入物料的版次號,保存訂單
時,系統從物料主數據讀取最新的改版信息(字段:MARA-ZEINR),并與用戶錄入的版次號進
行校驗,如不一致,發出警告“*****物料的最新版次號為*****”。
2.3 訂單保存時檢查運輸商和供應商是否同一個。
訂單保存時,如果該訂單涉及到運費(國際貿易條件不是“100”),系統檢查運輸商和供
應商是否為同一個編碼,如果為同一編碼,發出警告“供應商與運輸商為同一個公司”
系統邏輯:查找采購訂單的條件記錄ZFR1 中的運輸商與采購訂單的供應商
2.4 訂單保存時提示用戶某物料有改版控制量。
對于類型為ZP02(包材)的訂單,用戶保存訂單時,系統檢查該物料該版次在相應時間
段內是否有改版限制量,如果有,則給出發出警告“*****物料有改版限制量,請運行改版物
資完成量報表”。
系統邏輯:查找ZMM_GB 數據表中某物料某版次改版限制量的有效期,如果下訂單的時
間在有效期內,則發出警告。(具體見功能說明書《改版物資限制量》)。
2.5 類型為ZP01、ZP02 的訂單必須有采購申請的來源才能創建訂單。 (1)訂單header處理 method?IF_EX_ME_PROCESS_PO_CUST~PROCESS_HEADER.
??include?MM_MESSAGES_MAC.
??DATA:l_head?TYPE?mepoheader.
??DATA:l_item?TYPE?mepoitem.
??DATA:L_BANFN?TYPE?EBAN-BANFN,"
???????wa_EBAN?type?eban."采購申請頭
??data:items?type?purchase_order_items,
???????item_obj?type??purchase_order_item.
??l_head?=?IM_HEADER->get_data(?).
??items?=?im_header->get_items(?)?.
??clear:wa_EBAN.
??loop?at?items?into?item_obj?.
????l_item?=?item_obj-item->get_data(??).
????if?l_item-BANFN?<>?''.
??????select?single?*?into?wa_EBAN?from?EBAN?where?BANFN?=?l_item-BANFN?and?BNFPO?=?l_item-BNFPO.
??????case?wa_EBAN-BSART.
????????when?'ZPR1'?OR?'ZPR2'?OR?'ZPR8'.
??????????L_HEAD-SUBMI?=?'90'.
??????????IM_HEADER->set_data(?IM_DATA?=?L_HEAD?).
??????????CONTINUE.
????????WHEN?'NB'?OR?'NB1'?OR?'NB2'?OR?'NB3'.
??????????if?wa_EBAN-MENGE?<>?l_item-MENGE.
????????????L_HEAD-SUBMI?=?'90'.
????????????IM_HEADER->set_data(?IM_DATA?=?L_HEAD?).
????????????CONTINUE.
??????????endif.
??????endcase.
????endif.
??endloop.
??BREAK?zhangdq.
??if?sy-TCODE?=?'ME21N'?.
????IF?l_head-BSART?=?'ZPO1'?OR?l_head-BSART?=?'ZPO2'?OR?l_head-BSART?=?'ZPO3'
??????OR?l_head-BSART?=?'ZPO4'?OR?l_head-BSART?=?'ZPO5'?OR?l_head-BSART?=?'ZPO6'
??????OR?l_head-BSART?=?'ZPO7'?OR?l_head-BSART?=?'ZPO8'?OR?l_head-BSART?=?'ZPO9'.
??????if?L_HEAD-SUBMI?=?''?.
????????L_HEAD-SUBMI?=?'80'.
????????IM_HEADER->set_data(?IM_DATA?=?L_HEAD?).
??????endif.
????ENDIF.
??ENDIF.
endmethod. (2)訂單ITEM處理 method?IF_EX_ME_PROCESS_PO_CUST~PROCESS_ITEM.
??include?MM_MESSAGES_MAC.
??data:wa_mara?type?mara.
??DATA?:?re_header?TYPE?mepoheader.
??DATA:l_item?TYPE?mepoitem.
??DATA:?l_header?TYPE?REF?TO?if_purchase_order_mm."采購訂單抬頭
??DATA:?WA_ZMMT_GB?TYPE?ZMMT_GB.
??DATA:L_BANFN?TYPE?EBAN-BANFN,"
?????wa_EBAN?type?eban."采購申請頭
??l_header?=?im_item->get_header(?).
??re_header?=?l_header->get_data(?)."獲取頭信息
??l_item?=??im_item->get_data(?).
*1...讀取最新的改版信息,與用戶錄入的版次進行校驗,提示用戶最新的改版版本
*對于類型為ZP02(包材)的訂單,用戶在行項目的批次欄填入物料的版次號,保存訂單
*時,系統從物料主數據讀取最新的改版信息(字段:MARA-ZEINR),并與用戶錄入的版次號進
*行校驗,如不一致,發出警告“*****物料的最新版次號為*****”。
*2....對于類型為ZP02(包材)的訂單,用戶保存訂單時,系統檢查該物料該版次在相應時間
*段內是否有改版限制量,如果有,則給出發出警告“*****物料有改版限制量,請運行改版物
*資完成量報表”。
*系統邏輯:查找ZMM_GB?數據表中某物料某版次改版限制量的有效期,如果下訂單的時
*間在有效期內,則發出警告。(具體見功能說明書《改版物資限制量》)。
??BREAK?ZHANGDQ.
??CLEAR:wa_mara,WA_ZMMT_GB.
??if?re_header-BSART?=?'ZPO2'?.
????select?single?*?into?wa_mara?from?mara?where?matnr?=??l_item-matnr.
????if??l_item-CHARG?<>?wa_mara-ZEINR?.
??????mmpur_message?'W'?'ZMSG'?'001'?wa_mara-MATNR?wa_mara-ZEINR?''?''.
????ENDIF.
????SELECT?SINGLE?*?INTO?WA_ZMMT_GB?FROM?ZMMT_GB?WHERE?MATNR?=?l_item-MATNR
???????????????????????????????????????????????????AND?VERID?=?l_item-CHARG
???????????????????????????????????????????????????AND?SDATE?<=?l_item-EINDT
???????????????????????????????????????????????????AND?EDATE?>=?l_item-EINDT.
????IF?SY-SUBRC?=?0?.
??????mmpur_message?'W'?'ZMSG'?'002'?wa_mara-MATNR?''?''?''.
????ENDIF.
??ENDIF.
??if?l_item-BANFN?<>?''.
????select?single?*?into?wa_EBAN?from?EBAN?where?BANFN?=?l_item-BANFN?and?BNFPO?=?l_item-BNFPO.
????case?re_header-BSART.
??????when?'ZPR1'?OR?'ZPR2'?OR?'ZPR8'.
????????re_HEADer-SUBMI?=?'90'.
??????WHEN?'NB'?OR?'NB1'?OR?'NB2'?OR?'NB3'.
????????if?wa_EBAN-MENGE?<>?l_item-MENGE.
??????????re_HEADer-SUBMI?=?'90'.
????????endif.
????????if?re_header-BSART?=?'NB'?AND?re_header-LIFNR?<>?wa_EBAN-FLIEF?."如果采購申請是NB類型,并且申請供應商和采購供應商不一致,直接設置為90
????????re_HEADer-SUBMI?=?'90'.
????????ENDIF.
????endcase.
????l_header->set_data(?IM_DATA?=?re_HEADer?).
??endif.
*訂單保存時檢查運輸商和供應商是否同一個。
*訂單保存時,如果該訂單涉及到運費(國際貿易條件不是“100”),系統檢查運輸商和供
*應商是否為同一個編碼,如果為同一編碼,發出警告“供應商與運輸商為同一個公司”
*系統邏輯:查找采購訂單的條件記錄ZFR1?中的運輸商與采購訂單的供應商
??DATA:wa_im_komv?TYPE?komv.
??DATA:l_get_conditions?TYPE?mmpur_tkomv.
endmethod. (3)訂單CHECK method?IF_EX_ME_PROCESS_PO_CUST~CHECK.
??include?MM_MESSAGES_MAC.
??DATA:?header?TYPE?mepoheader,
items?TYPE?purchase_order_items,
line_item?TYPE?purchase_order_item,
po_line?TYPE?mepoitem,
po_condition?type?mmpur_tkomv,
wa_im_komv?TYPE?komv,
eipo_line?type?MEPO_EIPO.?"Foreign?Trade:?Export/Import:?Item?Data
data:l_flag(1)."是否能手工創建采購訂單標志,只是限制ZPO1,ZPO2的訂單類型
??header?=?im_header->get_data(?).
??items?=?im_header->get_items(?).
??CLEAR:l_flag.
??LOOP?AT?items?INTO?line_item.
????po_line?=?line_item-item->get_data(?).
????IF?PO_LINE-BANFN?=?''.
????l_flag?=?'X'.
????ENDIF.
????CALL?METHOD?line_item-item->get_conditions
??????IMPORTING
????????ex_conditions?=?po_condition.
????IF?header-INCO1?<>?'100'.
??????loop?at?po_condition?into?wa_im_komv.
????????IF?wa_im_komv-KSCHL?=?'ZFR1'?AND?wa_im_komv-LIFNR?=?header-LIFNR.
??????????mmpur_message?'W'?'ZMSG'?'003'?wa_im_komv-KPOSN?''?''?''.
????????ENDIF.
????????clear?wa_im_komv.
??????endloop.
????endif.
??endloop.
?IF?(?header-BSART?=?'ZPO1'?OR?header-BSART?=?'ZPO2'?)?AND?l_flag?=?'X'?and?sy-TCODE?=?'ME21N'.
????mmpur_message?'E'?'ZMSG'?'004'?''?''?''?''.
?ENDIF.
endmethod. (4)SE91消息設置 001?&1物料的最新版次號為&2
002?&1物料有改版限制量,請運行改版物資完成量報表?
003?采購訂單&1行供應商與運輸商為同一個公司?
004?類型為ZPO1、ZPO2的訂單必須有采購申請的來源才能創建訂單
審批訂單匯總號為80,二級審批訂單匯總號為90。系統默認訂單匯總號為80,以下情況下訂
單需要做二級審批,程序增強將匯總號由80 變為90:
1)類型為NB 的采購申請轉采購訂單時,如果用戶修改了行項目的數量;
2)類型為NB 的采購申請轉采購訂單時,如果用戶未按貨源清單或設定的配額分配訂單時;
3)從類型為NB 的采購申請轉成的采購訂單,用戶通過ME22N 修改采購訂單;
4)類型為ZPR1、ZPR2、ZPR8(備貨采購、緊急采購、退貨)的采購申請轉采購訂單時;
5)定線訂單的確認數量經過修改時;
2.2 讀取最新的改版信息,與用戶錄入的版次進行校驗,提示用戶最新的改版版本
對于類型為ZP02(包材)的訂單,用戶在行項目的批次欄填入物料的版次號,保存訂單
時,系統從物料主數據讀取最新的改版信息(字段:MARA-ZEINR),并與用戶錄入的版次號進
行校驗,如不一致,發出警告“*****物料的最新版次號為*****”。
2.3 訂單保存時檢查運輸商和供應商是否同一個。
訂單保存時,如果該訂單涉及到運費(國際貿易條件不是“100”),系統檢查運輸商和供
應商是否為同一個編碼,如果為同一編碼,發出警告“供應商與運輸商為同一個公司”
系統邏輯:查找采購訂單的條件記錄ZFR1 中的運輸商與采購訂單的供應商
2.4 訂單保存時提示用戶某物料有改版控制量。
對于類型為ZP02(包材)的訂單,用戶保存訂單時,系統檢查該物料該版次在相應時間
段內是否有改版限制量,如果有,則給出發出警告“*****物料有改版限制量,請運行改版物
資完成量報表”。
系統邏輯:查找ZMM_GB 數據表中某物料某版次改版限制量的有效期,如果下訂單的時
間在有效期內,則發出警告。(具體見功能說明書《改版物資限制量》)。
2.5 類型為ZP01、ZP02 的訂單必須有采購申請的來源才能創建訂單。 (1)訂單header處理 method?IF_EX_ME_PROCESS_PO_CUST~PROCESS_HEADER.
??include?MM_MESSAGES_MAC.
??DATA:l_head?TYPE?mepoheader.
??DATA:l_item?TYPE?mepoitem.
??DATA:L_BANFN?TYPE?EBAN-BANFN,"
???????wa_EBAN?type?eban."采購申請頭
??data:items?type?purchase_order_items,
???????item_obj?type??purchase_order_item.
??l_head?=?IM_HEADER->get_data(?).
??items?=?im_header->get_items(?)?.
??clear:wa_EBAN.
??loop?at?items?into?item_obj?.
????l_item?=?item_obj-item->get_data(??).
????if?l_item-BANFN?<>?''.
??????select?single?*?into?wa_EBAN?from?EBAN?where?BANFN?=?l_item-BANFN?and?BNFPO?=?l_item-BNFPO.
??????case?wa_EBAN-BSART.
????????when?'ZPR1'?OR?'ZPR2'?OR?'ZPR8'.
??????????L_HEAD-SUBMI?=?'90'.
??????????IM_HEADER->set_data(?IM_DATA?=?L_HEAD?).
??????????CONTINUE.
????????WHEN?'NB'?OR?'NB1'?OR?'NB2'?OR?'NB3'.
??????????if?wa_EBAN-MENGE?<>?l_item-MENGE.
????????????L_HEAD-SUBMI?=?'90'.
????????????IM_HEADER->set_data(?IM_DATA?=?L_HEAD?).
????????????CONTINUE.
??????????endif.
??????endcase.
????endif.
??endloop.
??BREAK?zhangdq.
??if?sy-TCODE?=?'ME21N'?.
????IF?l_head-BSART?=?'ZPO1'?OR?l_head-BSART?=?'ZPO2'?OR?l_head-BSART?=?'ZPO3'
??????OR?l_head-BSART?=?'ZPO4'?OR?l_head-BSART?=?'ZPO5'?OR?l_head-BSART?=?'ZPO6'
??????OR?l_head-BSART?=?'ZPO7'?OR?l_head-BSART?=?'ZPO8'?OR?l_head-BSART?=?'ZPO9'.
??????if?L_HEAD-SUBMI?=?''?.
????????L_HEAD-SUBMI?=?'80'.
????????IM_HEADER->set_data(?IM_DATA?=?L_HEAD?).
??????endif.
????ENDIF.
??ENDIF.
endmethod. (2)訂單ITEM處理 method?IF_EX_ME_PROCESS_PO_CUST~PROCESS_ITEM.
??include?MM_MESSAGES_MAC.
??data:wa_mara?type?mara.
??DATA?:?re_header?TYPE?mepoheader.
??DATA:l_item?TYPE?mepoitem.
??DATA:?l_header?TYPE?REF?TO?if_purchase_order_mm."采購訂單抬頭
??DATA:?WA_ZMMT_GB?TYPE?ZMMT_GB.
??DATA:L_BANFN?TYPE?EBAN-BANFN,"
?????wa_EBAN?type?eban."采購申請頭
??l_header?=?im_item->get_header(?).
??re_header?=?l_header->get_data(?)."獲取頭信息
??l_item?=??im_item->get_data(?).
*1...讀取最新的改版信息,與用戶錄入的版次進行校驗,提示用戶最新的改版版本
*對于類型為ZP02(包材)的訂單,用戶在行項目的批次欄填入物料的版次號,保存訂單
*時,系統從物料主數據讀取最新的改版信息(字段:MARA-ZEINR),并與用戶錄入的版次號進
*行校驗,如不一致,發出警告“*****物料的最新版次號為*****”。
*2....對于類型為ZP02(包材)的訂單,用戶保存訂單時,系統檢查該物料該版次在相應時間
*段內是否有改版限制量,如果有,則給出發出警告“*****物料有改版限制量,請運行改版物
*資完成量報表”。
*系統邏輯:查找ZMM_GB?數據表中某物料某版次改版限制量的有效期,如果下訂單的時
*間在有效期內,則發出警告。(具體見功能說明書《改版物資限制量》)。
??BREAK?ZHANGDQ.
??CLEAR:wa_mara,WA_ZMMT_GB.
??if?re_header-BSART?=?'ZPO2'?.
????select?single?*?into?wa_mara?from?mara?where?matnr?=??l_item-matnr.
????if??l_item-CHARG?<>?wa_mara-ZEINR?.
??????mmpur_message?'W'?'ZMSG'?'001'?wa_mara-MATNR?wa_mara-ZEINR?''?''.
????ENDIF.
????SELECT?SINGLE?*?INTO?WA_ZMMT_GB?FROM?ZMMT_GB?WHERE?MATNR?=?l_item-MATNR
???????????????????????????????????????????????????AND?VERID?=?l_item-CHARG
???????????????????????????????????????????????????AND?SDATE?<=?l_item-EINDT
???????????????????????????????????????????????????AND?EDATE?>=?l_item-EINDT.
????IF?SY-SUBRC?=?0?.
??????mmpur_message?'W'?'ZMSG'?'002'?wa_mara-MATNR?''?''?''.
????ENDIF.
??ENDIF.
??if?l_item-BANFN?<>?''.
????select?single?*?into?wa_EBAN?from?EBAN?where?BANFN?=?l_item-BANFN?and?BNFPO?=?l_item-BNFPO.
????case?re_header-BSART.
??????when?'ZPR1'?OR?'ZPR2'?OR?'ZPR8'.
????????re_HEADer-SUBMI?=?'90'.
??????WHEN?'NB'?OR?'NB1'?OR?'NB2'?OR?'NB3'.
????????if?wa_EBAN-MENGE?<>?l_item-MENGE.
??????????re_HEADer-SUBMI?=?'90'.
????????endif.
????????if?re_header-BSART?=?'NB'?AND?re_header-LIFNR?<>?wa_EBAN-FLIEF?."如果采購申請是NB類型,并且申請供應商和采購供應商不一致,直接設置為90
????????re_HEADer-SUBMI?=?'90'.
????????ENDIF.
????endcase.
????l_header->set_data(?IM_DATA?=?re_HEADer?).
??endif.
*訂單保存時檢查運輸商和供應商是否同一個。
*訂單保存時,如果該訂單涉及到運費(國際貿易條件不是“100”),系統檢查運輸商和供
*應商是否為同一個編碼,如果為同一編碼,發出警告“供應商與運輸商為同一個公司”
*系統邏輯:查找采購訂單的條件記錄ZFR1?中的運輸商與采購訂單的供應商
??DATA:wa_im_komv?TYPE?komv.
??DATA:l_get_conditions?TYPE?mmpur_tkomv.
endmethod. (3)訂單CHECK method?IF_EX_ME_PROCESS_PO_CUST~CHECK.
??include?MM_MESSAGES_MAC.
??DATA:?header?TYPE?mepoheader,
items?TYPE?purchase_order_items,
line_item?TYPE?purchase_order_item,
po_line?TYPE?mepoitem,
po_condition?type?mmpur_tkomv,
wa_im_komv?TYPE?komv,
eipo_line?type?MEPO_EIPO.?"Foreign?Trade:?Export/Import:?Item?Data
data:l_flag(1)."是否能手工創建采購訂單標志,只是限制ZPO1,ZPO2的訂單類型
??header?=?im_header->get_data(?).
??items?=?im_header->get_items(?).
??CLEAR:l_flag.
??LOOP?AT?items?INTO?line_item.
????po_line?=?line_item-item->get_data(?).
????IF?PO_LINE-BANFN?=?''.
????l_flag?=?'X'.
????ENDIF.
????CALL?METHOD?line_item-item->get_conditions
??????IMPORTING
????????ex_conditions?=?po_condition.
????IF?header-INCO1?<>?'100'.
??????loop?at?po_condition?into?wa_im_komv.
????????IF?wa_im_komv-KSCHL?=?'ZFR1'?AND?wa_im_komv-LIFNR?=?header-LIFNR.
??????????mmpur_message?'W'?'ZMSG'?'003'?wa_im_komv-KPOSN?''?''?''.
????????ENDIF.
????????clear?wa_im_komv.
??????endloop.
????endif.
??endloop.
?IF?(?header-BSART?=?'ZPO1'?OR?header-BSART?=?'ZPO2'?)?AND?l_flag?=?'X'?and?sy-TCODE?=?'ME21N'.
????mmpur_message?'E'?'ZMSG'?'004'?''?''?''?''.
?ENDIF.
endmethod. (4)SE91消息設置 001?&1物料的最新版次號為&2
002?&1物料有改版限制量,請運行改版物資完成量報表?
003?采購訂單&1行供應商與運輸商為同一個公司?
004?類型為ZPO1、ZPO2的訂單必須有采購申請的來源才能創建訂單
總結
以上是生活随笔為你收集整理的采购订单检查/保存BADI使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SE16N新改表内容方法!!!
- 下一篇: 采购订单历史表