新增PR(采购申请)类型
福建下东莞的采购订单时,为了从编码上做出区分,新增PR类型(ZNB6)和PO类型。具体配置,另行百度,这里
说明一点,配置上传后,在处理PO类型的'核发程序'配置的时候,需要在正式机的事务码CL24N中处理。
因为新增PR的时候,有在MD04中,把计划订单直接转PR的,也有在ME51N直接新建PR的。而且增强点不同,
主要是检查虎门(5100工厂)不能下这个类型的PR,供应商也只能选择虎门的供应商,这里直接放代码
ZXM02U12

*&---------------------------------------------------------------------* *& INCLUDE ZXM02U12 *&---------------------------------------------------------------------* *BREAK-POINT. DATA: LS_IM_EBAN LIKE EBAN. DATA:LS_EBAN LIKE LINE OF IM_T_EBAN, LS_EBKN LIKE LINE OF IM_T_EBKN, LS_MESSAGE TYPE BAPIRET2. LOOP AT IM_T_EBAN INTO LS_IM_EBAN. IF LS_IM_EBAN-BSART EQ 'ZNB6'. IF LS_IM_EBAN-WERKS EQ '5100'. LS_MESSAGE-TYPE = 'E'. LS_MESSAGE-ID = 'ZMM'."消息类 LS_MESSAGE-NUMBER = '000'. LS_MESSAGE-ROW = LS_EBAN-BNFPO. LS_MESSAGE-MESSAGE_V1 = '虎門不能下虎門的採購單,'. APPEND LS_MESSAGE TO EX_MESSAGES. ENDIF. * IF LS_IM_EBAN-EKORG NE '6100'. * LS_MESSAGE-TYPE = 'E'. * LS_MESSAGE-ID = 'ZMM'."消息类 * LS_MESSAGE-NUMBER = '000'. * LS_MESSAGE-ROW = LS_EBAN-BNFPO. * LS_MESSAGE-MESSAGE_V1 = '銷售組織不是6100(福建)'. * APPEND LS_MESSAGE TO EX_MESSAGES. * ENDIF. * IF LS_IM_EBAN-FLIEF NE '0000005100'."固定供應商不為5100(虎門) * LS_MESSAGE-TYPE = 'E'. * LS_MESSAGE-ID = 'ZMM'."消息类 * LS_MESSAGE-NUMBER = '000'. * LS_MESSAGE-ROW = LS_EBAN-BNFPO. * LS_MESSAGE-MESSAGE_V1 = '固定供應商不是5100(虎門)'. * APPEND LS_MESSAGE TO EX_MESSAGES. * ENDIF. ENDIF. ENDLOOP.
LM61HF10,这里不改数量,不会生效

*----------------------------------------------------------------------* * INCLUDE LM61HF10: Pruefungen von Bildschirmeingaben * *----------------------------------------------------------------------* *----------------------------------------------------------------------* * CHECK_PLANT * * * * Prueft Existenz des Werks ohne Seiteneffekte auf die globale * * Struktur MT61D * *----------------------------------------------------------------------* FORM check_plant USING iv_matnr LIKE mt61d-matnr iv_werks LIKE mt61d-werks. DATA: BEGIN OF mtcom. INCLUDE STRUCTURE mtcom. DATA: END OF mtcom. IF gs_mt61d-matnr <> iv_matnr "Daten noch nicht gelesen OR gs_mt61d-werks <> iv_werks. CLEAR mtcom. mtcom-kenng = 'MT61D'. mtcom-spras = sy-langu. mtcom-matnr = iv_matnr. mtcom-werks = iv_werks. CALL FUNCTION 'MATERIAL_READ' EXPORTING schluessel = mtcom EXCEPTIONS material_not_found = 04 plant_not_found = 08 account_not_found = 12. IF sy-subrc > 0. MESSAGE e004 WITH iv_matnr iv_werks. ENDIF. ENDIF. ENDFORM. "CHECK_PLANT *----------------------------------------------------------------------* * Lesen und Prüfen der Seriennummer SERNR aus Tab. SNUM * *----------------------------------------------------------------------* FORM check_bom_explosion_nr USING iv_sernr LIKE snum-sernr iv_pwwrk LIKE mt61d-werks iv_matnr LIKE mt61d-matnr. SELECT SINGLE * FROM snum WHERE sernr = iv_sernr. IF sy-subrc > 0. MESSAGE e571 WITH iv_sernr. "Seriennummer & ist nicht vorhanden ENDIF. IF NOT snum-xloek IS INITIAL. MESSAGE e367 WITH iv_sernr. "Seriennummern & zum löschen vorgemerkt ENDIF. IF snum-snsta = snsta_inactive. MESSAGE e341 WITH iv_sernr. "Seriennummern & ist nicht aktiv ENDIF. IF NOT snum-werks IS INITIAL AND snum-werks NE iv_pwwrk. MESSAGE e342 WITH iv_sernr snum-werks. ENDIF. IF NOT snum-matnr IS INITIAL "SNUM gültig für Material ? AND snum-matnr NE iv_matnr. MESSAGE e343 WITH iv_sernr snum-matnr snum-werks. ENDIF. ENDFORM. "CHECK_BOM_EXPLOSION_NR *---------------------------------------------------------------------* * GET_NEW_REVISION_LEVEL * *---------------------------------------------------------------------* FORM get_new_revision_level. PERFORM read_t460p USING mdba-pstyp. IF t460p-kzsta EQ minus AND gs_mt61d-kzrev = xflag. CLEAR mdba-revlv. "TL 46C CALL FUNCTION 'REVISION_LEVEL_SELECT' EXPORTING datuv = mdba-frgdt matnr = mdba-matnr IMPORTING arevlv = mdba-revlv EXCEPTIONS date_not_found = 01 ecn_not_found = 02 ecn_no_revision = 03 input_incomplete = 04 input_inconsistent = 05 revision_not_found = 06. ENDIF. ENDFORM. "GET_NEW_REVISION_LEVEL *----------------------------------------------------------------------* * CHECK_REQUISITION_QUANTITY * *----------------------------------------------------------------------* FORM check_requisition_quantity. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Form CHECK_REQUISITION_QUANTITY, Start A *$*$-Start: (1)---------------------------------------------------------------------------------$*$* ENHANCEMENT 3 ZHM_MD15. "active version IF SY-UNAME = 'MISHM'. ENDIF. ENDENHANCEMENT. *$*$-End: (1)---------------------------------------------------------------------------------$*$* *{ INSERT DEVK911252 1 * IF mdba-BSART eq 'ZNB6'. IF mdba-WERKS EQ '5100'. * LS_MESSAGE-TYPE = 'E'. * LS_MESSAGE-ID = 'ZMM'."消息类 * LS_MESSAGE-NUMBER = '000'. * LS_MESSAGE-ROW = LS_EBAN-BNFPO. MESSAGE E000(ZMM) WITH '虎門不能下虎門的採購單,'. * APPEND LS_MESSAGE TO EX_MESSAGES. ENDIF. * IF mdba-EKORG NE '6100'. ** LS_MESSAGE-TYPE = 'E'. ** LS_MESSAGE-ID = 'ZMM'."消息类 ** LS_MESSAGE-NUMBER = '000'. ** LS_MESSAGE-ROW = LS_EBAN-BNFPO. * MESSAGE E000(ZMM) WITH '銷售組織不是6100(福建)'. ** APPEND LS_MESSAGE TO EX_MESSAGES. * ENDIF. * IF mdba-FLIEF NE '0000005100'."固定供應商不為5100(虎門) ** LS_MESSAGE-TYPE = 'E'. ** LS_MESSAGE-ID = 'ZMM'."消息类 ** LS_MESSAGE-NUMBER = '000'. ** LS_MESSAGE-ROW = LS_EBAN-BNFPO. * MESSAGE E000(ZMM) WITH '固定供應商不是5100(虎門)'. ** APPEND LS_MESSAGE TO EX_MESSAGES. * ENDIF. ENDIF. *} INSERT DATA: lv_restquantity LIKE plaf-gsmng. *--> Banf-Menge eingegeben ? IF mdba-menge <= 0. MESSAGE e212. ENDIF. *--> BANF-Menge kleiner PLAF-Menge ? IF mdba-menge < cm61p-gsmng. lv_restquantity = cm61p-gsmng - mdba-menge. IF plaf-gsmng > 0. MOVE lv_restquantity TO plaf-gsmng. MOVE xflag TO plaf-auffx. MOVE vstatt TO cm61p-pstat. MESSAGE s056. ENDIF. ENDIF. *--> BANF-Menge groesser PLAF-Menge ? IF mdba-menge GE cm61p-gsmng. MOVE cm61p-gsmng TO plaf-gsmng. CLEAR plaf-auffx. CLEAR cm61p-pstat. ENDIF. ENDFORM. "CHECK_REQUISITION_QUANTITY *----------------------------------------------------------------------* * CHECK_ORDER_TYPE_VS_ITEM_CAT * *----------------------------------------------------------------------* FORM check_order_type_vs_item_cat USING iv_bsart LIKE mdba-bsart iv_pstyp LIKE mdba-pstyp. IF t161p-bsart = iv_bsart AND t161p-bstyp = 'B' AND t161p-pstyp = iv_pstyp. EXIT. ENDIF. SELECT SINGLE * FROM t161p WHERE bsart = iv_bsart AND bstyp = 'B' AND pstyp = iv_pstyp. IF sy-subrc > 0. * MESSAGE E020(ME). MESSAGE e020(me) WITH iv_bsart 'B' iv_pstyp. ENDIF. ENDFORM. "CHECK_ORDER_TYPE_VS_ITEM_CAT *----------------------------------------------------------------------* * CHECK_ORDER_TYPE * *----------------------------------------------------------------------* FORM check_order_type USING iv_bsart LIKE mdba-bsart. IF t161-bsart = iv_bsart AND t161-bstyp = 'B'. EXIT. ENDIF. SELECT SINGLE * FROM t161 WHERE bsart = iv_bsart AND bstyp = 'B'. IF sy-subrc > 0. MESSAGE e013(me) WITH iv_bsart 'B'. ENDIF. ENDFORM. "CHECK_ORDER_TYPE *&---------------------------------------------------------------------* *& Form READ_MARC *&---------------------------------------------------------------------* *----------------------------------------------------------------------* * Lesen Material direkt aus Datenbank * *----------------------------------------------------------------------* FORM read_marc USING matnr LIKE marc-matnr werks LIKE marc-werks. *--> Kommunikationsworkaera fuellen CLEAR mtcom. MOVE 'MARC' TO mtcom-kenng. MOVE matnr TO mtcom-matnr. MOVE werks TO mtcom-werks. *--> Materialstamm fuer Disposition lesen CALL FUNCTION 'MATERIAL_LESEN' EXPORTING schluessel = mtcom IMPORTING matdaten = marc return = mtcor TABLES seqmat01 = dummy EXCEPTIONS material_not_found = 04 plant_not_found = 08 account_not_found = 12. IF sy-subrc NE 0. RAISE error. ENDIF. "TL 46c ENDFORM. " READ_MARC *&---------------------------------------------------------------------* *& Form SUB_SCRAP "TL: 46B *&---------------------------------------------------------------------* * Baugruppenausschuss von Gesamtmenge subtrahieren *----------------------------------------------------------------------* FORM sub_scrap CHANGING iv_gsmng LIKE plaf-gsmng iv_avmng LIKE plaf-avmng. *--> Exit-Bedingungen CHECK iv_avmng GT 0. CHECK iv_gsmng GT iv_avmng. *--> Baugruppenausschuss abziehen iv_gsmng = iv_gsmng - iv_avmng. CLEAR iv_avmng. ENDFORM. " SUB_SCRAP *&---------------------------------------------------------------------* *& Form ADD_SCRAP "TL: 46B *&---------------------------------------------------------------------* * Baugruppenausschuss zur Gesamtmenge addieren * Berechnung erfolgt ueber proportionale Anpassung des * urspruenglichen Baugruppenausschusses *----------------------------------------------------------------------* FORM add_scrap USING iv_gsmng_old LIKE plaf-gsmng iv_avmng_old LIKE plaf-avmng CHANGING iv_gsmng_new LIKE plaf-gsmng iv_avmng_new LIKE plaf-avmng. *--> lokale Daten DATA: lv_gsmng_old LIKE plaf-gsmng. *--> Exit-Bedingungen CHECK iv_avmng_old GT 0. CHECK iv_gsmng_old GT iv_avmng_old. CHECK iv_avmng_new EQ 0. *--> Baugruppenausschuss berechnen lv_gsmng_old = iv_gsmng_old - iv_avmng_old. iv_avmng_new = iv_avmng_old * iv_gsmng_new / lv_gsmng_old. PERFORM read_t006 USING gs_mt61d-meins. * PERFORM MENGEN_AUFRUNDUNG USING T006-ANDEC IV_AVMNG_NEW. "n_1869151 CALL FUNCTION 'ROUND' "n_1869151 EXPORTING DECIMALS = T006-ANDEC INPUT = IV_AVMNG_NEW SIGN = '+' IMPORTING OUTPUT = IV_AVMNG_NEW EXCEPTIONS INPUT_INVALID = 1 OVERFLOW = 2 TYPE_INVALID = 3 OTHERS = 4. iv_gsmng_new = iv_gsmng_new + iv_avmng_new. ENDFORM. " ADD_SCRAP *&---------------------------------------------------------------------* *& Form READ_T006 "TL: 46B *&---------------------------------------------------------------------* * Lesen Tabelle 006 *----------------------------------------------------------------------* FORM read_t006 USING iv_meins LIKE mt61d-meins. *--> Exitbedingung prüfen IF iv_meins EQ t006-msehi. EXIT. ENDIF. *--> Tabelleneintrag nachlesen SELECT SINGLE * FROM t006 WHERE msehi EQ iv_meins. IF sy-subrc > 0. MESSAGE e001 WITH iv_meins 'T006 '. ENDIF. ENDFORM. " READ_T006 *&---------------------------------------------------------------------* *& Form CHECK_CTR_IDS *&---------------------------------------------------------------------* * Check Contract IDs (ERP-Contract vs. Central Contract SRM) *----------------------------------------------------------------------* FORM check_ctr_ids . DATA: l_ebeln_srm TYPE bbp_bapi_ebeln_k, l_ebelp_srm TYPE bbp_itemno, l_ebeln_erp TYPE ebeln, l_ebelp_erp TYPE ebelp, l_conv TYPE REF TO cl_mmbsi_cc_conv. ** Check for EhP4-Switch CCM CHECK cl_ops_switch_check=>mm_sfws_p2pse( ) = 'X'. CLEAR: l_ebeln_srm, l_ebelp_srm, l_ebeln_erp, l_ebelp_erp. LOOP AT SCREEN. IF screen-name EQ 'MDBA-KONNR'. EXIT. ENDIF. ENDLOOP. IF screen-input EQ '0' AND cm61o-trtyp NE 'A' AND NOT mdba-konnr IS INITIAL AND mdba-srm_contract_id IS INITIAL AND mdba-srm_contract_itm IS INITIAL. CLEAR: mdba-konnr, mdba-konps. request_kz = 'X'. EXIT. ENDIF. IF ( NOT mdba-srm_contract_id IS INITIAL AND mdba-srm_contract_itm IS INITIAL OR mdba-srm_contract_id IS INITIAL AND NOT mdba-srm_contract_itm IS INITIAL ) OR ( NOT mdba-konnr IS INITIAL AND mdba-konps IS INITIAL OR mdba-konnr IS INITIAL AND NOT mdba-konps IS INITIAL ). SET CURSOR FIELD 'MDBA-SRM_CONTRACT_ID'. MESSAGE e008(mm_ccm). ENDIF. IF NOT mdba-konnr IS INITIAL AND screen-input EQ '1'. ** Check, if there is a corresponding SRM-ID l_conv = cl_mmbsi_cc_conv=>get_instance( cl_mmpur_constants=>bstyp_b ). "1632920 CALL METHOD l_conv->conv_erp2srm EXPORTING iv_ebeln = mdba-konnr iv_ebelp = mdba-konps IMPORTING ev_ebeln_srm = l_ebeln_srm ev_ebelp_srm = l_ebelp_srm EXCEPTIONS no_srm_contract = 1 OTHERS = 2. IF sy-subrc EQ 0. IF NOT mdba-srm_contract_id IS INITIAL AND ( mdba-srm_contract_id NE l_ebeln_srm OR mdba-srm_contract_itm NE l_ebelp_srm ). MESSAGE e009(mm_ccm). ELSEIF mdba-srm_contract_id IS INITIAL. MOVE: l_ebeln_srm TO mdba-srm_contract_id, l_ebelp_srm TO mdba-srm_contract_itm. ENDIF. ELSEIF NOT mdba-srm_contract_id IS INITIAL. MESSAGE e009(mm_ccm). ENDIF. ELSEIF NOT mdba-srm_contract_id IS INITIAL. CALL FUNCTION 'MMBSI_GET_ERP_ID' EXPORTING iv_ebeln = mdba-srm_contract_id iv_ebelp = mdba-srm_contract_itm iv_ekorg = mdba-ekorg iv_werks = mdba-werks iv_dialog = 'X' IMPORTING ev_ebeln_erp = l_ebeln_erp ev_ebelp_erp = l_ebelp_erp EXCEPTIONS no_srm_contract = 1 cancelled_by_user = 2 no_unique_entry_found = 3 OTHERS = 4. IF sy-subrc EQ 1. SET CURSOR FIELD 'MDBA-SRM_CONTRACT_ID'. MESSAGE e010(mm_ccm). ELSEIF sy-subrc NE 0. MESSAGE e011(mm_ccm). ENDIF. MOVE: l_ebeln_erp TO mdba-konnr, l_ebelp_erp TO mdba-konps. request_kz = 'X'. ENDIF. ENDFORM. " CHECK_CTR_IDS
se19->ME_PROCESS_PO_CUST->CHECK()

METHOD IF_EX_ME_PROCESS_PO_CUST~CHECK. * BREAK MISHM. DATA: LS_POITEM TYPE MEPOITEM. DATA: LS_ITEM TYPE PURCHASE_ORDER_ITEM. DATA: LT_ITEM TYPE PURCHASE_ORDER_ITEMS. DATA: LS_HEAD TYPE MEPOHEADER, LV_BSART TYPE EBAN-BSART. CALL METHOD IM_HEADER->GET_DATA RECEIVING RE_DATA = LS_HEAD. CALL METHOD IM_HEADER->GET_ITEMS RECEIVING RE_ITEMS = LT_ITEM. LOOP AT LT_ITEM INTO LS_ITEM. CALL METHOD LS_ITEM-ITEM->GET_DATA RECEIVING RE_DATA = LS_POITEM. IF LS_POITEM-EBELN IS INITIAL. IF LS_POITEM-BANFN NE ''. SELECT SINGLE BSART INTO LV_BSART FROM EBAN WHERE BANFN EQ LS_POITEM-BANFN. IF LV_BSART EQ 'ZNB6'. IF LS_HEAD-BSART NE 'ZNB6'. MESSAGE E000(ZMM) WITH '訂單類型請選擇''******'''. ENDIF. IF LS_HEAD-LIFNR NE '0000005100'. MESSAGE E000(ZMM) WITH '供應商請選擇5100(虎門)'. ENDIF. ENDIF. ENDIF. ENDIF. ENDLOOP. ENDMETHOD.
MD04的要在LM61HI00

*----------------------------------------------------------------------* * Sichern Auftragsdaten in 2. Workaerea * *----------------------------------------------------------------------* MODULE MDBA_AENDERUNG INPUT. *{ INSERT DEVK913300 1 IF MDBA-BSART EQ 'ZNB6'. IF MDBA-WERKS EQ '5100'. MESSAGE E000(ZMM) WITH '虎門不能下虎門的採購單(ZNB6為福建專用)'. ENDIF. ENDIF. *} INSERT *--> Anpassen der Komponenten bei Lohnbearbeitung PERFORM CHANGE_COMPONENTS. *--> Daten in 2. Workaerea sichern MOVE MDBA TO MDBAS. *--> nach SOBES-Wechsel Komponentenanzeige aufrufen IF GV_SHOW_COMPONENTS EQ XFLAG AND FCODE IS INITIAL. CLEAR GV_SHOW_COMPONENTS. PERFORM MDPMX_MDBA USING CHAR3. ENDIF. ENDMODULE.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」