FUNCTION zrfc_mm014.*"----------------------------------------------------------------------*"*"Local interface:*" IMPORTING*" VALUE(CALLNO) TYPE ZCALLNO*" TABLES*" ZMMS002 STRUCTURE ZMMS002*"----------------------------------------------------------------------TYPES:BEGIN OF ty_regup, bukrs TYPE regup-bukrs, belnr TYPE regup-belnr, gjahr TYPE regup-gjahr, retn_date TYPE regup-retn_date, zzbelnr TYPE regup-zzbelnr, zzgjahr TYPE regup-zzgjahr, END OF ty_regup.DATA: lt_zmmt002 TYPE TABLE OF zmmt002, lt_zmmt002s TYPE TABLE OF zmmt002, ls_zmmt002 LIKE LINE OF lt_zmmt002, lt_regup TYPE TABLE OF ty_regup, ls_regup TYPE ty_regup, lv_datano TYPE i.*---查询未发给费控的会计凭证SELECT * INTO TABLE lt_zmmt002 FROM zmmt002 WHERE flag = ' '.lt_zmmt002s = lt_zmmt002.SORT lt_zmmt002 BY bukrs gjahr belnr.DELETE ADJACENT DUPLICATES FROM lt_zmmt002 COMPARING bukrs gjahr belnr.IF lt_zmmt002 IS NOT INITIAL. SELECT bukrs belnr gjahr retn_date zzbelnr zzgjahr INTO TABLE lt_regup FROM regup FOR ALL ENTRIES IN lt_zmmt002 WHERE bukrs = lt_zmmt002-bukrs AND belnr = lt_zmmt002-belnr AND gjahr = lt_zmmt002-gjahr.ENDIF.*---删除未产生清帐凭证的数据DELETE lt_regup WHERE zzbelnr IS INITIAL.*---数据编辑LOOP AT lt_regup INTO ls_regup.zmms002-bukrs = ls_regup-bukrs.zmms002-gjahr = ls_regup-gjahr.zmms002-belnr = ls_regup-belnr.zmms002-retn_date = ls_regup-retn_date.zmms002-flag = 'S'.APPEND zmms002.ENDLOOP.*---记录已发给费控系统的凭证CLEAR:gt_log,gs_log.LOOP AT zmms002. lv_datano = lv_datano + 1. gs_log-name = 'ZRFC_MM014'. gs_log-cdate = sy-datum. GET TIME. gs_log-ctime = sy-uzeit. gs_log-callno = callno. gs_log-datano = lv_datano. gs_log-flag = 'S'. gs_log-log = 'Success'. CONCATENATE zmms002-bukrs zmms002-gjahr zmms002-belnr zmms002-retn_date zmms002-flag INTO gs_log-content SEPARATED BY '|'. CONDENSE gs_log-content NO-GAPS. gs_log-length = STRLEN( gs_log-content ). APPEND gs_log TO gt_log.ENDLOOP.IF gt_log IS NOT INITIAL. INSERT zrfc_mm01out_log FROM TABLE gt_log. IF sy-subrc = 0. COMMIT WORK. ENDIF.ENDIF.*---更新客制会计凭证表CLEAR ls_zmmt002.ls_zmmt002-flag = 'X'.MODIFY lt_zmmt002s FROM ls_zmmt002 TRANSPORTING flag WHERE flag IS INITIAL.MODIFY zmmt002 FROM TABLE lt_zmmt002s.IF sy-subrc = 0 .COMMIT WORK.ELSE.ROLLBACK WORK.ENDIF.ENDFUNCTION.