服務確定撤銷/刪除/關閉 (ml81n)


FUNCTION zrfc_mm006.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(CALLNO) TYPE  ZCALLNO
*"     VALUE(SHEET_NO) LIKE  ESSR-LBLNI OPTIONAL
*"     VALUE(BLDAT) LIKE  ESSR-BLDAT DEFAULT SY-DATUM
*"     VALUE(BUDAT) LIKE  ESSR-BUDAT DEFAULT SY-DATUM
*"     VALUE(OPERATE) TYPE  CHAR1
*"     VALUE(EBELN) LIKE  BAPIESSRC-PO_NUMBER OPTIONAL
*"     VALUE(EBELP) LIKE  BAPIESSRC-PO_ITEM OPTIONAL
*"  EXPORTING
*"     VALUE(E_SHEET_NO) LIKE  ESSR-LBLNI
*"     VALUE(FLAG) LIKE  BAPIRET2-TYPE
*"     VALUE(MESSAGE) LIKE  BAPIRET2-MESSAGE
*"----------------------------------------------------------------------
*備注:刪除服務確定表單,必須先撤銷 .

DATA:   lv_row         LIKE essr-lblni,
        lv_message     LIKE bapiret2-message.
DATA    lv_datano      TYPE zdatano.
DATA    lv_mode        TYPE char1 VALUE 'N'.
DATA    ls_sheetheader TYPE bapiessrc.

*******數據檢查
IF operate = 'R' OR operate = 'D'.
    IF sheet_no IS INITIAL.
      flag = 'E'.
      message = '請輸入確定表單號'.
      RETURN.
    ENDIF.
ELSEIF operate = 'F'.
    IF ebeln IS INITIAL OR ebelp IS INITIAL .
      flag = 'E'.
      message = '請輸入采購訂單和項目'.
      RETURN.
    ENDIF.
ENDIF.

******撤銷服務確定表單
IF operate = 'R'.

PERFORM bdc_dynpro      USING 'SAPLMLSR' '0400'.
PERFORM bdc_field       USING 'BDC_OKCODE'
                              '=SELP'.
PERFORM bdc_field       USING 'BDC_CURSOR'
                              'RM11P-NEW_ROW'.
PERFORM bdc_field       USING 'RM11P-NEW_ROW'
                              lv_row.
PERFORM bdc_dynpro      USING 'SAPLMLSR' '0340'.
PERFORM bdc_field       USING 'BDC_CURSOR'
                              'RM11R-LBLNI'.
PERFORM bdc_field       USING 'BDC_OKCODE'
                              '=ENTE'.
PERFORM bdc_field       USING 'RM11R-LBLNI'
                              sheet_no.
PERFORM bdc_dynpro      USING 'SAPLMLSR' '0400'.
PERFORM bdc_field       USING 'BDC_OKCODE'
                              '=AKCH'.
PERFORM bdc_field       USING 'BDC_CURSOR'
                              'RM11P-NEW_ROW'.
PERFORM bdc_field       USING 'RM11P-NEW_ROW'
                              lv_row.
PERFORM bdc_dynpro      USING 'SAPLMLSR' '0400'.
PERFORM bdc_field       USING 'BDC_OKCODE'
                              '=ACCR'.
PERFORM bdc_field       USING 'BDC_CURSOR'
                              'RM11P-NEW_ROW'.
PERFORM bdc_field       USING 'RM11P-NEW_ROW'
                              lv_row.
PERFORM bdc_dynpro      USING 'SAPLMLSR' '0400'.
PERFORM bdc_field       USING 'BDC_OKCODE'
                              '=SAVE'.
PERFORM bdc_field       USING 'BDC_CURSOR'
                              'RM11P-NEW_ROW'.
PERFORM bdc_field       USING 'RM11P-NEW_ROW'
                              lv_row.
