DATA: RESULT_FIELDS TYPE _ty_s_TG_1.
*$*$ begin of routine - insert your code only below this line *-* ... "insert your code here DATA: it_gl_acct TYPE STANDARD TABLE OF /bic/pzgl_acct1, wa_gl_acct TYPE /bic/pzgl_acct1,
it_gl_group TYPE STANDARD TABLE OF /bic/pzbpc_gro, wa_gl_group TYPE /bic/pzbpc_gro,
it_xj_acct TYPE STANDARD TABLE OF /bic/pzbpc_map, wa_xj_acct TYPE /bic/pzbpc_map,
it_gl_flow TYPE STANDARD TABLE OF /bic/pz_flow, wa_gl_flow TYPE /bic/pz_flow,
period TYPE n LENGTH 3,
it_gro_acct type STANDARD TABLE OF /BIC/PZ_KMLB, wa_gro_acct type /BIC/PZ_KMLB, *-------------------------------------现金流量求期初 e_s_result1 TYPE _ty_t_tg_1, *-------------------------------------现金流量求期初 e_s_result TYPE _ty_t_tg_1, STR TYPE /BIC/PZBPC_GRO-/bic/z_group. FIELD-SYMBOLS: <result_fields> TYPE _ty_s_tg_1, <wa_gl_group> TYPE /bic/pzbpc_gro, <WA_GL_FLOW> TYPE /bic/pz_flow, <it_gro_acct> type /BIC/PZ_KMLB. SELECT * INTO CORRESPONDING FIELDS OF TABLE it_gl_group FROM /bic/pzbpc_gro WHERE objvers = 'A' AND /BIC/Z_PLGL = 'N'. LOOP AT it_gl_group ASSIGNING <wa_gl_group>. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = <wa_gl_group>-company IMPORTING output = <wa_gl_group>-company. ENDLOOP.
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_gl_acct FROM /bic/pzgl_acct1 WHERE objvers = 'A'. SELECT * INTO CORRESPONDING FIELDS OF TABLE it_gl_flow FROM /bic/pz_flow WHERE objvers = 'A'. LOOP AT it_gl_flow ASSIGNING <WA_GL_FLOW>. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = <WA_GL_FLOW>-/BIC/ZGL_ACCT IMPORTING output = <WA_GL_FLOW>-/BIC/ZGL_ACCT. ENDLOOP.
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_gro_acct FROM /BIC/PZ_KMLB WHERE objvers = 'A' AND /BIC/Z_PLGL = 'N'.
LOOP AT it_gro_acct ASSIGNING <it_gro_acct>. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = <it_gro_acct>-/bic/zgl_acct IMPORTING output = <it_gro_acct>-/bic/zgl_acct. ENDLOOP. SORT it_gro_acct DESCENDING.
LOOP AT SOURCE_PACKAGE ASSIGNING <source_fields>. CLEAR WA_GRO_ACCT. CLEAR wa_gl_acct. CLEAR wa_gl_group. READ TABLE it_gl_acct INTO wa_gl_acct WITH KEY /bic/zgl_acct1 = <source_fields>-gl_account chrt_accts = '1000' objvers = 'A'. IF wa_gl_acct-/bic/zgl_acct IS INITIAL. CONTINUE. ENDIF. *-----------------------------------------------------截取字符串前‘0’ CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = wa_gl_acct-/bic/zgl_acct IMPORTING output = wa_gl_acct-/bic/zgl_acct. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = <source_fields>-comp_code IMPORTING output = <source_fields>-comp_code. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = <source_fields>-pcompany IMPORTING output = <source_fields>-pcompany. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = <source_fields>-func_area IMPORTING output = <source_fields>-func_area.
*-----------------------------------------------------判断group IF <source_fields>-PCOMPANY = '9999'. <source_fields>-PCOMPANY = ''. ENDIF. READ TABLE it_gro_acct INTO WA_GRO_ACCT WITH KEY /BIC/ZGL_ACCT = wa_gl_acct-/bic/zgl_acct OBJVERS = 'A' /BIC/Z_PLGL = 'N'. CLEAR STR. IF sy-subrc <> 0. WA_GRO_ACCT-/BIC/Z_KMLB = 'X'. ENDIF. IF WA_GRO_ACCT-/BIC/Z_KMLB <> 'A' AND <source_fields>-pcompany IS INITIAL. WA_GRO_ACCT-/BIC/Z_KMLB = 'X'. ENDIF. READ TABLE it_gl_group INTO wa_gl_group WITH KEY /BIC/Z_KMLB = WA_GRO_ACCT-/BIC/Z_KMLB company = <source_fields>-comp_code objvers = 'A'. IF <source_fields>-comp_code = '2100' and WA_GRO_ACCT-/BIC/ZGL_ACCT = '152401' AND <source_fields>-FISCPER = '2011009'. BREAK-POINT. ENDIF. IF sy-subrc <> 0. WA_GRO_ACCT-/BIC/Z_KMLB = 'X'. READ TABLE it_gl_group INTO wa_gl_group WITH KEY /BIC/Z_KMLB = WA_GRO_ACCT-/BIC/Z_KMLB company = <source_fields>-comp_code objvers = 'A'. ENDIF. IF WA_GRO_ACCT-/BIC/Z_KMLB = 'B'. READ TABLE it_gl_group INTO wa_gl_group WITH KEY /BIC/Z_KMLB = WA_GRO_ACCT-/BIC/Z_KMLB company = <source_fields>-pcompany objvers = 'A' /BIC/ZBPC_GRO = 2. IF sy-subrc = 0. STR = wa_gl_group-/bic/z_group. ELSE. STR = 'NONE'. ENDIF. *读取合并组代号为2的 READ TABLE it_gl_group INTO wa_gl_group WITH KEY /BIC/Z_KMLB = WA_GRO_ACCT-/BIC/Z_KMLB company = <source_fields>-comp_code objvers = 'A' /BIC/ZBPC_GRO = 2. IF sy-subrc = 0 AND STR = wa_gl_group-/bic/z_group. RESULT_FIELDS-/BIC/ZGROUPS = wa_gl_group-/bic/z_group. ELSE. READ TABLE it_gl_group INTO wa_gl_group WITH KEY /BIC/Z_KMLB = WA_GRO_ACCT-/BIC/Z_KMLB company = <source_fields>-comp_code objvers = 'A' /BIC/ZBPC_GRO = 1. RESULT_FIELDS-/BIC/ZGROUPS = wa_gl_group-/bic/z_group. ENDIF. ELSE. RESULT_FIELDS-/BIC/ZGROUPS = wa_gl_group-/bic/z_group. ENDIF.
*-----------------------------------------------------FLOW为F_999的统一处理
CONCATENATE 'A' wa_gl_acct-/bic/zgl_acct INTO RESULT_FIELDS-/BIC/ZBPCACCT. * IF RESULT_FIELDS-/BIC/ZBPCACCT = 'A100010'. * BREAK-POINT. * ENDIF. CONCATENATE 'CC' <source_fields>-comp_code INTO RESULT_FIELDS-/BIC/ZENTITY. RESULT_FIELDS-/BIC/ZFLOW = 'F_999'. IF <source_fields>-pcompany = '' OR <source_fields>-pcompany = '9999' OR <source_fields>-pcompany = '2099' OR <source_fields>-pcompany = '2199' OR <source_fields>-pcompany = '2299' OR <source_fields>-pcompany+0(1) = '9' OR <source_fields>-pcompany = 'D220'. RESULT_FIELDS-/BIC/ZINTCO = 'I_NONE'. ELSE. CONCATENATE 'I_CC' <source_fields>-pcompany INTO RESULT_FIELDS-/BIC/ZINTCO. ENDIF. IF <source_fields>-func_area = '1000' OR <source_fields>-func_area = '2000'. CONCATENATE 'C' <source_fields>-func_area INTO RESULT_FIELDS-/BIC/ZITEM. ELSE. RESULT_FIELDS-/BIC/ZITEM = 'DUMMY'. ENDIF. RESULT_FIELDS-/BIC/ZSIGNDATA = <source_fields>-deb_cre_lc. RESULT_FIELDS-/BIC/ZCATEGORY = 'C_100'. RESULT_FIELDS-/BIC/ZDATASRC = 'INPUT'. RESULT_FIELDS-/BIC/ZBPCRCR = 'LC'. RESULT_FIELDS-/BIC/ZBPCTIM = <source_fields>-fiscper. COLLECT RESULT_FIELDS INTO RESULT_PACKAGE. *-----------------------------------------------------现金科目 期初期末特殊处理 IF RESULT_FIELDS-/BIC/ZBPCACCT = 'A101010'. * BREAK-POINT. READ TABLE it_gl_group INTO wa_gl_group WITH KEY /BIC/Z_KMLB = 'X' company = <source_fields>-comp_code objvers = 'A'. RESULT_FIELDS-/BIC/ZGROUPS = wa_gl_group-/bic/z_group. period = RESULT_FIELDS-/BIC/ZBPCTIM+4(3). if period = 1. RESULT_FIELDS-/BIC/ZBPCACCT = 'A81050100'. RESULT_FIELDS-/BIC/ZSIGNDATA = <source_fields>-deb_cre_lc + <source_fields>-credit - <source_fields>-debit. COLLECT RESULT_FIELDS INTO e_s_result1. else. RESULT_FIELDS-/BIC/ZBPCACCT = 'A81050200'. RESULT_FIELDS-/BIC/ZSIGNDATA = <source_fields>-deb_cre_lc. COLLECT RESULT_FIELDS INTO RESULT_PACKAGE. RESULT_FIELDS-/BIC/ZBPCACCT = 'A100010'. endif. ENDIF.
*-----------------------------------------------------对于期初余额的获取F_600 READ TABLE it_gl_flow INTO wa_gl_flow WITH KEY /bic/zgl_acct = wa_gl_acct-/bic/zgl_acct /bic/zf_600 = 'F_600' objvers = 'A'. IF sy-subrc = 0. IF <source_fields>-FISCPER+4(3) = '001'. RESULT_FIELDS-/BIC/ZFLOW = 'F_600'. RESULT_FIELDS-/BIC/ZSIGNDATA = <source_fields>-deb_cre_lc + <source_fields>-credit - <source_fields>-debit. COLLECT RESULT_FIELDS INTO e_s_result1. ENDIF. ENDIF.
*-----------------------------------------------------对于年度累计发生额的数据收集F_12 *0 READ TABLE it_gl_flow INTO wa_gl_flow WITH KEY /bic/zgl_acct = wa_gl_acct-/bic/zgl_acct /bic/zf_120 = 'F_120' objvers = 'A'. IF sy-subrc = 0. RESULT_FIELDS-/BIC/ZFLOW = 'F_120'. IF wa_gl_acct-/bic/zgl_acct <> '124101' AND wa_gl_acct-/bic/zgl_acct <> '124102'. RESULT_FIELDS-/BIC/ZSIGNDATA = <source_fields>-debit - <source_fields>-credit. ELSE. RESULT_FIELDS-/BIC/ZSIGNDATA = <source_fields>-credit. ENDIF. COLLECT RESULT_FIELDS INTO e_s_result. ENDIF.
*-----------------------------------------------------对于当月发生额的获取F_620 READ TABLE it_gl_flow INTO wa_gl_flow WITH KEY /bic/zgl_acct = wa_gl_acct-/bic/zgl_acct /bic/zf_620 = 'F_620' objvers = 'A'. IF sy-subrc = 0. RESULT_FIELDS-/BIC/ZFLOW = 'F_620'. RESULT_FIELDS-/BIC/ZSIGNDATA = <source_fields>-debit - <source_fields>-credit. COLLECT RESULT_FIELDS INTO RESULT_PACKAGE. ENDIF. CLEAR RESULT_FIELDS. ENDLOOP. *-----------------------------------------------------对于年度累计发生额的数据计算 BREAK-POINT. LOOP AT e_s_result INTO RESULT_FIELDS. IF RESULT_FIELDS-/BIC/ZFLOW = 'F_120'. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = RESULT_FIELDS-/BIC/ZBPCTIM IMPORTING output = RESULT_FIELDS-/BIC/ZBPCTIM. period = RESULT_FIELDS-/BIC/ZBPCTIM+4(3). DO. CONCATENATE RESULT_FIELDS-/BIC/ZBPCTIM+0(4) period INTO RESULT_FIELDS-/BIC/ZBPCTIM. COLLECT RESULT_FIELDS INTO RESULT_PACKAGE. period = period + 1. IF period > 12. EXIT. ENDIF. ENDDO. ENDIF. ENDLOOP.
LOOP AT e_s_result1 INTO RESULT_FIELDS. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = RESULT_FIELDS-/BIC/ZBPCTIM IMPORTING output = RESULT_FIELDS-/BIC/ZBPCTIM. CLEAR period. period = RESULT_FIELDS-/BIC/ZBPCTIM+4(3). DO. CONCATENATE RESULT_FIELDS-/BIC/ZBPCTIM+0(4) period INTO RESULT_FIELDS-/BIC/ZBPCTIM. COLLECT RESULT_FIELDS INTO RESULT_PACKAGE. period = period + 1. IF period > 12. EXIT. ENDIF. ENDDO. ENDLOOP. |