SAP:ME21N BAID: ME_PROCESS_PO_CUST / ME_PO_PRICING_CUST

21 篇文章 0 订阅

METHOD IF_EX_ME_PROCESS_PO_CUST~PROCESS_ITEM.
*method if_ex_me_process_po_cust~process_item .

  DATA: LS_MEPOITEM TYPE MEPOITEM,
        LS_CUSTOMER TYPE MEPO_BADI_EXAMPL,
        LS_TBSG     TYPE TBSG,
        LV_DUMMY    TYPE LENGTH 128.

  INCLUDE MM_MESSAGES_MAC. "useful macros for message handling

*---------------------------------------------------------------------*
* here we check customers data
*---------------------------------------------------------------------*
  IF SY-TCODE 'ME21N'.
    LS_MEPOITEM IM_ITEM->GET_DATA).

    IF LS_MEPOITEM-EINDT < SY-DATUM.
      MESSAGE 'Please check the delivery date, it cannot in the past' TYPE 'E'.
    ENDIF.
  ENDIF.
*  if ls_mepoitem-loekz eq 'D'. "Deletion Indicator in Purchasing Document
*
** a physical deletion of the item was carried out. therrefor we have to
** delete customer data on the level of the item
*    ls_customer-ebeln = ls_mepoitem-ebeln.
*    ls_customer-ebelp = ls_mepoitem-ebelp.
*    call function 'MEPOBADIEX_SET_DATA'
*      exporting
*        im_data                    = ls_customer
*        im_physical_delete_request = 'X'.
*
*  else.
*
** update/insert operation
*    call function 'MEPOBADIEX_GET_DATA'
*      exporting
*        im_ebeln = ls_mepoitem-ebeln
*        im_ebelp = ls_mepoitem-ebelp
*      importing
*        ex_data  = ls_customer.
** check customers data
*
** check field badi_bsgru. This should be carried out only for new items. Once the PO is posted the
** field should no longer be changeable. This is done in Method FIELDSELECTION_ITEM.
*    if im_item->is_persistent( ) eq mmpur_no.
*      if ls_customer-badi_bsgru is initial.
** Place the cursor onto field badi_bsgru. The metafield was defined in BAdI ME_GUI_PO_CUST,
** Method MAP_DYNPRO_FIELDS.
*        mmpur_metafield mmmfd_cust_01.
*        message w083(me) with text-002 '' into lv_dummy.
*        mmpur_message_forced sy-msgty sy-msgid sy-msgno
*                             sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*      else.
** check whether the field is valid
*        select single * from tbsg into ls_tbsg where bsgru eq ls_customer-badi_bsgru.
*        if not sy-subrc is initial.
*          mmpur_metafield mmmfd_cust_01.
*          message e083(me) with text-004 space into lv_dummy.
*          mmpur_message_forced sy-msgty sy-msgid sy-msgno
*                               sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
** invalidate the object
*          call method im_item->invalidate( ).
*        endif.
*      endif.
*    endif.
*
** check field badi_afnam
*    if ls_customer-badi_afnam is initial.
*      mmpur_metafield mmmfd_cust_02.
*      message w083(me) with text-003 space into lv_dummy.
*      mmpur_message_forced sy-msgty sy-msgid sy-msgno
*                           sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*    endif.
*
*  endif.
*
*endmethod.                    "IF_EX_ME_PROCESS_PO_CUST~PROCESS_ITEM

**Update Po qty when comfimation changed, PO qty = Total OA confirmation qty
*  IF SY-TCODE = 'ME21N' OR SY-TCODE = 'ME22N' OR SY-TCODE = 'ME23N' OR SY-TCODE = 'ME29N'.
*    DATA : LV_MENGE TYPE EKPO-MENGE,"OA qty
*           LS_MECONF_DETAIL TYPE MECONF_DETAIL,
*           LT_MECONF_DETAIL TYPE TABLE OF MECONF_DETAIL,
*           LT_CONF TYPE MMPURCONF_T_CONF,
*           LS_CONF LIKE LINE OF LT_CONF.
*    DATA: IF_CONF TYPE REF TO IF_MMPUR_CONF_ITEM.
*
*    " get conf interface
*    IF_CONF = IM_ITEM->GET_CONFIRMATION_HANDLER( ).
*
*    " get conf data
*    CHECK IF_CONF IS NOT INITIAL.
*    LT_CONF = IF_CONF->GET_CONFIRMATIONS( ).
*  ENDIF.

ENDMETHOD.

 

METHOD IF_EX_ME_PROCESS_PO_CUST~POST.
***  IM_EBELN Importing Type  EBELN
***IM_HEADER  Importing Type Ref To IF_PURCHASE_ORDER_MM
*
**************************************
  DATA: EKPO_1 TYPE TABLE OF EKPO,
        WA_EKPO_1 TYPE EKPO,
        EKPO_2 TYPE TABLE OF EKPO,
        WA_EKPO_2 TYPE EKPO,
        EKPO_3 TYPE TABLE OF EKPO,
        WA_EKPO_3 TYPE EKPO.
  DATA:EKKO_1 TYPE TABLE OF EKKO,
       EKKO_2 TYPE TABLE OF EKKO,
       WA_EKKO_2 TYPE EKKO,
       P_CHK  TYPE C,
       P_FRGC1 TYPE T16FS-FRGC1.

  DATA: LWA_EKKO_IN_DLV TYPE MEPOHEADER,
        LWA_EKPO_IN_DLV TYPE PURCHASE_ORDER_ITEM,
        LIT_EKPO_IN_DLV TYPE PURCHASE_ORDER_ITEMS,
        LWA_ITEM_IN_DLV TYPE MEPOITEM,
        IM_DATA TYPE MEPOHEADER,

        LIT_EKKO_DLV TYPE STANDARD TABLE OF EKKO,
        LIT_EKPO_DLV TYPE STANDARD TABLE OF EKPO,
        LWA_EKKO_DLV TYPE EKKO,
        LWA_EKPO_DLV TYPE EKPO.
  DATA: PURCHASEORDER TYPE BAPIMMPARA-PO_NUMBER,
        PO_REL_CODE TYPE BAPIMMPARA-PO_REL_COD,
        REL_GROUP TYPE BAPIMMPARA-REL_GROUP,
        USE_EXCEPTIONS TYPE BAPIMMPARA-SELECTION,
        RETURN TYPE TABLE OF BAPIRETURN,
        WA_RETURN TYPE BAPIRETURN .
  DATA:REL_STATUS_NEW TYPE BAPIMMPARA-REL_STATUS,
       REL_INDICATOR_NEW TYPE BAPIMMPARA-PO_REL_IND .
* read save text.
  DATA:L_HEADER TYPE STANDARD TABLE OF THEAD ,
       WA_HEADER TYPE THEAD,
       L_LINES  TYPE STANDARD TABLE OF TLINE ,
       L_LINES_1 TYPE STANDARD TABLE OF TLINE,
       WA_LINES TYPE TLINE,
       WA_LINES_1 TYPE TLINE,
       L_TDNAME TYPE TDOBNAME,
       O_STR TYPE STRING,
       N_STR TYPE STRING.

  "  DATA: poitem TYPE STANDARD TABLE OF MEPOITEM .

*  IF ( SY-TCODE = 'ME22N'  ) OR ( SY-TCODE = 'ME29N' ) OR SY-TCODE = 'ME22' OR SY-TCODE = 'ME23N'.
  CLEAR: PURCHASEORDER ,  PO_REL_CODE .
* Get ekko data
  LWA_EKKO_IN_DLV IM_HEADER->GET_DATA).
  MOVE-CORRESPONDING LWA_EKKO_IN_DLV TO LWA_EKKO_DLV.
  APPEND LWA_EKKO_DLV TO LIT_EKKO_DLV.

*    Why lwa_ekko_dlv get value from lwa_ekko_in_dlv????
*     Get ekpo data
  LIT_EKPO_IN_DLV IM_HEADER->GET_ITEMS).
  LOOP AT LIT_EKPO_IN_DLV INTO LWA_EKPO_IN_DLV.
    LWA_ITEM_IN_DLV LWA_EKPO_IN_DLV-ITEM->GET_DATA).
    MOVE-CORRESPONDING LWA_ITEM_IN_DLV TO LWA_EKPO_DLV.
    APPEND LWA_EKPO_DLV TO LIT_EKPO_DLV.
    "Why lwa_ekpo_dlv get value from lwa_ekpo_in_dlv?
  ENDLOOP.
*判断------Release status
  IF NOT LIT_EKKO_DLV[] IS INITIAL.
    READ TABLE LIT_EKKO_DLV INTO LWA_EKKO_DLV INDEX 1.
    IF LWA_EKKO_DLV-FRGKE 'X' AND LWA_EKKO_DLV-FRGZU ''.
      P_CHK 'X' ."Release Indicator: Purchasing Document
**********************************************************************
* 保存 从小到大取消的数据。
*新值
      IF NOT LIT_EKPO_DLV[] IS INITIAL.
        LOOP AT LIT_EKPO_DLV INTO LWA_EKPO_DLV.
          MOVE-CORRESPONDING LWA_EKPO_DLV TO WA_EKPO_2.
          APPEND WA_EKPO_2 TO EKPO_2.
        ENDLOOP.
      ENDIF.
*旧值 -------------------取数据库里面的数据,有可能新值已经删除,那么就需要安装PO号码来取数。
      IF NOT EKPO_2[] IS INITIAL.
        SELECT INTO CORRESPONDING FIELDS OF TABLE
              EKPO_1 FROM EKPO
          FOR ALL ENTRIES IN EKPO_2
          WHERE  EBELN EKPO_2-EBELN
          AND  EBELP EKPO_2-EBELP.
      ENDIF.
*      比较
      IF NOT EKPO_2[] IS INITIAL.
        IF NOT EKPO_1[] IS INITIAL.
          CLEAR:WA_EKPO_1,WA_EKPO_2.
          LOOP AT EKPO_2 INTO WA_EKPO_2.
            READ TABLE EKPO_1 INTO WA_EKPO_1 WITH KEY EBELN WA_EKPO_2-EBELN EBELP WA_EKPO_2-EBELP.
            IF SY-SUBRC 0.
*save version change data
              IF WA_EKPO_2-MENGE <> WA_EKPO_1-MENGE.
                N_STR WA_EKPO_2-MENGE .
                O_STR WA_EKPO_1-MENGE.
                CONCATENATE 'CHANGE ITEM' WA_EKPO_2-EBELP 'FROM QTY' O_STR 'TO' N_STR SY-DATUM
                  INTO WA_LINES-TDLINE SEPARATED BY SPACE.
                APPEND WA_LINES TO L_LINES.
                CLEAR: WA_LINES,O_STR,N_STR.
              ENDIF.
*
              IF WA_EKPO_2-NETPR <> WA_EKPO_1-NETPR OR WA_EKPO_2-PEINH <> WA_EKPO_1-PEINH.
                IF WA_EKPO_2-PEINH 0.
                  WA_EKPO_2-PEINH 1.
                ENDIF.
                IF WA_EKPO_1-PEINH 0.
                  WA_EKPO_1-PEINH 1.
                ENDIF.
*     convert price to external such as JPY
                IF LWA_EKKO_DLV-WAERS <> 'HKD' OR LWA_EKKO_DLV-WAERS <> 'USD' OR LWA_EKKO_DLV-WAERS <> 'CNY' OR LWA_EKKO_DLV-WAERS <> 'EUR'.
                  DATA : LV_NETPR TYPE BAPICURR-BAPICURR.
                  CLEAR LV_NETPR.
                  CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
                    EXPORTING
                      CURRENCY        LWA_EKKO_DLV-WAERS
                      AMOUNT_INTERNAL WA_EKPO_2-NETPR
                    IMPORTING
                      AMOUNT_EXTERNAL LV_NETPR.
                  N_STR LV_NETPR / WA_EKPO_2-PEINH.

                  CLEAR LV_NETPR.
                  CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
                    EXPORTING
                      CURRENCY        LWA_EKKO_DLV-WAERS
                      AMOUNT_INTERNAL WA_EKPO_1-NETPR
                    IMPORTING
                      AMOUNT_EXTERNAL LV_NETPR.
                  O_STR LV_NETPR / WA_EKPO_1-PEINH.

                ELSE.
                  N_STR WA_EKPO_2-NETPR / WA_EKPO_2-PEINH.
                  O_STR WA_EKPO_1-NETPR / WA_EKPO_1-PEINH.
                ENDIF.

                CONCATENATE 'CHANGE ITEM' WA_EKPO_2-EBELP 'FROM PRICE' O_STR 'TO' N_STR SY-DATUM
                  INTO WA_LINES-TDLINE SEPARATED BY SPACE.
                APPEND WA_LINES TO L_LINES.
                CLEAR :WA_LINES,O_STR,N_STR.
              ENDIF.
*删除
              IF WA_EKPO_2-LOEKZ 'L'.
                IF  WA_EKPO_1-LOEKZ <> 'L'.
                  N_STR WA_EKPO_2-MENGE .
                  O_STR WA_EKPO_1-MENGE.
                  CONCATENATE 'DELETE ITEM' WA_EKPO_2-EBELP 'FROM QTY' O_STR 'TO' '0.000' SY-DATUM
                    INTO WA_LINES-TDLINE SEPARATED BY SPACE.
                  APPEND WA_LINES TO L_LINES.
                  CLEAR :WA_LINES,O_STR,N_STR.
                ENDIF.
              ENDIF.
**********************************************************************
            ENDIF.
          ENDLOOP.
        ENDIF.
      ENDIF.
*判断之前保存的是否为R类型。
      SELECT INTO CORRESPONDING FIELDS OF TABLE EKKO_2
      FROM EKKO WHERE EBELN LWA_EKKO_DLV-EBELN.
      READ TABLE EKKO_2 INTO WA_EKKO_2 INDEX 1.
      IF WA_EKKO_2-FRGKE 'R' OR WA_EKKO_2-FRGKE 'X' AND WA_EKKO_2-FRGZU <> '' )
                               OR WA_EKKO_2-FRGKE 'X'.
*save text
        IF NOT L_LINES[] IS INITIAL.
          "     READ TABLE ekko_2 INTO wa_ekko_2 INDEX 1.
          L_TDNAME WA_EKKO_2-EBELN.
          CALL FUNCTION 'READ_TEXT'
            EXPORTING
              ID                      'F04'
              LANGUAGE                SY-LANGU
              NAME                    L_TDNAME
              OBJECT                  'EKKO'
            TABLES
              LINES                   L_LINES_1
            EXCEPTIONS
              ID                      1
              LANGUAGE                2
              NAME                    3
              NOT_FOUND               4
              OBJECT                  5
              REFERENCE_CHECK         6
              WRONG_ACCESS_TO_ARCHIVE 7
              OTHERS                  8.
*save_text
          WA_HEADER-TDNAME WA_EKKO_2-EBELN.
          WA_HEADER-TDID  'F04'.
          WA_HEADER-TDOBJECT =  'EKKO'.
          WA_HEADER-TDSPRAS SY-LANGU.
          APPEND WA_HEADER TO L_HEADER.
          LOOP AT L_LINES INTO WA_LINES .
            WA_LINES_1-TDFORMAT '*'.
            WA_LINES_1-TDLINE WA_LINES-TDLINE.
            APPEND WA_LINES_1 TO  L_LINES_1.
          ENDLOOP.
          CALL FUNCTION 'SAVE_TEXT'
            EXPORTING
              CLIENT          SY-MANDT
              HEADER          WA_HEADER
              SAVEMODE_DIRECT 'X'
            TABLES
              LINES           L_LINES_1
            EXCEPTIONS
              ID              1
              LANGUAGE        2
              NAME            3
              OBJECT          4
              OTHERS          5.
        ENDIF.
**********************************************************************
        CLEAR:EKKO_1,EKKO_2,EKKO_1[],EKKO_2[],
        EKPO_1,EKPO_2,EKPO_3,EKPO_1[],EKPO_2[],EKPO_3[],
        P_FRGC1.
**********************************************************************
      ENDIF.
    ENDIF.
    IF P_CHK <> 'X'.
*新值
      IF NOT LIT_EKPO_DLV[] IS INITIAL.
        LOOP AT LIT_EKPO_DLV INTO LWA_EKPO_DLV.
          MOVE-CORRESPONDING LWA_EKPO_DLV TO WA_EKPO_2.
          APPEND WA_EKPO_2 TO EKPO_2.
        ENDLOOP.
      ENDIF.
*旧值
      IF NOT EKPO_2[] IS INITIAL.
        SELECT INTO CORRESPONDING FIELDS OF TABLE
              EKPO_1 FROM EKPO
          FOR ALL ENTRIES IN EKPO_2
          WHERE  EBELN EKPO_2-EBELN
            AND  EBELP EKPO_2-EBELP.
      ENDIF.
*      比较
      IF NOT EKPO_2[] IS INITIAL.
        IF NOT EKPO_1[] IS INITIAL.
          CLEAR:WA_EKPO_1,WA_EKPO_2.
          LOOP AT EKPO_2 INTO WA_EKPO_2.
            READ TABLE EKPO_1 INTO WA_EKPO_1 WITH KEY EBELN WA_EKPO_2-EBELN EBELP WA_EKPO_2-EBELP.
            IF SY-SUBRC 0.
              IF WA_EKPO_2-NETPR <> WA_EKPO_1-NETPR OR WA_EKPO_2-MENGE <> WA_EKPO_1-MENGE OR WA_EKPO_2-LOEKZ 'L' AND WA_EKPO_1-LOEKZ '' )
                OR WA_EKPO_2-PEINH <> WA_EKPO_1-PEINH.
                MOVE-CORRESPONDING WA_EKPO_2 TO WA_EKPO_3.
                APPEND WA_EKPO_3 TO EKPO_3 .
*save version change data
                IF WA_EKPO_2-MENGE <> WA_EKPO_1-MENGE.
                  N_STR WA_EKPO_2-MENGE .
                  O_STR WA_EKPO_1-MENGE.
                  CONCATENATE 'CHANGE ITEM' WA_EKPO_2-EBELP 'FROM QTY' O_STR 'TO' N_STR SY-DATUM
                    INTO WA_LINES-TDLINE SEPARATED BY SPACE.
                  APPEND WA_LINES TO L_LINES.
                  CLEAR: WA_LINES,O_STR,N_STR.
                ENDIF.
*
                IF WA_EKPO_2-NETPR <> WA_EKPO_1-NETPR OR WA_EKPO_2-PEINH <> WA_EKPO_1-PEINH.
                  IF WA_EKPO_2-PEINH 0.
                    WA_EKPO_2-PEINH 1.
                  ENDIF.
                  IF WA_EKPO_1-PEINH 0.
                    WA_EKPO_1-PEINH 1.
                  ENDIF.
*     CONVERT PRICE TO EXTERNAL SUCH AS JPY
                  IF LWA_EKKO_DLV-WAERS <> 'HKD' OR LWA_EKKO_DLV-WAERS <> 'USD' OR LWA_EKKO_DLV-WAERS <> 'CNY' OR LWA_EKKO_DLV-WAERS <> 'EUR'.

                    CLEAR LV_NETPR.
                    CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
                      EXPORTING
                        CURRENCY        LWA_EKKO_DLV-WAERS
                        AMOUNT_INTERNAL WA_EKPO_2-NETPR
                      IMPORTING
                        AMOUNT_EXTERNAL LV_NETPR.
                    N_STR LV_NETPR / WA_EKPO_2-PEINH.

                    CLEAR LV_NETPR.
                    CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
                      EXPORTING
                        CURRENCY        LWA_EKKO_DLV-WAERS
                        AMOUNT_INTERNAL WA_EKPO_1-NETPR
                      IMPORTING
                        AMOUNT_EXTERNAL LV_NETPR.
                    O_STR LV_NETPR / WA_EKPO_1-PEINH.

                  ELSE.
                    N_STR WA_EKPO_2-NETPR / WA_EKPO_2-PEINH.
                    O_STR WA_EKPO_1-NETPR / WA_EKPO_1-PEINH.
                  ENDIF.
                  CONCATENATE 'CHANGE ITEM' WA_EKPO_2-EBELP 'FROM PRICE' O_STR 'TO' N_STR SY-DATUM
                    INTO WA_LINES-TDLINE SEPARATED BY SPACE.
                  APPEND WA_LINES TO L_LINES.
                  CLEAR :WA_LINES,O_STR,N_STR.
                ENDIF.
*删除
                IF WA_EKPO_2-LOEKZ 'L'.
                  IF WA_EKPO_1-LOEKZ <> 'L'.
                    N_STR WA_EKPO_2-MENGE .
                    O_STR WA_EKPO_1-MENGE.
                    CONCATENATE 'DELETE ITEM' WA_EKPO_2-EBELP 'FROM QTY' O_STR 'TO' '0.000' SY-DATUM
                      INTO WA_LINES-TDLINE SEPARATED BY SPACE.
                    APPEND WA_LINES TO L_LINES.
                    CLEAR :WA_LINES,O_STR,N_STR.
                  ENDIF.
                ENDIF.
**********************************************************************
              ENDIF.
            ENDIF.
          ENDLOOP.
        ENDIF.
      ENDIF.
**********************************************************
**********************************************************
      IF NOT EKPO_3[] IS INITIAL.
        READ TABLE EKPO_3 INTO WA_EKPO_3 INDEX 1.
        SELECT INTO CORRESPONDING FIELDS OF TABLE EKKO_2
        FROM EKKO WHERE EBELN WA_EKPO_3-EBELN.
        IF NOT EKKO_2[] IS INITIAL.
          READ TABLE EKKO_2 INTO WA_EKKO_2 INDEX 1.
          IF WA_EKKO_2-FRGKE 'R' OR WA_EKKO_2-FRGKE 'X' AND WA_EKKO_2-FRGZU <> '' ).
*            wa_ekko_2-frgke = 'X'.
*            wa_ekko_2-frgzu = ' '.
*            "modify ekko_2 index 1 transporting frgke frgzu.
*            move-corresponding wa_ekko_2 to im_data.
*            call method im_header->set_data( im_data ).
            "   im_header->set_data( importing IM_DATA = wa_ekko_2 ).
            SELECT SINGLE FRGC1 INTO P_FRGC1 FROM T16FS
            WHERE FRGGR WA_EKKO_2-FRGGR
            AND FRGSX WA_EKKO_2-FRGSX.
            PURCHASEORDER WA_EKKO_2-EBELN.
            PO_REL_CODE P_FRGC1.
            EXPORT
            PURCHASEORDER FROM PURCHASEORDER
           TO MEMORY ID 'text1'.
            EXPORT
           PO_REL_CODE FROM PO_REL_CODE
          TO MEMORY ID 'text2'.
*save text
            IF NOT L_LINES[] IS INITIAL.
              READ TABLE EKKO_2 INTO WA_EKKO_2 INDEX 1.
              L_TDNAME WA_EKKO_2-EBELN.
              CALL FUNCTION 'READ_TEXT'
                EXPORTING
                  ID                      'F04'
                  LANGUAGE                SY-LANGU
                  NAME                    L_TDNAME
                  OBJECT                  'EKKO'
                TABLES
                  LINES                   L_LINES_1
                EXCEPTIONS
                  ID                      1
                  LANGUAGE                2
                  NAME                    3
                  NOT_FOUND               4
                  OBJECT                  5
                  REFERENCE_CHECK         6
                  WRONG_ACCESS_TO_ARCHIVE 7
                  OTHERS                  8.
*save_text
              WA_HEADER-TDNAME WA_EKKO_2-EBELN.
              WA_HEADER-TDID  'F04'.
              WA_HEADER-TDOBJECT =  'EKKO'.
              WA_HEADER-TDSPRAS SY-LANGU.
              APPEND WA_HEADER TO L_HEADER.
              LOOP AT L_LINES INTO WA_LINES .
                WA_LINES_1-TDFORMAT '*'.
                WA_LINES_1-TDLINE WA_LINES-TDLINE.
                APPEND WA_LINES_1 TO  L_LINES_1.
              ENDLOOP.
              CALL FUNCTION 'SAVE_TEXT'
                EXPORTING
                  CLIENT          SY-MANDT
                  HEADER          WA_HEADER
                  SAVEMODE_DIRECT 'X'
                TABLES
                  LINES           L_LINES_1
                EXCEPTIONS
                  ID              1
                  LANGUAGE        2
                  NAME            3
                  OBJECT          4
                  OTHERS          5.
            ENDIF.
**********************************************************************
          ENDIF.
        ENDIF.
        CLEAR:EKKO_1,EKKO_2,EKKO_1[],EKKO_2[],
        EKPO_1,EKPO_2,EKPO_3,EKPO_1[],EKPO_2[],EKPO_3[],
        P_FRGC1.
      ENDIF.
    ENDIF.
  ENDIF.

**********************************************************************
*   delete PO email status when reset release po
*   Added by rudyzhang  2012/11/13
**********************************************************************
  DATA : LS_EKKO TYPE EKKO,
         LS_ZTPOEMAIL TYPE ZTPOEMAIL.
*    IF SY-TCODE = 'ME29N'.
  SELECT SINGLE FROM EKKO INTO LS_EKKO WHERE EBELN LWA_EKKO_DLV-EBELN.
  IF LS_EKKO-FRGKE 'R' AND LWA_EKKO_DLV-FRGKE <> 'R'."reset release po
    SELECT SINGLE FROM ZTPOEMAIL INTO LS_ZTPOEMAIL WHERE EBELN LWA_EKKO_DLV-EBELN." already sent PO email at first
    IF SY-SUBRC 0.
      DELETE FROM ZTPOEMAIL WHERE EBELN LWA_EKKO_DLV-EBELN." Move from po email table
    ENDIF.
  ENDIF.
*    ENDIF.
*  ENDIF.

