caizjian
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.

 

分类:

技术点:

相关文章: