首页 > 代码库 > 服务确定撤销/删除/关闭 (ml81n)

服务确定撤销/删除/关闭 (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.

 

服务确定撤销/删除/关闭 (ml81n)