**********************************************************************
* PO all items are deleted and  have records in version table zekpo
* need to insert one new version by manual with ZTIEM = 'D' as deletion flage
**********************************************************************
*  IF SY-TCODE = 'ME22N' OR  SY-TCODE = 'ME23N' OR SY-TCODE = 'ME29N'.
  DATA : LV_LAST_VERSION(3),
         LT_ZEKPO TYPE TABLE OF ZEKPO,
         LS_ZEKPO TYPE ZEKPO.

  IF LWA_EKKO_DLV-FRGKE ''."not need release, all items may be deleted

    SELECT DISTINCT ZVSIN
      INTO LV_LAST_VERSION
      FROM ZEKPO
      WHERE EBELN LWA_EKKO_DLV-EBELN
      AND   ZITEM ''.
    ENDSELECT.

    IF SY-SUBRC 0." if released at before

      LV_LAST_VERSION LV_LAST_VERSION + 1.

      LOOP AT LIT_EKPO_DLV INTO LWA_EKPO_DLV.
        MOVE-CORRESPONDING LWA_EKPO_DLV TO LS_ZEKPO.
        MOVE : "LWA_EKPO_DIV-MATNR to LS_ZEKPO-EMATN,
               LWA_EKPO_DLV-MENGE TO LS_ZEKPO-OLD_MENGE,
               LWA_EKPO_DLV-MEINS TO LS_ZEKPO-MEINS,
               LWA_EKPO_DLV-NETPR TO LS_ZEKPO-OLD_NETPR,
               LWA_EKKO_DLV-WAERS TO LS_ZEKPO-WAERS,
               '0'                   TO LS_ZEKPO-MENGE,
               LV_LAST_VERSION       TO LS_ZEKPO-ZVSIN,
               SY-DATUM              TO LS_ZEKPO-BUDAT,
               'D'                   TO LS_ZEKPO-ZITEM.

        APPEND LS_ZEKPO TO LT_ZEKPO.
        CLEAR :LS_ZEKPO.
      ENDLOOP.

      IF LT_ZEKPO IS NOT INITIAL.
        MODIFY ZEKPO FROM TABLE LT_ZEKPO.
        DELETE FROM ZTPOEMAIL WHERE EBELN LWA_EKKO_DLV-EBELN." Move from po email table
        CLEAR LT_ZEKPO.
      ENDIF.

    ENDIF.

  ENDIF.

*  ENDIF.

**Update Po qty when comfimation changed, PO qty = Total OA confirmation qty
  IF SY-TCODE 'ME21N' OR SY-TCODE 'ME22N' OR SY-TCODE 'ME23N' OR SY-TCODE 'ME29N'.
    DATA : LV_MENGE TYPE EKPO-MENGE,"OA qty
           LS_MECONF_DETAIL TYPE MECONF_DETAIL,
           LT_MECONF_DETAIL TYPE TABLE OF MECONF_DETAIL,
           LT_CONF TYPE MMPURCONF_T_CONF,
           LS_CONF TYPE MMPURCONF_CONF.

    DATA: IF_CONF TYPE REF TO IF_MMPUR_CONF_ITEM,
          IF_PURCHASE_ORDER_ITEMS TYPE REF TO PURCHASE_ORDER_ITEMS,
          IF_PURCHASE_ORDER_ITEM TYPE REF TO PURCHASE_ORDER_ITEM.

    DATA : PURCHASE_ORDER_ITEMS TYPE  PURCHASE_ORDER_ITEMS,"Item tables
           PURCHASE_ORDER_ITEM TYPE  PURCHASE_ORDER_ITEM,"Item line
           LS_MEPOITEM  TYPE MEPOITEM.
    "get item interface
    PURCHASE_ORDER_ITEMS IM_HEADER->GET_ITEMS).
    " Process item one by one
    LOOP AT PURCHASE_ORDER_ITEMS INTO PURCHASE_ORDER_ITEM.
      LS_MEPOITEM PURCHASE_ORDER_ITEM-ITEM->GET_DATA).
      " get conf interface
      IF_CONF PURCHASE_ORDER_ITEM-ITEM->GET_CONFIRMATION_HANDLER).
      " get conf data
      CHECK IF_CONF IS NOT INITIAL.
      LT_CONF IF_CONF->GET_CONFIRMATIONS).
      LOOP AT LT_CONF INTO LS_CONF.
*        LT_MECONF_DETAIL = LS_CONF->GET_DATA( ).
      ENDLOOP.
    ENDLOOP.


  ENDIF.
ENDMETHOD.

 

METHOD if_ex_me_process_po_cust~close.
**************************************
  DATA: ekpo_1 TYPE TABLE OF ekpo,
        wa_ekpo_1 TYPE ekpo,
        ekpo_2 TYPE TABLE OF ekpo,
        wa_ekpo_2 TYPE ekpo,
        ekpo_3 TYPE TABLE OF ekpo,
        wa_ekpo_3 TYPE ekpo.
  DATA:ekko_1 TYPE TABLE OF ekko,
       ekko_2 TYPE TABLE OF ekko,
       wa_ekko_2 TYPE ekko,
       p_chk  TYPE c,
       p_frgc1 TYPE t16fs-frgc1.

  DATA: lwa_ekko_in_dlv TYPE mepoheader,
        lwa_ekpo_in_dlv TYPE purchase_order_item,
        lit_ekpo_in_dlv TYPE purchase_order_items,
        lwa_item_in_dlv TYPE mepoitem,

        lit_ekko_dlv TYPE STANDARD TABLE OF ekko,
        lit_ekpo_dlv TYPE STANDARD TABLE OF ekpo,
        lwa_ekko_dlv TYPE ekko,
        lwa_ekpo_dlv TYPE ekpo.
  DATA: purchaseorder TYPE bapimmpara-po_number,
        po_rel_code TYPE bapimmpara-po_rel_cod,
        rel_group TYPE bapimmpara-rel_group,
        use_exceptions TYPE bapimmpara-selection,
        return TYPE TABLE OF bapireturn,
        wa_return TYPE bapireturn .
  DATA:rel_status_new TYPE bapimmpara-rel_status,
       rel_indicator_new TYPE bapimmpara-po_rel_ind .

  DATA : LS_ZTPOEMAIL TYPE ZTPOEMAIL.

  "  DATA: poitem TYPE STANDARD TABLE OF MEPOITEM .

  IF sy-tcode 'ME22N' OR sy-tcode 'ME29N' OR sy-tcode 'ME22' or sy-tcode 'ME23N'.
    WAIT UP TO SECONDS.
    IMPORT purchaseorder TO purchaseorder  FROM MEMORY ID 'text1'.
    IMPORT po_rel_code TO po_rel_code  FROM MEMORY ID 'text2'.

    IF purchaseorder IS NOT INITIAL AND po_rel_code IS NOT INITIAL.

      CALL FUNCTION 'BAPI_PO_RESET_RELEASE'
        EXPORTING
          purchaseorder     purchaseorder
          po_rel_code       po_rel_code                                                                                                                                                "   USE_EXCEPTIONS                 = 'X'
        IMPORTING
          rel_status_new    rel_status_new
          rel_indicator_new rel_indicator_new
        TABLES
          return            return.

* Reset PO Emial status when reset release  - added by rudyzhang 2012/11/13
      READ TABLE return WITH KEY type 'E' TRANSPORTING NO FIELDS.
      IF sy-subrc <> 0." reset release successful
        SELECT SINGLE FROM ZTPOEMAIL INTO ls_ZTPOEMAIL WHERE EBELN purchaseorder.
        IF sy-subrc 0.
*          CLEAR : ls_ZTPOEMAIL-ZEMTA.
*          ls_ztpoemail-ZEDES = 'RE SEND'.
*          MODIFY ZTPOEMAIL FROM LS_ZTPOEMAIL.
          Delete FROM ztpoemail WHERE ebeln purchaseorder.
          CLEAR LS_ZTPOEMAIL.
        ENDIF.
      ENDIF.

      CLEAR:purchaseorder,po_rel_code.
      FREE:purchaseorder,po_rel_code.
      purchaseorder ''.
      po_rel_code ''.
      EXPORT purchaseorder FROM purchaseorder TO MEMORY ID 'text1'.
      EXPORT po_rel_code FROM po_rel_code TO MEMORY ID 'text2'.
    ENDIF.




  ENDIF.
ENDMETHOD.

 

 

method IF_EX_ME_PO_PRICING_CUST~PROCESS_KOMP.

  IF sy-tcode 'ME21N' or  sy-tcode 'ME22N'.
    CLEAR:ch_komp-ZPS_PSP_PNR.
    data:ls_im_knt type line of mmpur_ekknu.
    loop at im_knt into ls_im_knt where ebelp ch_komp-KPOSN.
      ch_komp-zPS_PSP_PNR ls_im_knt-PS_PSP_PNR.
    endloop.

  ENDIF.


endmethod.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值