采购订单检查/保存BADI使用
生活随笔
收集整理的這篇文章主要介紹了
采购订单检查/保存BADI使用
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
BADI:ME_PROCESS_PO_CUST
需求:
2.1 根據(jù)采購申請是否經(jīng)過修改或采購申請的類型,確定訂單為一級審批還是二級審批。一級
審批訂單匯總號為80,二級審批訂單匯總號為90。系統(tǒng)默認(rèn)訂單匯總號為80,以下情況下訂
單需要做二級審批,程序增強(qiáng)將匯總號由80 變?yōu)?0:
1)類型為NB 的采購申請轉(zhuǎn)采購訂單時(shí),如果用戶修改了行項(xiàng)目的數(shù)量;
2)類型為NB 的采購申請轉(zhuǎn)采購訂單時(shí),如果用戶未按貨源清單或設(shè)定的配額分配訂單時(shí);
3)從類型為NB 的采購申請轉(zhuǎn)成的采購訂單,用戶通過ME22N 修改采購訂單;
4)類型為ZPR1、ZPR2、ZPR8(備貨采購、緊急采購、退貨)的采購申請轉(zhuǎn)采購訂單時(shí);
5)定線訂單的確認(rèn)數(shù)量經(jīng)過修改時(shí);
2.2 讀取最新的改版信息,與用戶錄入的版次進(jìn)行校驗(yàn),提示用戶最新的改版版本
對于類型為ZP02(包材)的訂單,用戶在行項(xiàng)目的批次欄填入物料的版次號,保存訂單
時(shí),系統(tǒng)從物料主數(shù)據(jù)讀取最新的改版信息(字段:MARA-ZEINR),并與用戶錄入的版次號進(jìn)
行校驗(yàn),如不一致,發(fā)出警告“*****物料的最新版次號為*****”。
2.3 訂單保存時(shí)檢查運(yùn)輸商和供應(yīng)商是否同一個(gè)。
訂單保存時(shí),如果該訂單涉及到運(yùn)費(fèi)(國際貿(mào)易條件不是“100”),系統(tǒng)檢查運(yùn)輸商和供
應(yīng)商是否為同一個(gè)編碼,如果為同一編碼,發(fā)出警告“供應(yīng)商與運(yùn)輸商為同一個(gè)公司”
系統(tǒng)邏輯:查找采購訂單的條件記錄ZFR1 中的運(yùn)輸商與采購訂單的供應(yīng)商
2.4 訂單保存時(shí)提示用戶某物料有改版控制量。
對于類型為ZP02(包材)的訂單,用戶保存訂單時(shí),系統(tǒng)檢查該物料該版次在相應(yīng)時(shí)間
段內(nèi)是否有改版限制量,如果有,則給出發(fā)出警告“*****物料有改版限制量,請運(yùn)行改版物
資完成量報(bào)表”。
系統(tǒng)邏輯:查找ZMM_GB 數(shù)據(jù)表中某物料某版次改版限制量的有效期,如果下訂單的時(shí)
間在有效期內(nèi),則發(fā)出警告。(具體見功能說明書《改版物資限制量》)。
2.5 類型為ZP01、ZP02 的訂單必須有采購申請的來源才能創(chuàng)建訂單。 (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...讀取最新的改版信息,與用戶錄入的版次進(jìn)行校驗(yàn),提示用戶最新的改版版本
*對于類型為ZP02(包材)的訂單,用戶在行項(xiàng)目的批次欄填入物料的版次號,保存訂單
*時(shí),系統(tǒng)從物料主數(shù)據(jù)讀取最新的改版信息(字段:MARA-ZEINR),并與用戶錄入的版次號進(jìn)
*行校驗(yàn),如不一致,發(fā)出警告“*****物料的最新版次號為*****”。
*2....對于類型為ZP02(包材)的訂單,用戶保存訂單時(shí),系統(tǒng)檢查該物料該版次在相應(yīng)時(shí)間
*段內(nèi)是否有改版限制量,如果有,則給出發(fā)出警告“*****物料有改版限制量,請運(yùn)行改版物
*資完成量報(bào)表”。
*系統(tǒng)邏輯:查找ZMM_GB?數(shù)據(jù)表中某物料某版次改版限制量的有效期,如果下訂單的時(shí)
*間在有效期內(nèi),則發(fā)出警告。(具體見功能說明書《改版物資限制量》)。
??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類型,并且申請供應(yīng)商和采購供應(yīng)商不一致,直接設(shè)置為90
????????re_HEADer-SUBMI?=?'90'.
????????ENDIF.
????endcase.
????l_header->set_data(?IM_DATA?=?re_HEADer?).
??endif.
*訂單保存時(shí)檢查運(yùn)輸商和供應(yīng)商是否同一個(gè)。
*訂單保存時(shí),如果該訂單涉及到運(yùn)費(fèi)(國際貿(mào)易條件不是“100”),系統(tǒng)檢查運(yùn)輸商和供
*應(yīng)商是否為同一個(gè)編碼,如果為同一編碼,發(fā)出警告“供應(yīng)商與運(yùn)輸商為同一個(gè)公司”
*系統(tǒng)邏輯:查找采購訂單的條件記錄ZFR1?中的運(yùn)輸商與采購訂單的供應(yīng)商
??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)."是否能手工創(chuàng)建采購訂單標(biāo)志,只是限制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消息設(shè)置 001?&1物料的最新版次號為&2
002?&1物料有改版限制量,請運(yùn)行改版物資完成量報(bào)表?
003?采購訂單&1行供應(yīng)商與運(yùn)輸商為同一個(gè)公司?
004?類型為ZPO1、ZPO2的訂單必須有采購申請的來源才能創(chuàng)建訂單
審批訂單匯總號為80,二級審批訂單匯總號為90。系統(tǒng)默認(rèn)訂單匯總號為80,以下情況下訂
單需要做二級審批,程序增強(qiáng)將匯總號由80 變?yōu)?0:
1)類型為NB 的采購申請轉(zhuǎn)采購訂單時(shí),如果用戶修改了行項(xiàng)目的數(shù)量;
2)類型為NB 的采購申請轉(zhuǎn)采購訂單時(shí),如果用戶未按貨源清單或設(shè)定的配額分配訂單時(shí);
3)從類型為NB 的采購申請轉(zhuǎn)成的采購訂單,用戶通過ME22N 修改采購訂單;
4)類型為ZPR1、ZPR2、ZPR8(備貨采購、緊急采購、退貨)的采購申請轉(zhuǎn)采購訂單時(shí);
5)定線訂單的確認(rèn)數(shù)量經(jīng)過修改時(shí);
2.2 讀取最新的改版信息,與用戶錄入的版次進(jìn)行校驗(yàn),提示用戶最新的改版版本
對于類型為ZP02(包材)的訂單,用戶在行項(xiàng)目的批次欄填入物料的版次號,保存訂單
時(shí),系統(tǒng)從物料主數(shù)據(jù)讀取最新的改版信息(字段:MARA-ZEINR),并與用戶錄入的版次號進(jìn)
行校驗(yàn),如不一致,發(fā)出警告“*****物料的最新版次號為*****”。
2.3 訂單保存時(shí)檢查運(yùn)輸商和供應(yīng)商是否同一個(gè)。
訂單保存時(shí),如果該訂單涉及到運(yùn)費(fèi)(國際貿(mào)易條件不是“100”),系統(tǒng)檢查運(yùn)輸商和供
應(yīng)商是否為同一個(gè)編碼,如果為同一編碼,發(fā)出警告“供應(yīng)商與運(yùn)輸商為同一個(gè)公司”
系統(tǒng)邏輯:查找采購訂單的條件記錄ZFR1 中的運(yùn)輸商與采購訂單的供應(yīng)商
2.4 訂單保存時(shí)提示用戶某物料有改版控制量。
對于類型為ZP02(包材)的訂單,用戶保存訂單時(shí),系統(tǒng)檢查該物料該版次在相應(yīng)時(shí)間
段內(nèi)是否有改版限制量,如果有,則給出發(fā)出警告“*****物料有改版限制量,請運(yùn)行改版物
資完成量報(bào)表”。
系統(tǒng)邏輯:查找ZMM_GB 數(shù)據(jù)表中某物料某版次改版限制量的有效期,如果下訂單的時(shí)
間在有效期內(nèi),則發(fā)出警告。(具體見功能說明書《改版物資限制量》)。
2.5 類型為ZP01、ZP02 的訂單必須有采購申請的來源才能創(chuàng)建訂單。 (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...讀取最新的改版信息,與用戶錄入的版次進(jìn)行校驗(yàn),提示用戶最新的改版版本
*對于類型為ZP02(包材)的訂單,用戶在行項(xiàng)目的批次欄填入物料的版次號,保存訂單
*時(shí),系統(tǒng)從物料主數(shù)據(jù)讀取最新的改版信息(字段:MARA-ZEINR),并與用戶錄入的版次號進(jìn)
*行校驗(yàn),如不一致,發(fā)出警告“*****物料的最新版次號為*****”。
*2....對于類型為ZP02(包材)的訂單,用戶保存訂單時(shí),系統(tǒng)檢查該物料該版次在相應(yīng)時(shí)間
*段內(nèi)是否有改版限制量,如果有,則給出發(fā)出警告“*****物料有改版限制量,請運(yùn)行改版物
*資完成量報(bào)表”。
*系統(tǒng)邏輯:查找ZMM_GB?數(shù)據(jù)表中某物料某版次改版限制量的有效期,如果下訂單的時(shí)
*間在有效期內(nèi),則發(fā)出警告。(具體見功能說明書《改版物資限制量》)。
??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類型,并且申請供應(yīng)商和采購供應(yīng)商不一致,直接設(shè)置為90
????????re_HEADer-SUBMI?=?'90'.
????????ENDIF.
????endcase.
????l_header->set_data(?IM_DATA?=?re_HEADer?).
??endif.
*訂單保存時(shí)檢查運(yùn)輸商和供應(yīng)商是否同一個(gè)。
*訂單保存時(shí),如果該訂單涉及到運(yùn)費(fèi)(國際貿(mào)易條件不是“100”),系統(tǒng)檢查運(yùn)輸商和供
*應(yīng)商是否為同一個(gè)編碼,如果為同一編碼,發(fā)出警告“供應(yīng)商與運(yùn)輸商為同一個(gè)公司”
*系統(tǒng)邏輯:查找采購訂單的條件記錄ZFR1?中的運(yùn)輸商與采購訂單的供應(yīng)商
??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)."是否能手工創(chuàng)建采購訂單標(biāo)志,只是限制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消息設(shè)置 001?&1物料的最新版次號為&2
002?&1物料有改版限制量,請運(yùn)行改版物資完成量報(bào)表?
003?采購訂單&1行供應(yīng)商與運(yùn)輸商為同一個(gè)公司?
004?類型為ZPO1、ZPO2的訂單必須有采購申請的來源才能創(chuàng)建訂單
總結(jié)
以上是生活随笔為你收集整理的采购订单检查/保存BADI使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SE16N新改表内容方法!!!
- 下一篇: 采购订单历史表