PERFORM bdc_dynpro      USING 'SAPLSPO1' '0300'.
PERFORM bdc_field       USING 'BDC_OKCODE'
                              '=YES'.
PERFORM bdc_dynpro      USING 'SAPLMLSR' '0110'.
PERFORM bdc_field       USING 'BDC_CURSOR'
                              'IMKPF-BUDAT'.
PERFORM bdc_field       USING 'BDC_OKCODE'
                              '=ENTE'.
PERFORM bdc_field       USING 'IMKPF-BLDAT'
                              bldat.
PERFORM bdc_field       USING 'IMKPF-BUDAT'
                              budat.
REFRESH messtab.

CALL TRANSACTION 'ML81N' USING bdcdata
                 MODE   lv_mode
                 UPDATE 'L'
                 MESSAGES INTO messtab.

CLEAR gt_return.
CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
 TABLES
   imt_bdcmsgcoll       = messtab
   ext_return           = gt_return.

******刪除已撤銷的服務確定表單
ELSEIF operate = 'D'.
   CLEAR: gt_return.
   CALL FUNCTION 'BAPI_ENTRYSHEET_DELETE'
     EXPORTING
       entrysheet       = sheet_no
     TABLES
       return           = gt_return.

******關閉服務采購訂單
ELSEIF operate = 'F'.
ls_sheetheader-po_number = ebeln.          "采購訂單
ls_sheetheader-po_item   = ebelp.          "采購訂單行項目
ls_sheetheader-doc_date  = bldat.          "憑證日期
ls_sheetheader-post_date = budat.          "過賬日期
ls_sheetheader-fin_entry = 'F'.            "標識:關閉
CLEAR gt_return.
CALL FUNCTION 'BAPI_ENTRYSHEET_CREATE'
  EXPORTING
    entrysheetheader                  = ls_sheetheader
 IMPORTING
    entrysheet                        = e_sheet_no
  TABLES
    return                            = gt_return.
ENDIF.

******返回消息處理
  CLEAR:gs_return, message, lv_message.
  READ TABLE gt_return INTO gs_return WITH KEY type = 'E'.
  IF sy-subrc NE 0.
    flag =  'S'.
    IF  operate = 'R'.
        CONCATENATE '服務確認表單:' sheet_no ' 撤銷成功' INTO message.
        ELSEIF operate = 'D'.
        CONCATENATE '表單確認表單:' sheet_no ' 刪除成功' INTO message.
    ENDIF.

  ELSE.
    LOOP AT gt_return INTO gs_return WHERE type CA 'AEX'.
        MESSAGE ID     gs_return-id
                TYPE   gs_return-type
                NUMBER gs_return-number
                WITH   gs_return-message_v1 gs_return-message_v2
                       gs_return-message_v3 gs_return-message_v4
                       INTO lv_message.
        CONCATENATE message lv_message INTO message SEPARATED BY ''.
    ENDLOOP.
    SHIFT message LEFT DELETING LEADING  ''.
    flag = 'E'.

  ENDIF.

    CLEAR:gt_log,gs_log.
    lv_datano     = lv_datano + 1.
    gs_log-datano = lv_datano.
    gs_log-name   = 'ZRFC_MM006'.
    gs_log-cdate  = sy-datum.
    GET TIME.
    gs_log-ctime  = sy-uzeit.
    gs_log-callno = callno.
    gs_log-flag   = flag.
    gs_log-log    = message.
    CONCATENATE sheet_no  bldat  budat  operate ebeln ebelp e_sheet_no
    INTO gs_log-content.
    CONDENSE gs_log-content NO-GAPS.
    gs_log-length = STRLEN( gs_log-content ).
    APPEND gs_log TO gt_log.

   IF gt_log IS NOT INITIAL.
     INSERT zrfc_mm01in_log FROM TABLE gt_log.
     IF sy-subrc = 0.
       COMMIT WORK.
     ENDIF.
   ENDIF.

ENDFUNCTION.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM