zoukankan      html  css  js  c++  java
  • PR 修改保存的增强 ME_UPDATE_REQUISITION

    FUNCTION me_update_requisition.
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$SE:(1) Function Module ME_UPDATE_REQUISITION, Start A
    *$*$-Start: (1)---------------------------------------------------------------------------------$*$*
    ENHANCEMENT 1 YHSBC_MM_SAVE_FOR_EBAN_FIELDS. "active version

    *&start changed by robin 20140412 ECDK917957
    *&据IP取得相关登录用户并作修改:
    CALL FUNCTION 'YH_BC_MM_SAVE_EBAN_FIELDS'
    TABLES
    XEBAN_TAB = XEBAN
    YEBAN_TAB = YEBAN.
    *&END CHANGED BY ROBIN 20140304

    ENDENHANCEMENT.
    ENHANCEMENT 1 YH_PR_SAVE_ENHANCEMENT. "active version
    CALL FUNCTION 'YH_PR_SAVE_EXIST'
    TABLES
    xeban = XEBAN
    yeban = YEBAN
    .
    *
    ENDENHANCEMENT.
    *$*$-End: (1)---------------------------------------------------------------------------------$*$*
    *"----------------------------------------------------------------------
    *"*"Update Function Module:
    *"
    *"*"Global Interface:
    *" IMPORTING
    *" VALUE(XPREXT) TYPE MEREQ_T_UPREXT OPTIONAL
    *" VALUE(MEREQX) TYPE MEREQ_T_UMEREQX OPTIONAL
    *" TABLES
    *" XEBAN STRUCTURE UEBAN
    *" XEBKN STRUCTURE UEBKN
    *" YEBAN STRUCTURE UEBAN
    *" YEBKN STRUCTURE UEBKN
    *" DRS_ITEMS TYPE MMPUR_DRS_ITEMS_TTY OPTIONAL
    *"----------------------------------------------------------------------
    *- fuellen Altstruktur Banf -----------------------------------------
    CLEAR oeban.
    LOOP AT yeban.
    MOVE yeban TO oeban.
    APPEND oeban.
    ENDLOOP.
    SORT oeban BY banfn bnfpo.

    *------- Check if EhP4 switch is on----------------------------------*
    DATA lv_ehp4_sfws_p2pse TYPE xfeld.
    DAta ls_eban type eban.
    lv_ehp4_sfws_p2pse = ''.
    lv_ehp4_sfws_p2pse = cl_ops_switch_check=>mm_sfws_p2pse( ).

    REFRESH: db_eban, db_eban_u, db_ebub, db_ebub_d.
    REFRESH: tebav.

    *------- Positionen Loeschen ------------------------------------------*
    LOOP AT oeban.
    IF oeban-kz EQ 'D'.
    MOVE-CORRESPONDING oeban TO eban.
    MOVE eban TO db_eban.
    APPEND db_eban.
    *------- Umlagerungsindex ---------------------------------------------*
    * IF EBAN-PSTYP EQ '7'.
    IF eban-reswk NE space AND eban-bsakz NE 'R' AND
    eban-matnr NE space AND
    eban-ebakz EQ space AND
    eban-loekz EQ space AND
    eban-menge GT eban-bsmng.
    MOVE-CORRESPONDING eban TO ebub.
    MOVE ebub TO db_ebub_d.
    APPEND db_ebub_d.
    ENDIF.
    ENDIF.

    ENHANCEMENT-POINT EHP603_ME_UPDATE_REQUISITION_1 SPOTS ES_SAPLEBNU_P2P.
    *$*$-Start: EHP603_ME_UPDATE_REQUISITION_1------------------------------------------------------$*$*
    ENHANCEMENT 1 MM_SFWS_EBNU. "active version
    *-------Create change pointer for TREX
    PERFORM trex_change_pointer USING oeban-banfn
    oeban-kz.
    ENDENHANCEMENT.
    *$*$-End: EHP603_ME_UPDATE_REQUISITION_1------------------------------------------------------$*$*

    IF lv_ehp4_sfws_p2pse EQ 'X'.
    * MOVE-CORRESPONDING oeban to ls_eban.
    CALL FUNCTION 'ME_TREX_TRIGGER_PR'
    EXPORTING
    IV_BANFN = oeban-banfn
    IV_BNFPO = oeban-bnfpo
    IV_EBAN_CHANGEID = oeban-kz
    * IT_CHANGED_PR = IT_CHANGED_PR
    .

    * CALL FUNCTION 'ME_TREX_TRIGGER_PR'
    * EXPORTING
    * IS_BANFN = oeban-banfn
    * IS_BNFPO = oeban-bnfpo
    ** IS_EBAN = ls_eban
    ** IS_EBKN = IS_EBKN
    ** IS_EBAN_TECH = IS_EBAN_TECH
    * IV_EBAN_CHANGEID = oeban-kz
    ** IV_EBKN_CHANGEID = IV_EBKN_CHANGEID
    ** IV_EBAN_TECH_CHANGEID = IV_EBAN_TECH_CHANGEID
    .
    ENDIF.
    ENDLOOP.

    DESCRIBE TABLE db_eban LINES sy-tfill.
    IF sy-tfill GT 0.
    DELETE eban FROM TABLE db_eban.
    IF sy-subrc NE 0.
    MESSAGE a809 WITH 'EBAN'.
    ENDIF.
    REFRESH db_eban.
    ENDIF.

    REFRESH: db_eban, db_eban_u.
    REFRESH: tebav.

    * 1. Runde verbuchen der Banfen per Array-Operationen
    *------- Banfen verbuchen ---------------------------------------------*
    LOOP AT xeban.
    MOVE xeban TO eban.
    *------- Neue Banf/Banfposition ---------------------------------------*
    IF xeban-kz EQ 'I'.
    MOVE xeban TO db_eban.
    APPEND db_eban.

    *------- Umlagerungsindex ---------------------------------------------*
    * IF EBAN-PSTYP EQ '7'.
    IF eban-reswk NE space AND eban-bsakz NE 'R' AND
    eban-matnr NE space AND
    eban-ebakz EQ space AND
    eban-loekz EQ space AND
    eban-menge GT eban-bsmng.
    MOVE-CORRESPONDING eban TO ebub.
    MOVE ebub TO db_ebub.
    APPEND db_ebub.
    ENDIF.

    ENDIF.
    *------- Geaenderte Banf/Banfposition ---------------------------------*
    IF xeban-kz EQ 'U'.
    * MOVE XEBAN TO DB_EBAN_U.
    * APPEND DB_EBAN_U.
    MOVE-CORRESPONDING xeban TO tebav.
    APPEND tebav.
    ENDIF.
    ENHANCEMENT-POINT ehp603_me_update_requisition_2 SPOTS es_saplebnu_p2p.
    *$*$-Start: EHP603_ME_UPDATE_REQUISITION_2------------------------------------------------------$*$*
    ENHANCEMENT 2 MM_SFWS_EBNU. "active version
    *-------Create change pointer for TREX
    PERFORM trex_change_pointer USING xeban-banfn
    xeban-kz.
    ENDENHANCEMENT.
    *$*$-End: EHP603_ME_UPDATE_REQUISITION_2------------------------------------------------------$*$*

    IF lv_ehp4_sfws_p2pse EQ 'X'.
    * MOVE-CORRESPONDING Xeban to ls_eban.

    CALL FUNCTION 'ME_TREX_TRIGGER_PR'
    EXPORTING
    IV_BANFN = xeban-banfn
    IV_BNFPO = xeban-bnfpo
    IV_EBAN_CHANGEID = xeban-kz
    * IT_CHANGED_PR = IT_CHANGED_PR
    .

    * CALL FUNCTION 'ME_TREX_TRIGGER_PR'
    * EXPORTING
    * IS_BANFN = xeban-banfn
    * IS_BNFPO = xeban-bnfpo
    ** IS_EBAN = ls_eban
    ** IS_EBKN = IS_EBKN
    ** IS_EBAN_TECH = IS_EBAN_TECH
    * IV_EBAN_CHANGEID = xeban-kz
    ** IV_EBKN_CHANGEID = IV_EBKN_CHANGEID
    ** IV_EBAN_TECH_CHANGEID = IV_EBAN_TECH_CHANGEID
    * .
    ENDIF.
    ENDLOOP.
    DESCRIBE TABLE db_eban LINES sy-tfill.
    IF sy-tfill GT 0.
    INSERT eban FROM TABLE db_eban.
    IF sy-subrc NE 0.
    MESSAGE a807 WITH 'EBAN'.
    ENDIF.
    REFRESH db_eban.
    ENDIF.
    *ESCRIBE TABLE DB_EBAN_U LINES SY-TFILL.
    DESCRIBE TABLE tebav LINES sy-tfill.
    IF sy-tfill GT 0.
    * UPDATE EBAN FROM TABLE DB_EBAN_U.
    UPDATE ebav FROM TABLE tebav.
    IF sy-subrc NE 0.
    MESSAGE a808 WITH 'EBAN'.
    ENDIF.
    * REFRESH DB_EBAN_U.
    REFRESH tebav.
    ENDIF.
    *2. RUNDE --> UMFELDAKTIONEN
    *------- Banfen verbuchen ---------------------------------------------*
    LOOP AT xeban.
    MOVE xeban TO eban.
    *------- Neue Banf/Banfposition ---------------------------------------*
    IF xeban-kz EQ 'I'.

    *------- Index RSDB für Positionen mit ARSNR --------------------------*
    IF NOT eban-arsnr IS INITIAL AND
    NOT eban-arsps IS INITIAL.
    CALL FUNCTION 'RSDB_CREATE_WITH_EBAN'
    EXPORTING
    banfn = eban-banfn
    bnfpo = eban-bnfpo
    rsnum = eban-arsnr
    rspos = eban-arsps
    EXCEPTIONS
    parameters_not_specified = 02
    record_already_exist = 03.
    IF sy-subrc NE 0.
    MESSAGE a807 WITH 'RSDB'.
    ENDIF.
    ENDIF.
    ENDIF.
    *------- Geaenderte Banf/Banfposition ---------------------------------*
    IF xeban-kz EQ 'U'.
    *------- Index RSDB für Positionen mit ARSNR fortschreiben ------------*
    MOVE-CORRESPONDING eban TO bsnkey.
    READ TABLE oeban WITH KEY bsnkey BINARY SEARCH.
    IF sy-subrc EQ 0.
    IF eban-reswk NE oeban-reswk OR eban-matnr NE oeban-matnr.
    *---- Lieferwerk oder Material hat sich geändert ----------------------*
    *---- Umlagerungsindex für altes Lieferwerk/altes Material löschen ----*
    IF oeban-reswk NE space AND oeban-bsakz NE 'R' AND
    oeban-matnr NE space AND
    oeban-ebakz EQ space AND
    oeban-loekz EQ space AND
    oeban-menge GT oeban-bsmng.
    MOVE-CORRESPONDING oeban TO ebub.
    MOVE ebub TO db_ebub_d.
    APPEND db_ebub_d.
    ENDIF.
    *---- Umlagerungsindex für neues Lieferwerk/neues Material hinzufügen -*
    IF eban-reswk NE space AND eban-bsakz NE 'R' AND
    eban-matnr NE space AND
    eban-ebakz EQ space AND
    eban-loekz EQ space AND
    eban-menge GT eban-bsmng.
    MOVE-CORRESPONDING eban TO ebub.
    MOVE ebub TO db_ebub.
    APPEND db_ebub.
    ENDIF.
    ELSE.
    * Umlagerungsindex aufbauen/löschen je nach Loekz und Ebakz
    IF eban-reswk NE space AND eban-bsakz NE 'R' AND
    eban-matnr NE space.
    IF oeban-ebakz EQ space AND
    oeban-loekz NE 'X' AND
    oeban-menge GT oeban-bsmng AND
    ( eban-ebakz NE space OR eban-loekz EQ 'X' OR
    eban-menge LE eban-bsmng ).
    *--- löschen
    MOVE-CORRESPONDING eban TO db_ebub_d.
    APPEND db_ebub_d.
    ELSE.
    IF ( oeban-ebakz NE space OR oeban-loekz EQ 'X' OR
    oeban-menge LE oeban-bsmng ) AND
    eban-ebakz EQ space AND eban-loekz NE 'X' AND
    eban-menge GT eban-bsmng.
    *--- hinzufügen
    MOVE-CORRESPONDING eban TO db_ebub.
    APPEND db_ebub.
    ENDIF.
    ENDIF.
    ENDIF.
    ENDIF.
    IF NOT eban-arsnr IS INITIAL AND
    NOT eban-arsps IS INITIAL.
    IF eban-loekz EQ space AND
    oeban-loekz NE space AND
    eban-estkz NE 'F'. "QNL
    CALL FUNCTION 'RSDB_CREATE_WITH_EBAN'
    EXPORTING
    banfn = eban-banfn
    bnfpo = eban-bnfpo
    rsnum = eban-arsnr
    rspos = eban-arsps
    EXCEPTIONS
    parameters_not_specified = 02
    record_already_exist = 03.
    IF sy-subrc NE 0.
    MESSAGE a807 WITH 'RSDB'.
    ENDIF.
    ENDIF.
    IF eban-loekz NE space AND
    oeban-loekz EQ space AND
    eban-estkz NE 'F'.
    CALL FUNCTION 'RSDB_DELETE_WITH_EBAN'
    EXPORTING
    banfn = eban-banfn
    bnfpo = eban-bnfpo
    rsnum = eban-arsnr
    rspos = eban-arsps
    EXCEPTIONS
    parameters_not_specified = 01
    record_not_exist = 02.
    IF sy-subrc NE 0.
    * MESSAGE a809 WITH 'RSDB'. "402007
    ENDIF.
    ENDIF.
    ENDIF.
    ENDIF.
    ENDIF.

    ENHANCEMENT-POINT ehp603_me_update_requisition_3 SPOTS es_saplebnu_p2p.
    *$*$-Start: EHP603_ME_UPDATE_REQUISITION_3------------------------------------------------------$*$*
    ENHANCEMENT 3 MM_SFWS_EBNU. "active version
    *-------Create change pointer for TREX
    PERFORM trex_change_pointer USING xeban-banfn
    xeban-kz.
    ENDENHANCEMENT.
    *$*$-End: EHP603_ME_UPDATE_REQUISITION_3------------------------------------------------------$*$*

    IF lv_ehp4_sfws_p2pse EQ 'X'.
    * MOVE-CORRESPONDING Xeban to ls_eban.

    CALL FUNCTION 'ME_TREX_TRIGGER_PR'
    EXPORTING
    IV_BANFN = xeban-banfn
    IV_BNFPO = xeban-bnfpo
    IV_EBAN_CHANGEID = xeban-kz
    * IT_CHANGED_PR = IT_CHANGED_PR
    .
    *
    * CALL FUNCTION 'ME_TREX_TRIGGER_PR'
    * EXPORTING
    * IS_BANFN = xeban-banfn
    * IS_BNFPO = xeban-bnfpo
    ** IS_EBAN = LS_EBAN
    ** IS_EBKN = IS_EBKN
    ** IS_EBAN_TECH = IS_EBAN_TECH
    * IV_EBAN_CHANGEID = xeban-kz
    ** IV_EBKN_CHANGEID = IV_EBKN_CHANGEID
    ** IV_EBAN_TECH_CHANGEID = IV_EBAN_TECH_CHANGEID
    * .
    ENDIF.
    ENDLOOP.


    * Fortschreiben neuer Umlagerungsindizes
    PERFORM ebub_fortschreiben TABLES db_ebub db_ebub_d.

    REFRESH: db_ebkn.

    *------- Kontierungen Loeschen ----------------------------------------*
    LOOP AT yebkn.
    MOVE yebkn TO oebkn.
    IF oebkn-kz EQ 'D'.
    * MOVE OEBKN TO EBKN.
    MOVE-CORRESPONDING oebkn TO db_ebkn.
    APPEND db_ebkn.
    ENDIF.
    ENDLOOP.
    DESCRIBE TABLE db_ebkn LINES sy-tfill.
    IF sy-tfill GT 0.
    DELETE ebkn FROM TABLE db_ebkn.
    IF sy-subrc NE 0.
    MESSAGE a809 WITH 'EBKN'.
    ENDIF.
    REFRESH db_ebkn.
    ENDIF.

    REFRESH: db_ebkn, db_ebkn_u.

    *------- Kontierungspositionen ----------------------------------------*
    LOOP AT xebkn.
    MOVE-CORRESPONDING xebkn TO ebkn.
    *------ Kontierungsposition hinzufuegen -------------------------------*
    IF xebkn-kz EQ 'I'.
    MOVE-CORRESPONDING xebkn TO db_ebkn.
    APPEND db_ebkn.
    ENDIF.
    *------ Kontierungsposition aendern -----------------------------------*
    IF xebkn-kz EQ 'U'.
    MOVE-CORRESPONDING xebkn TO db_ebkn_u.
    APPEND db_ebkn_u.
    ENDIF.

    ENDLOOP.

    DESCRIBE TABLE db_ebkn LINES sy-tfill.
    IF sy-tfill GT 0.
    INSERT ebkn FROM TABLE db_ebkn.
    IF sy-subrc NE 0.
    MESSAGE a807 WITH 'EBKN'.
    ENDIF.
    REFRESH db_ebkn.
    ENDIF.
    DESCRIBE TABLE db_ebkn_u LINES sy-tfill.
    IF sy-tfill GT 0.
    UPDATE ebkn FROM TABLE db_ebkn_u.
    IF sy-subrc NE 0.
    MESSAGE a808 WITH 'EBKN'.
    ENDIF.
    REFRESH db_ebkn_u.
    ENDIF.

    *- Update Quota
    CALL FUNCTION 'ME_UPDATE_QUOTA_FROM_REQ' "361414
    TABLES
    xeban = xeban
    yeban = yeban.

    * MM-PUR/APO #124738
    * Interface BTE 01000710
    IF CL_OPS_SWITCH_CHECK=>LO_MM_SD_SFWS_DM_SC( )
    EQ CL_OPS_SWITCH_CHECK=>SWITCH_ACTIVE_TRUE AND LINES( DRS_ITEMS ) GT 0. "Perform the call only when DRS_ITEMS are filled

    CALL FUNCTION 'OUTBOUND_CALL_01000710_E' "DRS items should be send over to APO
    TABLES
    T_XEBAN = xeban
    T_XEBKN = xebkn
    T_YEBAN = yeban
    T_YEBKN = yebkn
    IT_DRS_ITEMS = DRS_ITEMS.
    ELSE.
    CALL FUNCTION 'OUTBOUND_CALL_01000710_E'
    TABLES
    t_xeban = xeban
    t_xebkn = xebkn
    t_yeban = yeban
    t_yebkn = yebkn
    EXCEPTIONS
    OTHERS = 1.
    ENDIF.
    *
    *------- Update additional data PREXT NCF KH ----------------------*

    DATA: lt_prext_db TYPE mereq_t_prext,
    lt_prext_db_u TYPE mereq_t_prext,
    ls_prext LIKE LINE OF lt_prext_db,
    ls_xprext LIKE LINE OF xprext.

    LOOP AT xprext INTO ls_xprext.
    CLEAR ls_prext.
    MOVE-CORRESPONDING ls_xprext TO ls_prext.
    CASE ls_xprext-kz.
    WHEN 'I'.
    APPEND ls_prext TO lt_prext_db.
    WHEN 'U'.
    APPEND ls_prext TO lt_prext_db_u.
    ENDCASE.
    ENDLOOP.
    DESCRIBE TABLE lt_prext_db LINES sy-tfill.
    IF sy-tfill GT 0.
    INSERT prext FROM TABLE lt_prext_db.
    IF sy-subrc NE 0.
    MESSAGE a807 WITH 'PREXT'.
    ENDIF.
    ENDIF.
    DESCRIBE TABLE lt_prext_db_u LINES sy-tfill.
    IF sy-tfill GT 0.
    UPDATE prext FROM TABLE lt_prext_db_u.
    IF sy-subrc NE 0.
    MESSAGE a808 WITH 'PREXT'.
    ENDIF.
    ENDIF.

    *-------update x-fields in case of holding a document-----------------*

    * mereqx can only contain entries in case of holding a document
    CHECK NOT mereqx IS INITIAL.

    DATA: lt_mereqx_db TYPE mereq_t_mereqx,
    lt_mereqx_db_u TYPE mereq_t_mereqx,
    lt_mereqx_db_d TYPE mereq_t_mereqx, " Note 1490525
    l_tabname TYPE tabname, " Note 1490525
    ls_mereqx LIKE LINE OF lt_mereqx_db,
    ls_umereqx LIKE LINE OF mereqx.

    LOOP AT mereqx INTO ls_umereqx.
    CLEAR ls_mereqx.
    MOVE-CORRESPONDING ls_umereqx TO ls_mereqx.
    CASE ls_umereqx-kz.
    WHEN 'I'.
    APPEND ls_mereqx TO lt_mereqx_db.
    WHEN 'U'.
    APPEND ls_mereqx TO lt_mereqx_db_u.
    WHEN 'D'. " Note 1490525
    APPEND ls_mereqx to lt_mereqx_db_d. " Note 1490525
    ENDCASE.
    ENDLOOP.
    DESCRIBE TABLE lt_mereqx_db LINES sy-tfill.
    IF sy-tfill GT 0.
    INSERT mereqx FROM TABLE lt_mereqx_db.
    IF sy-subrc NE 0.
    MESSAGE a807 WITH 'MEREQX'.
    ENDIF.
    ENDIF.
    DESCRIBE TABLE lt_mereqx_db_u LINES sy-tfill.
    IF sy-tfill GT 0.
    UPDATE mereqx FROM TABLE lt_mereqx_db_u.
    IF sy-subrc NE 0.
    MESSAGE a808 WITH 'MEREQX'.
    ENDIF.
    ENDIF.

    L_TABNAME = 'MEREQX'. " Note 1490525
    DESCRIBE TABLE lt_mereqx_db_d LINES sy-tfill. " Note 1490525
    IF sy-tfill GT 0. " Note 1490525
    DELETE (l_tabname) FROM table lt_mereqx_db_d. " Note 1490525
    IF sy-subrc NE 0. " Note 1490525
    MESSAGE a809 WITH 'MEREQX'. " Note 1490525
    ENDIF. " Note 1490525
    ENDIF. " Note 1490525


    ENDFUNCTION.

  • 相关阅读:
    2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 (B,F,L,M)
    Coderfroces 862 C. Mahmoud and Ehab and the xor
    [CQOI 2015] 任务查询系统
    [POI 2014] Couriers
    [POJ 2104] K-th Number
    [模板] 可持久化数组
    [AHOI 2006] 上学路线
    [SCOI2009] 生日礼物
    [BZOJ 3436] 小K的农场
    [USACO2007 Demo] Cow Acrobats
  • 原文地址:https://www.cnblogs.com/rainysblog/p/6403900.html
Copyright © 2011-2022 走看看