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.