生成预付款会计凭证
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.