之前招行开发的
TABLES:bkpf,isellist,faglflext.
*-----------excel
DATA: lv_excel TYPE ole2_object,
lv_sheet TYPE ole2_object,
lv_cell TYPE ole2_object,
lv_workbook TYPE ole2_object,
lv_xlsname TYPE string,
lv_line TYPE i VALUE 1, "行号
lv_cols TYPE i VALUE 0. "行号
INCLUDE ole2incl.
TYPES: data1(3500) TYPE c,
ty_data TYPE TABLE OF data1.
DATA l_rc TYPE i.
DATA:gt_sheet1 TYPE ty_data WITH HEADER LINE.
DATA:gt_fieldcat_lvc TYPE lvc_t_fcat,
gw_fieldcat_lvc TYPE lvc_s_fcat.
DATA:dy_table TYPE REF TO data,
dy_line TYPE REF TO data.
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE, "
<dyn_wa>,
<dyn_field>.
DATA:gs_layout TYPE lvc_s_layo."
DATA:gt_event TYPE slis_t_event WITH HEADER LINE.
DATA:ref_grid TYPE REF TO cl_gui_alv_grid.
DATA:BEGIN OF gt_budat OCCURS 0,"日期
budat TYPE budat,
END OF gt_budat.
DATA:BEGIN OF gt_period OCCURS 0,"期间
ymonth LIKE isellist-month,
END OF gt_period.
DATA:BEGIN OF gt_pswsl OCCURS 0,"币种
pswsl LIKE bseg-pswsl,
END OF gt_pswsl.
DATA:BEGIN OF gt_hkont OCCURS 0,"科目
hkont TYPE hkont,
END OF gt_hkont.
DATA:BEGIN OF gt_qjmx_bwb OCCURS 0,"期间明细本位币
gjahr TYPE gjahr,
ymonth LIKE isellist-month,
racct TYPE racct,
rtcur LIKE faglflext-rtcur,
dmbtr LIKE faglflext-hslvt,
END OF gt_qjmx_bwb.
DATA:BEGIN OF gt_qjmx_yb OCCURS 0,"期间明细原币
gjahr TYPE gjahr,
ymonth LIKE isellist-month,
racct TYPE racct,
rtcur LIKE faglflext-rtcur,
wrbtr LIKE faglflext-tslvt,
END OF gt_qjmx_yb.
DATA:BEGIN OF gt_qjhz OCCURS 0,"期间汇总
gjahr TYPE gjahr,
ymonth LIKE isellist-month,
rtcur LIKE faglflext-rtcur,
dmbtr LIKE faglflext-hslvt,
wrbtr LIKE faglflext-tslvt,
END OF gt_qjhz.
DATA:BEGIN OF gt_qjhj OCCURS 0,"期间合计
racct TYPE racct,
rtcur LIKE faglflext-rtcur,
dmbtr LIKE faglflext-hslvt,
wrbtr LIKE faglflext-tslvt,
END OF gt_qjhj.
DATA:gv_time TYPE i.
DATA:BEGIN OF gt_rqmx_bwb OCCURS 0,"日期明细本位币
gjahr TYPE gjahr,
budat TYPE budat,
hkont TYPE hkont,
pswsl LIKE bseg-pswsl,
dmbtr LIKE bseg-dmbtr,
END OF gt_rqmx_bwb.
DATA:BEGIN OF gt_rqmx_yb OCCURS 0,"日期明细原币
gjahr TYPE gjahr,
budat TYPE budat,
hkont TYPE hkont,
pswsl LIKE bseg-pswsl,
wrbtr LIKE bseg-wrbtr,
END OF gt_rqmx_yb.
DATA:BEGIN OF gt_rqhz OCCURS 0,"日期汇总 汇总金额
budat TYPE budat,
pswsl LIKE bseg-pswsl,
wrbtr LIKE bseg-wrbtr,
dmbtr LIKE bseg-dmbtr,
END OF gt_rqhz.
DATA:BEGIN OF gt_rqqcmx OCCURS 0,"日期期初明细->最后汇总到日期明细本位币/日期明细原币
racct TYPE racct,
rtcur LIKE faglflext-rtcur,
hsl LIKE faglflext-hslvt,
tsl LIKE faglflext-tslvt,
END OF gt_rqqcmx.
DATA:BEGIN OF gt_rqqcmxhz OCCURS 0,"日期期初汇总->最后汇总到日期汇总
rtcur LIKE faglflext-rtcur,
hsl LIKE faglflext-hslvt,
tsl LIKE faglflext-tslvt,
END OF gt_rqqcmxhz.
DATA:BEGIN OF gt_rqhj OCCURS 0,"日期合计
racct TYPE racct,
rtcur LIKE faglflext-rtcur,
dmbtr LIKE faglflext-hslvt,
wrbtr LIKE faglflext-tslvt,
END OF gt_rqhj.
DATA:gv_xlsname TYPE string.
SELECTION-SCREEN:BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS:p_bukrs TYPE faglflext-rbukrs OBLIGATORY DEFAULT '1000'.
SELECT-OPTIONS:s_jzrq FOR bkpf-budat MODIF ID m1 NO-EXTENSION,
s_jzqj FOR isellist-month MODIF ID m2 NO-EXTENSION,
s_racct FOR faglflext-racct.
SELECTION-SCREEN:END OF BLOCK b1.
SELECTION-SCREEN:BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
PARAMETERS:p_bwb RADIOBUTTON GROUP g1 DEFAULT 'X' USER-COMMAND xsbz,
p_yb RADIOBUTTON GROUP g1.
PARAMETERS:p_mx RADIOBUTTON GROUP g2 DEFAULT 'X' USER-COMMAND xsfs,
p_hz RADIOBUTTON GROUP g2.
SELECTION-SCREEN:END OF BLOCK b2.
SELECTION-SCREEN:BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-003.
PARAMETERS:p_alv RADIOBUTTON GROUP g3 DEFAULT 'X' USER-COMMAND xsfs,
p_excel RADIOBUTTON GROUP g3.
SELECTION-SCREEN:END OF BLOCK b3.
INITIALIZATION.
s_racct-low = 'I'.
s_racct-option = 'BT'.
s_racct-low = '1001000000'.
s_racct-high = '1002999999'.
APPEND s_racct.
*SELECTION-SCREEN:BEGIN OF BLOCK b4 WITH FRAME TITLE TEXT-004.
* PARAMETERS: p_file TYPE rlgrap-filename.
*SELECTION-SCREEN:END OF BLOCK b4.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_jzqj-low.
PERFORM frm_select_data_low.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_jzqj-high.
PERFORM frm_select_data_high.
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
* PERFORM frm_select_file..
START-OF-SELECTION.
break yangtao.
PERFORM frm_check_data.
PERFORM frm_get_data.
PERFORM frm_set_fieldcat_lvc.
PERFORM frm_creat_dyn_table.
IF p_alv = 'X'.
PERFORM frm_set_alv_dyn_data.
PERFORM frm_output_data.
ELSEIF p_excel = 'X'.
PERFORM frm_download_excel CHANGING gv_xlsname..
PERFORM frm_set_excel.
PERFORM frm_set_excel_dyn_data.
ENDIF.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_check_data .
IF s_jzrq[] IS NOT INITIAL AND s_jzqj[] IS NOT INITIAL.
MESSAGE '若输入记账日期,则不允许输入记账期间,若输入记账期间,则不允许数据记账日期' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING .
ELSEIF s_jzrq[] IS INITIAL AND s_jzqj[] IS INITIAL.
MESSAGE '记账日期和记账期间至少输入一个' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING .
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_select_data_low
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_select_data_low .
CALL FUNCTION 'POPUP_TO_SELECT_MONTH'
EXPORTING
actual_month = sy-datum+0(6)
IMPORTING
selected_month = s_jzqj-low.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_select_data_high
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_select_data_high .
CALL FUNCTION 'POPUP_TO_SELECT_MONTH'
EXPORTING
actual_month = sy-datum+0(6)
IMPORTING
selected_month = s_jzqj-high.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data .
DATA:lr_ryear TYPE RANGE OF faglflext-ryear.
DATA:lr_budat TYPE RANGE OF bkpf-budat WITH HEADER LINE.
DATA:lv_endat TYPE datum,
lv_bedat TYPE datum,
lv_qzdat TYPE datum.
DATA:lt_bseg TYPE TABLE OF bseg WITH HEADER LINE,
lt_bkpf_temp TYPE TABLE OF bkpf WITH HEADER LINE.
DATA:lv_field TYPE string,
lv_hsl TYPE faglflext-hslvt,
lv_hsl_temp TYPE faglflext-hslvt,
lv_tsl TYPE faglflext-hslvt,
lv_tsl_temp TYPE faglflext-hslvt,
lv_hsl_h TYPE faglflext-hslvt,
lv_num_char TYPE char2.
DATA:lv_num_end TYPE char2,
lv_num TYPE char2,
lv_hslvt TYPE faglflext-hslvt,
lv_tslvt TYPE faglflext-hslvt.
DATA:lv_year TYPE char4.
FIELD-SYMBOLS:<fs> TYPE any.
IF s_jzqj[] IS NOT INITIAL.
LOOP AT s_jzqj INTO DATA(lw_jzqj).
IF lw_jzqj-low IS NOT INITIAL AND lw_jzqj-high IS NOT INITIAL.
lv_bedat = lw_jzqj-low && '01'.
DO.
gt_period-ymonth = lv_bedat+0(6).
APPEND gt_period.
IF lv_bedat+0(6) = lw_jzqj-high+0(6).
EXIT.
ENDIF.
PERFORM frm_change_date USING lv_bedat 0 1 '+' 0 CHANGING lv_endat.
lv_bedat = lv_endat.
ENDDO.
IF lw_jzqj-low+0(4) <> lw_jzqj-high+0(4).
INSERT VALUE #( sign = 'I' option = 'BT' low = lw_jzqj-low+0(4) high = lw_jzqj-high+0(4) ) INTO TABLE lr_ryear.
ELSE.
INSERT VALUE #( sign = 'I' option = 'EQ' low = lw_jzqj-low+0(4) ) INTO TABLE lr_ryear.
ENDIF.
ELSEIF lw_jzqj-low IS NOT INITIAL AND lw_jzqj-high IS INITIAL.
gt_period-ymonth = lw_jzqj-low+0(6).
APPEND gt_period.
INSERT VALUE #( sign = 'I' option = 'EQ' low = lw_jzqj-low+0(4) ) INTO TABLE lr_ryear.
ELSEIF lw_jzqj-low IS INITIAL AND lw_jzqj-high IS NOT INITIAL.
gt_period-ymonth = lw_jzqj-high+0(6).
APPEND gt_period.
INSERT VALUE #( sign = 'I' option = 'EQ' low = lw_jzqj-high+0(4) ) INTO TABLE lr_ryear.
ENDIF.
ENDLOOP.
SELECT * INTO TABLE @DATA(lt_faglflext)
FROM faglflext
WHERE rbukrs EQ @p_bukrs AND
racct IN @s_racct AND
ryear IN @lr_ryear.
SORT gt_period BY ymonth.
SORT lt_faglflext BY ryear.
"获取每个月份对应的区间金额
LOOP AT gt_period.
IF sy-tabix = 1.
lv_year = gt_period+0(4).
ENDIF.
LOOP AT lt_faglflext INTO DATA(lw_faglflext) WHERE ryear = gt_period+0(4).
READ TABLE gt_pswsl WITH KEY pswsl = lw_faglflext-rtcur.
IF sy-subrc NE 0.
IF p_bwb = 'X' AND lw_faglflext-rtcur = 'CNY'.
gt_pswsl-pswsl = lw_faglflext-rtcur.
APPEND gt_pswsl.
ELSEIF p_yb = 'X' AND lw_faglflext-rtcur <> 'CNY'.
gt_pswsl-pswsl = lw_faglflext-rtcur.
APPEND gt_pswsl.
ENDIF.
ENDIF.
READ TABLE gt_hkont WITH KEY hkont = lw_faglflext-racct.
IF sy-subrc NE 0.
gt_hkont-hkont = lw_faglflext-racct.
APPEND gt_hkont.
ENDIF.
CLEAR:lv_num_end,lv_num,lv_hsl,lv_tsl,lv_hsl_temp,lv_tsl_temp,lv_hslvt,lv_tslvt.
lv_num_end = gt_period-ymonth+4(2).
lv_num = '01'.
IF lv_year = gt_period+0(4)."若存在跨年,则只取第一年的年初数HSLVT或TSLVT
lv_hslvt = lw_faglflext-hslvt.
lv_tslvt = lw_faglflext-tslvt.
ENDIF.
DO.
IF lv_num > lv_num_end.
EXIT.
ENDIF.
CLEAR:lv_hsl_temp.
lv_num = |{ lv_num ALPHA = IN }|.
IF p_bwb = 'X'.
CONCATENATE 'LW_FAGLFLEXT-HSL' lv_num INTO lv_field.
UNASSIGN <fs>.
ASSIGN (lv_field) TO <fs>.
IF <fs> IS ASSIGNED.
lv_hsl_temp = <fs>.
lv_hsl = lv_hsl + lv_hsl_temp.
ENDIF.
ELSEIF p_yb = 'X'.
CONCATENATE 'LW_FAGLFLEXT-TSL' lv_num INTO lv_field.
UNASSIGN <fs>.
ASSIGN (lv_field) TO <fs>.
IF <fs> IS ASSIGNED.
lv_tsl_temp = <fs>.
lv_tsl = lv_tsl + lv_tsl_temp.
ENDIF.
ENDIF.
lv_num = lv_num + 1.
lv_num = |{ lv_num ALPHA = IN }|.
CLEAR:lv_tsl_temp,lv_hsl_temp.
ENDDO.
lv_hsl = lv_hslvt + lv_hsl.
lv_tsl = lv_tslvt + lv_tsl.
IF p_bwb = 'X'.
gt_qjhz = VALUE #( gjahr = gt_period+0(4)
ymonth = gt_period-ymonth
rtcur = lw_faglflext-rtcur
dmbtr = lv_hsl ).
gt_qjmx_bwb = VALUE #( gjahr = gt_period+0(4)
ymonth = gt_period-ymonth
racct = lw_faglflext-racct
rtcur = lw_faglflext-rtcur
dmbtr = lv_hsl ).
COLLECT gt_qjmx_bwb.
ELSEIF p_yb = 'X'.
gt_qjhz = VALUE #( gjahr = gt_period+0(4)
ymonth = gt_period-ymonth
rtcur = lw_faglflext-rtcur
wrbtr = lv_tsl ).
gt_qjmx_yb = VALUE #( gjahr = gt_period+0(4)
ymonth = gt_period-ymonth
racct = lw_faglflext-racct
rtcur = lw_faglflext-rtcur
wrbtr = lv_tsl ).
COLLECT gt_qjmx_yb.
ENDIF.
COLLECT gt_qjhz.
IF p_mx = 'X'.
gt_qjhj = VALUE #( racct = lw_faglflext-racct
rtcur = lw_faglflext-rtcur
dmbtr = lv_hsl
wrbtr = lv_tsl ).
ELSEIF p_hz = 'X'.
gt_qjhj = VALUE #( rtcur = lw_faglflext-rtcur
dmbtr = lv_hsl
wrbtr = lv_tsl ).
ENDIF.
COLLECT gt_qjhj.
ENDLOOP.
ENDLOOP.
BREAK-POINT.
ELSEIF s_jzrq[] IS NOT INITIAL.
DATA(lw_jzrq) = s_jzrq[ 1 ].
IF lw_jzrq-low+6(2) = '01'.
DATA(lv_date) = lw_jzrq-low.
ELSE.
lv_date = lw_jzrq-low+0(6) && '01'.
ENDIF.
IF lw_jzrq-high IS NOT INITIAL AND lw_jzrq-low IS NOT INITIAL.
IF lw_jzrq-low <> lw_jzrq-high.
INSERT VALUE #( sign = 'I' option = 'BT' low = lw_jzrq-low high = lw_jzrq-high ) INTO TABLE lr_budat.
lv_bedat = lw_jzrq-low.
gt_budat-budat = lv_bedat.
APPEND gt_budat.
DO.
IF lv_bedat = lw_jzrq-high .
EXIT.
ELSE.
CLEAR:lv_endat.
PERFORM frm_change_date USING lv_bedat 1 0 '+' 0 CHANGING lv_endat.
gt_budat-budat = lv_endat.
APPEND gt_budat.
lv_bedat = lv_endat.
ENDIF.
ENDDO.
ELSE.
gt_budat-budat = lv_bedat.
APPEND gt_budat.
INSERT VALUE #( sign = 'I' option = 'EQ' low = lw_jzrq-low high = lw_jzrq-high ) INTO TABLE lr_budat.
ENDIF.
ELSEIF lw_jzrq-low IS NOT INITIAL.
gt_budat-budat = lw_jzrq-low.
APPEND gt_budat.
INSERT VALUE #( sign = 'I' option = 'EQ' low = lw_jzrq-low ) INTO TABLE lr_budat.
ENDIF.
SORT gt_budat BY budat.
"当前的发生额
SELECT * INTO TABLE @DATA(lt_bkpf)
FROM bkpf
WHERE bukrs EQ @p_bukrs AND
budat IN @lr_budat.
DATA(lt_bkpf_txt) = lt_bkpf[].
DO.
REFRESH:lt_bkpf_temp.
IF lt_bkpf[] IS INITIAL.
EXIT.
ENDIF.
APPEND LINES OF lt_bkpf FROM 1 TO 2000 TO lt_bkpf_temp.
DELETE lt_bkpf FROM 1 TO 2000.
IF lt_bkpf_temp[] IS NOT INITIAL.
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE lt_bseg
FROM bseg
FOR ALL ENTRIES IN lt_bkpf_temp
WHERE belnr = lt_bkpf_temp-belnr AND
bukrs = lt_bkpf_temp-bukrs AND
gjahr = lt_bkpf_temp-gjahr AND
hkont IN s_racct.
ENDIF.
ENDDO.
"计算当前输入日期对应前一期间的科目余额
PERFORM frm_change_date USING lv_date 0 1 '-' 0 CHANGING lv_qzdat."当前月前置日期
IF lt_bseg[] IS NOT INITIAL.
PERFORM frm_get_rqqc_data TABLES lt_bseg USING lv_qzdat.
ENDIF.
LOOP AT lt_bseg ASSIGNING FIELD-SYMBOL(<fs_bseg>).
READ TABLE lt_bkpf_txt INTO DATA(lw_bkpf_txt) WITH KEY belnr = <fs_bseg>-belnr bukrs = <fs_bseg>-bukrs gjahr = <fs_bseg>-gjahr.
IF sy-subrc EQ 0.
READ TABLE gt_pswsl WITH KEY pswsl = <fs_bseg>-pswsl.
IF sy-subrc NE 0.
IF p_bwb = 'X' AND <fs_bseg>-pswsl = 'CNY'.
gt_pswsl-pswsl = <fs_bseg>-pswsl.
APPEND gt_pswsl.
ELSEIF p_yb = 'X' AND <fs_bseg>-pswsl <> 'CNY'.
gt_pswsl-pswsl = <fs_bseg>-pswsl.
APPEND gt_pswsl.
ENDIF.
ENDIF.
READ TABLE gt_hkont WITH KEY hkont = <fs_bseg>-hkont.
IF sy-subrc NE 0.
gt_hkont-hkont = <fs_bseg>-hkont.
APPEND gt_hkont.
ENDIF.
gt_rqhz = VALUE #( budat = lw_bkpf_txt-budat"每天的汇总金额
pswsl = <fs_bseg>-pswsl ).
IF p_mx = 'X'.
gt_rqhj = VALUE #( racct = <fs_bseg>-hkont "最后的合计金额
rtcur = <fs_bseg>-pswsl ).
ELSEIF p_hz = 'X'.
gt_rqhj = VALUE #( rtcur = <fs_bseg>-pswsl )."最后的合计金额
ENDIF.
IF p_yb = 'X'.
gt_rqmx_yb = VALUE #( gjahr = <fs_bseg>-gjahr
budat = lw_bkpf_txt-budat
hkont = <fs_bseg>-hkont
pswsl = <fs_bseg>-pswsl
).
gt_rqhj-wrbtr = gt_rqhz-wrbtr = gt_rqmx_yb-wrbtr = COND #( WHEN <fs_bseg>-shkzg = 'H' THEN <fs_bseg>-wrbtr * -1
WHEN <fs_bseg>-shkzg = 'S' THEN <fs_bseg>-wrbtr ).
COLLECT gt_rqmx_yb."明细原币
ELSEIF p_bwb = 'X'.
gt_rqmx_bwb = VALUE #( gjahr = <fs_bseg>-gjahr
budat = lw_bkpf_txt-budat
hkont = <fs_bseg>-hkont
pswsl = <fs_bseg>-pswsl
).
gt_rqhj-dmbtr = gt_rqhz-dmbtr = gt_rqmx_bwb-dmbtr = COND #( WHEN <fs_bseg>-shkzg = 'H' THEN <fs_bseg>-dmbtr * -1
WHEN <fs_bseg>-shkzg = 'S' THEN <fs_bseg>-dmbtr
).
COLLECT gt_rqmx_bwb."明细本位币
ENDIF.
COLLECT gt_rqhz."每天的汇总金额
COLLECT gt_rqhj."最后的合计金额
ENDIF.
ENDLOOP.
"计算期初数据,累计到查询日期的第一天
PERFORM frm_get_beginning_data.
ENDIF.
SORT gt_hkont BY hkont.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_fieldcat_lvc
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_fieldcat_lvc .
DATA:lv_name TYPE lvc_fname,
lv_text TYPE string,
lv_num(2) TYPE c,
lv_lifnr_name TYPE ekko-lifnr.
DATA:lz TYPE i,
lv_flag.
CLEAR:gt_fieldcat_lvc[],lv_flag.
IF s_jzrq[] IS NOT INITIAL.
PERFORM add_field_lvc USING: 'BUDAT' '日期' '10' 'C' '10' '0' 'X' '' '' '' '' '' ''.
IF gt_hkont[] IS NOT INITIAL.
SELECT * INTO TABLE @DATA(lt_skat)
FROM skat
FOR ALL ENTRIES IN @gt_hkont
WHERE spras = @sy-langu AND
ktopl = '1000' AND
saknr = @gt_hkont-hkont.
ENDIF.
IF p_mx = 'X' .
LOOP AT gt_hkont.
READ TABLE lt_skat INTO DATA(lw_skat) WITH KEY saknr = gt_hkont-hkont.
LOOP AT gt_pswsl.
lv_text = '(' && gt_pswsl-pswsl && ')' && gt_hkont-hkont && '-' && lw_skat-txt20.
CONCATENATE gt_pswsl-pswsl '_' gt_hkont-hkont INTO lv_name.
PERFORM add_field_lvc USING lv_name lv_text '20' 'P' '17' '2' 'X' '' '' '' '' '' 'X'.
ENDLOOP.
ENDLOOP.
ELSEIF p_hz = 'X'.
LOOP AT gt_pswsl.
lv_name = lv_text = gt_pswsl-pswsl.
PERFORM add_field_lvc USING lv_name lv_text '13' 'P' '17' '2' 'X' '' '' '' '' '' 'X'.
ENDLOOP.
ENDIF.
ELSEIF s_jzqj[] IS NOT INITIAL.
PERFORM add_field_lvc USING: 'YMONTH' '期间' '10' 'C' '10' '0' 'X' '' '' '' '' '' ''.
IF gt_hkont[] IS NOT INITIAL.
SELECT * INTO TABLE @lt_skat
FROM skat
FOR ALL ENTRIES IN @gt_hkont
WHERE spras = @sy-langu AND
ktopl = '1000' AND
saknr = @gt_hkont-hkont.
ENDIF.
IF p_mx = 'X' .
LOOP AT gt_hkont.
READ TABLE lt_skat INTO lw_skat WITH KEY saknr = gt_hkont-hkont.
LOOP AT gt_pswsl.
lv_text = '(' && gt_pswsl-pswsl && ')' && gt_hkont-hkont && '-' && lw_skat-txt20.
CONCATENATE gt_pswsl-pswsl '_' gt_hkont-hkont INTO lv_name.
PERFORM add_field_lvc USING lv_name lv_text '20' 'P' '17' '2' 'X' '' '' '' '' '' 'X'.
ENDLOOP.
ENDLOOP.
ELSEIF p_hz = 'X'.
LOOP AT gt_pswsl.
lv_name = lv_text = gt_pswsl-pswsl.
PERFORM add_field_lvc USING lv_name lv_text '13' 'P' '17' '2' 'X' '' '' '' '' '' 'X'.
ENDLOOP.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREAT_DYN_TABLE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_creat_dyn_table .
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = gt_fieldcat_lvc
IMPORTING
ep_table = dy_table.
ASSIGN dy_table->* TO <dyn_table>."
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_ALV_DYN_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_alv_dyn_data .
DATA:lc_dyn_fidld(18) TYPE c.
DATA:lv_hsl LIKE faglflext-hslvt,
lv_hsl_fcode LIKE faglflext-hslvt.
DATA:lv_bedat TYPE datum,
lv_endat TYPE datum.
CLEAR:lv_hsl.
IF s_jzrq[] IS NOT INITIAL.
IF p_mx = 'X'.
PERFORM frm_set_data_jzrq_mx."日期明细
ELSEIF p_hz = 'X'.
PERFORM frm_set_data_jzrq_hz."日期汇总
ENDIF.
ELSEIF s_jzqj[] IS NOT INITIAL.
IF p_mx = 'X'.
PERFORM frm_set_data_jzqj_mx."期间明细
ELSEIF p_hz = 'X'.
PERFORM frm_set_data_jzqj_hz."期间汇总
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_output_data .
gs_layout-totals_bef = 'X'.
gs_layout-zebra = 'X'."
gs_layout-no_toolbar = ''.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-cprog
i_callback_pf_status_set = 'PF_STATUS_SET'
i_callback_user_command = 'USER_COMMAND'
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat_lvc
i_save = 'A'
TABLES
t_outtab = <dyn_table>
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ADD_FIELD_LVC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_2789 text
* -->P_2790 text
* -->P_2791 text
* -->P_2792 text
* -->P_2793 text
* -->P_2794 text
* -->P_2795 text
* -->P_2796 text
* -->P_2797 text
* -->P_2798 text
* -->P_2799 text
*----------------------------------------------------------------------*
FORM add_field_lvc USING i_fieldname TYPE slis_fieldname
i_text TYPE string
i_outputlen TYPE lvc_outlen
i_inttype TYPE inttype
i_intlen TYPE intlen
i_decimals TYPE decimals
i_zero TYPE c
i_fix_column TYPE c
i_no_out TYPE c
i_emphasize TYPE lvc_emphsz
i_do_sum
i_edit TYPE lvc_edit
i_flag.
CLEAR gw_fieldcat_lvc.
gw_fieldcat_lvc-fieldname = i_fieldname.
gw_fieldcat_lvc-colddictxt = 'L'.
gw_fieldcat_lvc-scrtext_l = i_text.
gw_fieldcat_lvc-outputlen = i_outputlen.
gw_fieldcat_lvc-inttype = i_inttype.
gw_fieldcat_lvc-intlen = i_intlen.
gw_fieldcat_lvc-decimals = i_decimals.
gw_fieldcat_lvc-no_zero = 'X'.
gw_fieldcat_lvc-fix_column = i_fix_column.
gw_fieldcat_lvc-no_out = i_no_out.
gw_fieldcat_lvc-emphasize = i_emphasize.
gw_fieldcat_lvc-do_sum = i_do_sum.
APPEND gw_fieldcat_lvc TO gt_fieldcat_lvc.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_PF
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM pf_status_set USING extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD_FULLSCREEN' EXCLUDING extab.
ENDFORM. "SET_PF
*&---------------------------------------------------------------------*
*& Form user_com
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
DATA: gd_repid LIKE sy-repid,
ref_grid TYPE REF TO cl_gui_alv_grid.
DATA :answer TYPE char4.
IF ref_grid IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref_grid.
ENDIF.
IF NOT ref_grid IS INITIAL.
CALL METHOD ref_grid->check_changed_data .
ENDIF.
CASE r_ucomm.
WHEN '&BACK' OR '&EXIT' OR '&EXIT'.
LEAVE TO SCREEN 0.
WHEN OTHERS.
ENDCASE.
rs_selfield-refresh = 'X'.
ENDFORM. "USER_COM
*&---------------------------------------------------------------------*
*& Form frm_change_date
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LV_DATE
*& --> P_0
*& --> P_1
*& --> P_
*& --> P_0
*& <-- LV_ENDAT
*&---------------------------------------------------------------------*
FORM frm_change_date USING pv_date
VALUE(pv_day)
VALUE(pv_months)
VALUE(pv_signum)
VALUE(pv_year)
CHANGING pv_endat.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = pv_date
days = pv_day
months = pv_months
signum = pv_signum
years = pv_year
IMPORTING
calc_date = pv_endat.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_data_jzrq_mx
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_data_jzrq_mx .
DATA:lv_field(18) TYPE c,
lv_index TYPE i.
DATA:lr_struc_descr TYPE REF TO cl_abap_structdescr,
BEGIN OF lt_components OCCURS 40,
name TYPE abap_compdescr-name,
component TYPE sy-tabix,
END OF lt_components.
DATA:lv_waerk TYPE waerk,
lv_racct TYPE racct.
FIELD-SYMBOLS: <ls_component> TYPE abap_compdescr,
<fs> TYPE any.
LOOP AT gt_budat.
lv_index = lv_index + 1.
ASSIGN COMPONENT 'BUDAT' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = gt_budat-budat.
IF p_yb = 'X'.
LOOP AT gt_hkont.
LOOP AT gt_pswsl.
READ TABLE gt_rqmx_yb WITH KEY pswsl = gt_pswsl-pswsl hkont = gt_hkont-hkont budat = gt_budat-budat.
IF sy-subrc EQ 0.
lv_field = gt_pswsl-pswsl && '_' && gt_hkont-hkont.
ASSIGN COMPONENT lv_field OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = gt_rqmx_yb-wrbtr.
ENDIF.
ENDLOOP.
ENDLOOP.
ELSEIF p_bwb = 'X'.
LOOP AT gt_hkont..
LOOP AT gt_pswsl.
READ TABLE gt_rqmx_bwb WITH KEY pswsl = gt_pswsl-pswsl hkont = gt_hkont-hkont budat = gt_budat-budat.
IF sy-subrc EQ 0 .
lv_field = gt_pswsl-pswsl && '_' && gt_hkont-hkont.
ASSIGN COMPONENT lv_field OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = gt_rqmx_bwb-dmbtr.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.
APPEND <dyn_wa> TO <dyn_table>.
CLEAR:<dyn_wa>.
ENDLOOP.
"获取日期合计和日均
ASSIGN LOCAL COPY OF INITIAL LINE OF <dyn_table> TO <fs>.
lr_struc_descr ?= cl_abap_typedescr=>describe_by_data( <fs> ).
LOOP AT lr_struc_descr->components ASSIGNING <ls_component>.
lt_components-component = sy-tabix.
lt_components-name = <ls_component>-name.
APPEND lt_components.
ENDLOOP.
SORT lt_components BY name.
LOOP AT lt_components INTO DATA(lw_components).
CLEAR:lv_waerk,lv_racct.
ASSIGN COMPONENT 'BUDAT' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = '合计'.
SPLIT lw_components-name AT '_' INTO lv_waerk lv_racct.
LOOP AT gt_rqhj INTO DATA(lw_rqhj) WHERE rtcur = lv_waerk AND racct = lv_racct..
IF p_bwb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_rqhj-dmbtr.
ELSEIF p_yb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_rqhj-wrbtr.
ENDIF.
ENDLOOP.
ENDLOOP.
IF gt_rqhj[] IS NOT INITIAL.
APPEND <dyn_wa> TO <dyn_table>.
CLEAR:<dyn_wa>.
ENDIF.
LOOP AT lt_components INTO lw_components.
CLEAR:lv_waerk,lv_racct.
ASSIGN COMPONENT 'BUDAT' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = '每日平均'.
SPLIT lw_components-name AT '_' INTO lv_waerk lv_racct.
LOOP AT gt_rqhj INTO lw_rqhj WHERE rtcur = lv_waerk AND racct = lv_racct..
IF p_bwb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_rqhj-dmbtr / lv_index.
ELSEIF p_yb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_rqhj-wrbtr / lv_index.
ENDIF.
ENDLOOP.
ENDLOOP.
IF gt_rqhj[] IS NOT INITIAL.
APPEND <dyn_wa> TO <dyn_table>.
CLEAR:<dyn_wa>.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_data_jzrq_hz
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_data_jzrq_hz .
DATA:lv_field(18) TYPE c,
lv_index TYPE i.
DATA:lr_struc_descr TYPE REF TO cl_abap_structdescr,
BEGIN OF lt_components OCCURS 40,
name TYPE abap_compdescr-name,
component TYPE sy-tabix,
END OF lt_components.
DATA:lv_waerk TYPE waerk,
lv_racct TYPE racct.
FIELD-SYMBOLS: <ls_component> TYPE abap_compdescr,
<fs> TYPE any.
LOOP AT gt_budat.
lv_index = lv_index + 1.
ASSIGN COMPONENT 'BUDAT' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = gt_budat-budat.
LOOP AT gt_pswsl.
READ TABLE gt_rqhz WITH KEY budat = gt_budat-budat pswsl = gt_pswsl-pswsl.
IF sy-subrc EQ 0.
ASSIGN COMPONENT gt_pswsl-pswsl OF STRUCTURE <dyn_wa> TO <dyn_field> .
IF p_bwb = 'X'.
<dyn_field> = gt_rqhz-dmbtr.
ELSEIF p_yb = 'X'.
<dyn_field> = gt_rqhz-wrbtr.
ENDIF.
ENDIF.
ENDLOOP.
APPEND <dyn_wa> TO <dyn_table>.
CLEAR:<dyn_wa>.
ENDLOOP.
"获取日期合计和日均
ASSIGN LOCAL COPY OF INITIAL LINE OF <dyn_table> TO <fs>.
lr_struc_descr ?= cl_abap_typedescr=>describe_by_data( <fs> ).
LOOP AT lr_struc_descr->components ASSIGNING <ls_component>.
lt_components-component = sy-tabix.
lt_components-name = <ls_component>-name.
APPEND lt_components.
ENDLOOP.
SORT lt_components BY name.
LOOP AT lt_components INTO DATA(lw_components).
CLEAR:lv_waerk,lv_racct.
ASSIGN COMPONENT 'BUDAT' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = '合计'.
lv_waerk = lw_components-name.
LOOP AT gt_rqhj INTO DATA(lw_rqhj) WHERE rtcur = lv_waerk AND racct = ''.
IF p_bwb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_rqhj-dmbtr.
ELSEIF p_yb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_rqhj-wrbtr.
ENDIF.
ENDLOOP.
ENDLOOP.
IF gt_rqhj[] IS NOT INITIAL.
APPEND <dyn_wa> TO <dyn_table>.
CLEAR:<dyn_wa>.
ENDIF.
LOOP AT lt_components INTO lw_components.
CLEAR:lv_waerk,lv_racct.
ASSIGN COMPONENT 'BUDAT' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = '每日平均'.
lv_waerk = lw_components-name.
LOOP AT gt_rqhj INTO lw_rqhj WHERE rtcur = lv_waerk AND racct = ''.
IF p_bwb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_rqhj-dmbtr / lv_index.
ELSEIF p_yb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_rqhj-wrbtr / lv_index.
ENDIF.
ENDLOOP.
ENDLOOP.
IF gt_rqhj[] IS NOT INITIAL.
APPEND <dyn_wa> TO <dyn_table>.
CLEAR:<dyn_wa>.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_get_rqqc_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LT_BSEG
*& --> LV_QZDAT
*&---------------------------------------------------------------------*
FORM frm_get_rqqc_data TABLES pt_bseg STRUCTURE bseg
USING pv_qzdat.
DATA:lv_num_char TYPE char2,
lv_month TYPE char2,
lv_num TYPE numc3,
lv_hslvt TYPE faglflext-hslvt,
lv_tslvt TYPE faglflext-tslvt,
lv_hsl TYPE faglflext-hslvt,
lv_hsl_temp TYPE faglflext-hslvt,
lv_tsl TYPE faglflext-tslvt,
lv_tsl_temp TYPE faglflext-tslvt,
lv_field_hsl TYPE string,
lv_field_tsl TYPE string.
FIELD-SYMBOLS: <fs_any_hsl> TYPE any,
<fs_any_tsl> TYPE any.
SELECT * INTO TABLE @DATA(lt_faglflext)
FROM faglflext
FOR ALL ENTRIES IN @pt_bseg
WHERE racct EQ @pt_bseg-hkont AND
rbukrs EQ @p_bukrs AND
racct IN @s_racct AND
ryear EQ @pv_qzdat+0(4).
lv_month = pv_qzdat+4(2).
LOOP AT lt_faglflext INTO DATA(lw_faglflext).
CLEAR:lv_num_char,lv_hslvt,lv_tslvt,lv_hsl_temp,lv_field_hsl,lv_field_tsl.
lv_hslvt = lw_faglflext-hslvt.
lv_tslvt = lw_faglflext-tslvt.
DO .
CLEAR:lv_hsl,lv_tsl.
lv_num_char = lv_num_char + 1.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_num_char
IMPORTING
output = lv_num_char.
CONCATENATE 'LW_FAGLFLEXT-HSL' lv_num_char INTO lv_field_hsl.
CONCATENATE 'LW_FAGLFLEXT-TSL' lv_num_char INTO lv_field_tsl.
UNASSIGN:<fs_any_hsl>,<fs_any_tsl>.
ASSIGN (lv_field_hsl) TO <fs_any_hsl>.
IF <fs_any_hsl> IS ASSIGNED.
lv_hsl = <fs_any_hsl>.
ENDIF.
lv_hsl_temp = lv_hsl + lv_hsl_temp.
ASSIGN (lv_field_tsl) TO <fs_any_tsl>.
IF <fs_any_tsl> IS ASSIGNED.
lv_tsl = <fs_any_tsl>.
ENDIF.
lv_tsl_temp = lv_tsl + lv_tsl_temp.
IF lv_num_char = lv_month.
EXIT.
ENDIF.
ENDDO.
lv_hsl_temp = lv_hslvt + lv_hsl_temp.
lv_tsl_temp = lv_tslvt + lv_tsl_temp.
gt_rqqcmx = VALUE #( racct = lw_faglflext-racct
rtcur = lw_faglflext-rtcur
hsl = lv_hsl_temp
tsl = lv_tsl_temp
).
COLLECT gt_rqqcmx.
gt_rqqcmxhz = VALUE #( rtcur = lw_faglflext-rtcur
hsl = lv_hsl_temp
tsl = lv_tsl_temp
).
COLLECT gt_rqqcmxhz.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_get_beginning_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_beginning_data .
DATA:lv_bedat TYPE datum.
SORT gt_budat BY budat .
lv_bedat = gt_budat[ 1 ] .
IF p_mx = 'X'.
LOOP AT gt_hkont.
IF p_yb = 'X'.
LOOP AT gt_rqqcmx WHERE racct = gt_hkont-hkont .
"把期初累计到当前的明细原币
gt_rqmx_yb-budat = lv_bedat.
gt_rqmx_yb-gjahr = lv_bedat+0(4).
gt_rqmx_yb-hkont = gt_hkont-hkont .
gt_rqmx_yb-pswsl = gt_rqqcmx-rtcur.
gt_rqmx_yb-wrbtr = gt_rqqcmx-tsl.
COLLECT gt_rqmx_yb.
"把期初累计到最后的合计金额
gt_rqhj = VALUE #( racct = gt_hkont-hkont
rtcur = gt_rqqcmx-rtcur
dmbtr = gt_rqqcmx-hsl
wrbtr = gt_rqqcmx-tsl ).
COLLECT gt_rqhj.
ENDLOOP.
ELSEIF p_bwb = 'X'.
READ TABLE gt_rqqcmx WITH KEY racct = gt_hkont-hkont .
IF sy-subrc EQ 0.
"把期初累计到当前的明细本位币
gt_rqmx_bwb-budat = lv_bedat.
gt_rqmx_bwb-gjahr = lv_bedat+0(4).
gt_rqmx_bwb-hkont = gt_hkont-hkont ..
gt_rqmx_bwb-pswsl = gt_rqqcmx-rtcur.
gt_rqmx_bwb-dmbtr = gt_rqqcmx-hsl.
COLLECT gt_rqmx_bwb.
"把期初累计到最后的合计金额
gt_rqhj = VALUE #( racct = gt_hkont-hkont
rtcur = gt_rqqcmx-rtcur
dmbtr = gt_rqqcmx-hsl
wrbtr = gt_rqqcmx-tsl ).
COLLECT gt_rqhj.
ENDIF.
ENDIF.
ENDLOOP.
ELSEIF p_hz = 'X'.
LOOP AT gt_pswsl.
IF p_yb = 'X'.
LOOP AT gt_rqqcmxhz WHERE rtcur = gt_pswsl-pswsl.
"把期初累计到当前的汇总
gt_rqhz-budat = lv_bedat.
gt_rqhz-pswsl = gt_pswsl-pswsl.
gt_rqhz-wrbtr = gt_rqqcmxhz-tsl.
gt_rqhz-dmbtr = gt_rqqcmxhz-hsl.
COLLECT gt_rqhz.
"把期初累计到最后的合计金额
gt_rqhj = VALUE #( rtcur = gt_pswsl-pswsl
dmbtr = gt_rqqcmxhz-hsl
wrbtr = gt_rqqcmxhz-tsl ).
COLLECT gt_rqhj.
ENDLOOP.
ELSEIF p_bwb = 'X'.
READ TABLE gt_rqqcmxhz WITH KEY rtcur = 'CNY'.
IF sy-subrc EQ 0.
"把期初累计到当前的汇总
gt_rqhz-budat = lv_bedat.
gt_rqhz-pswsl = gt_pswsl-pswsl.
gt_rqhz-wrbtr = gt_rqqcmxhz-tsl.
gt_rqhz-dmbtr = gt_rqqcmxhz-hsl.
COLLECT gt_rqhz.
"把期初累计到最后的合计金额
gt_rqhj = VALUE #( rtcur = gt_pswsl-pswsl
dmbtr = gt_rqqcmxhz-hsl
wrbtr = gt_rqqcmxhz-tsl ).
COLLECT gt_rqhj.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_EXCEL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_create_excel .
* 启动Excel
CREATE OBJECT lv_excel 'EXCEL.APPLICATION'.
IF sy-subrc <> 0.
WRITE: / '启动Excel失败。'.
STOP.
ENDIF.
CALL METHOD OF
lv_excel
'WORKBOOKS' = lv_workbook.
* 使excel 可视
SET PROPERTY OF lv_excel 'VISIBLE' = 0. "0:不可视,1:可视
SET PROPERTY OF lv_excel 'SHEETSINNEWWORKBOOK' = 1.
"如果是读取excel文件中的内容 则是直接打开工作簿第一页
CALL METHOD OF
lv_workbook
'ADD'.
* 例如:CALL
* METHOD OF EXCEL 'WORKSHEETS' = SHEET EXPORTING #1 = 1.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA_TO_EXCEL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_process_data_to_excel USING p_in_excel TYPE ole2_object
p_in_line TYPE i
p_in_field TYPE any
p_out_cols TYPE i.
DATA: lv_cell TYPE ole2_object.
* 指定单元格
CALL METHOD OF
p_in_excel
'CELLS' = lv_cell
EXPORTING
#1 = p_in_line
#2 = p_out_cols.
* 写入值
SET PROPERTY OF lv_cell
'VALUE' = p_in_field.
p_out_cols = p_out_cols + 1.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_excel
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_excel .
PERFORM frm_create_excel.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_excel_dyn_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_excel_dyn_data .
DATA:lc_dyn_fidld(18) TYPE c.
DATA:lv_hsl LIKE faglflext-hslvt,
lv_hsl_fcode LIKE faglflext-hslvt.
DATA:lv_bedat TYPE datum,
lv_endat TYPE datum.
BREAK-POINT.
CLEAR:lv_hsl.
IF s_jzrq[] IS NOT INITIAL.
IF p_mx = 'X'.
PERFORM frm_set_excel_data_jzrq_mx."日期明细
ELSEIF p_hz = 'X'.
PERFORM frm_set_excel_data_jzrq_hz."日期汇总
ENDIF.
ELSEIF s_jzqj[] IS NOT INITIAL.
IF p_mx = 'X'.
PERFORM frm_set_excel_data_jzqj_mx."期间明细
ELSEIF p_hz = 'X'.
PERFORM frm_set_excel_data_jzqj_hz."期间汇总
ENDIF.
ENDIF.
"GET PROPERTY OF lv_excel 'ACTIVESHEET' = lv_sheet. "激活工作簿
GET PROPERTY OF lv_excel 'ACTIVEWORKBOOK' = lv_workbook. "激活工作区
CALL METHOD OF
lv_workbook
'SAVEAS'
EXPORTING
#1 = gv_xlsname
#2 = 1.
"将excel文件保存
CALL METHOD OF lv_workbook 'CLOSE'. "关闭工作区
CALL METHOD OF
lv_excel
'QUIT'.
"退出excel
*WRITE:/ XLSNAME,'DONE'.
"退出成功,输出done
FREE OBJECT lv_sheet. "释放操作
FREE OBJECT lv_workbook.
FREE OBJECT lv_excel.
MESSAGE '保存成功,路径:' && gv_xlsname TYPE 'S'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_excel_data_jzrq_mx
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_excel_data_jzrq_mx .
DATA:lv_field(18) TYPE c,
lv_index TYPE i.
DATA:lr_struc_descr TYPE REF TO cl_abap_structdescr,
BEGIN OF lt_components OCCURS 40,
name TYPE abap_compdescr-name,
component TYPE sy-tabix,
END OF lt_components.
DATA:lv_waerk TYPE waerk,
lv_racct TYPE racct.
FIELD-SYMBOLS: <ls_component> TYPE abap_compdescr,
<fs> TYPE any.
DATA:lv_row TYPE i VALUE 1,
lv_col TYPE i.
lv_cols = 1.
PERFORM frm_process_data_to_excel USING lv_excel lv_row '日期' lv_cols.
IF p_yb = 'X'.
LOOP AT gt_hkont.
LOOP AT gt_pswsl.
READ TABLE gt_rqmx_yb WITH KEY pswsl = gt_pswsl-pswsl hkont = gt_hkont-hkont .
IF sy-subrc EQ 0.
lv_field = gt_pswsl-pswsl && '_' && gt_hkont-hkont.
PERFORM frm_process_data_to_excel USING lv_excel lv_row lv_field lv_cols.
ENDIF.
ENDLOOP.
ENDLOOP.
ELSEIF p_bwb = 'X'.
LOOP AT gt_hkont..
LOOP AT gt_pswsl.
READ TABLE gt_rqmx_bwb WITH KEY pswsl = gt_pswsl-pswsl hkont = gt_hkont-hkont .
IF sy-subrc EQ 0 .
lv_field = gt_pswsl-pswsl && '_' && gt_hkont-hkont.
PERFORM frm_process_data_to_excel USING lv_excel lv_row lv_field lv_cols.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.
lv_cols = 1.
LOOP AT gt_budat.
lv_row = lv_row + 1.
ASSIGN COMPONENT 'BUDAT' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = gt_budat-budat.
PERFORM frm_process_data_to_excel USING lv_excel lv_row gt_budat-budat lv_cols.
IF p_yb = 'X'.
LOOP AT gt_hkont.
LOOP AT gt_pswsl.
READ TABLE gt_rqmx_yb WITH KEY pswsl = gt_pswsl-pswsl hkont = gt_hkont-hkont budat = gt_budat-budat.
IF sy-subrc EQ 0.
lv_field = gt_pswsl-pswsl && '_' && gt_hkont-hkont.
ASSIGN COMPONENT lv_field OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = gt_rqmx_yb-wrbtr.
PERFORM frm_process_data_to_excel USING lv_excel lv_row gt_rqmx_yb-wrbtr lv_cols.
ENDIF.
ENDLOOP.
ENDLOOP.
ELSEIF p_bwb = 'X'.
LOOP AT gt_hkont..
LOOP AT gt_pswsl.
READ TABLE gt_rqmx_bwb WITH KEY pswsl = gt_pswsl-pswsl hkont = gt_hkont-hkont budat = gt_budat-budat.
IF sy-subrc EQ 0 .
lv_field = gt_pswsl-pswsl && '_' && gt_hkont-hkont.
ASSIGN COMPONENT lv_field OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = gt_rqmx_bwb-dmbtr.
PERFORM frm_process_data_to_excel USING lv_excel lv_row gt_rqmx_bwb-dmbtr lv_cols.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.
APPEND <dyn_wa> TO <dyn_table>.
CLEAR:<dyn_wa>.
lv_cols = 1.
ENDLOOP.
"最后累计金额和日均
ASSIGN LOCAL COPY OF INITIAL LINE OF <dyn_table> TO <fs>.
lr_struc_descr ?= cl_abap_typedescr=>describe_by_data( <fs> ).
LOOP AT lr_struc_descr->components ASSIGNING <ls_component>.
lt_components-component = sy-tabix.
lt_components-name = <ls_component>-name.
APPEND lt_components.
ENDLOOP.
SORT lt_components BY name.
lv_row = lv_row + 1.
lv_cols = 1.
PERFORM frm_process_data_to_excel USING lv_excel lv_row '合计' lv_cols.
lv_cols = 2.
LOOP AT lt_components INTO DATA(lw_components).
CLEAR:lv_waerk,lv_racct.
ASSIGN COMPONENT 'BUDAT' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = '合计'.
SPLIT lw_components-name AT '_' INTO lv_waerk lv_racct.
LOOP AT gt_rqhj INTO DATA(lw_rqhj) WHERE rtcur = lv_waerk AND racct = lv_racct..
IF p_bwb = 'X'.
PERFORM frm_process_data_to_excel USING lv_excel lv_row lw_rqhj-dmbtr lv_cols.
ELSEIF p_yb = 'X'.
PERFORM frm_process_data_to_excel USING lv_excel lv_row lw_rqhj-wrbtr lv_cols.
ENDIF.
ENDLOOP.
ENDLOOP.
lv_row = lv_row + 1.
lv_index = lines( gt_budat ).
lv_cols = 1.
PERFORM frm_process_data_to_excel USING lv_excel lv_row '每日平均' lv_cols.
lv_cols = 2.
LOOP AT lt_components INTO lw_components.
CLEAR:lv_waerk,lv_racct.
ASSIGN COMPONENT 'BUDAT' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = '每日平均'.
SPLIT lw_components-name AT '_' INTO lv_waerk lv_racct.
LOOP AT gt_rqhj INTO lw_rqhj WHERE rtcur = lv_waerk AND racct = lv_racct..
IF p_bwb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_rqhj-dmbtr / lv_index.
PERFORM frm_process_data_to_excel USING lv_excel lv_row <dyn_field> lv_cols.
ELSEIF p_yb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_rqhj-wrbtr / lv_index.
PERFORM frm_process_data_to_excel USING lv_excel lv_row <dyn_field> lv_cols.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_excel_data_jzrq_hz
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_excel_data_jzrq_hz .
DATA:lv_field(18) TYPE c,
lv_index TYPE i.
DATA:lr_struc_descr TYPE REF TO cl_abap_structdescr,
BEGIN OF lt_components OCCURS 40,
name TYPE abap_compdescr-name,
component TYPE sy-tabix,
END OF lt_components.
DATA:lv_waerk TYPE waerk,
lv_racct TYPE racct.
FIELD-SYMBOLS: <ls_component> TYPE abap_compdescr,
<fs> TYPE any.
DATA:lv_row TYPE i VALUE 1,
lv_col TYPE i.
lv_cols = 1.
PERFORM frm_process_data_to_excel USING lv_excel lv_row '日期' lv_cols.
LOOP AT gt_pswsl.
PERFORM frm_process_data_to_excel USING lv_excel lv_row gt_pswsl-pswsl lv_cols.
ENDLOOP.
lv_cols = 1.
LOOP AT gt_budat.
lv_row = lv_row + 1.
ASSIGN COMPONENT 'BUDAT' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = gt_budat-budat.
PERFORM frm_process_data_to_excel USING lv_excel lv_row gt_budat-budat lv_cols.
LOOP AT gt_pswsl.
READ TABLE gt_rqhz WITH KEY budat = gt_budat-budat pswsl = gt_pswsl-pswsl.
IF sy-subrc EQ 0.
ASSIGN COMPONENT gt_pswsl-pswsl OF STRUCTURE <dyn_wa> TO <dyn_field> .
IF p_bwb = 'X'.
<dyn_field> = gt_rqhz-dmbtr.
ELSEIF p_yb = 'X'.
<dyn_field> = gt_rqhz-wrbtr.
ENDIF.
PERFORM frm_process_data_to_excel USING lv_excel lv_row <dyn_field> lv_cols.
ENDIF.
ENDLOOP.
APPEND <dyn_wa> TO <dyn_table>.
CLEAR:<dyn_wa>.
lv_cols = 1.
ENDLOOP.
"获取日期合计和日均
ASSIGN LOCAL COPY OF INITIAL LINE OF <dyn_table> TO <fs>.
lr_struc_descr ?= cl_abap_typedescr=>describe_by_data( <fs> ).
LOOP AT lr_struc_descr->components ASSIGNING <ls_component>.
lt_components-component = sy-tabix.
lt_components-name = <ls_component>-name.
APPEND lt_components.
ENDLOOP.
SORT lt_components BY name.
lv_row = lv_row + 1.
lv_cols = 1.
PERFORM frm_process_data_to_excel USING lv_excel lv_row '合计' lv_cols.
lv_cols = 2.
LOOP AT lt_components INTO DATA(lw_components).
CLEAR:lv_waerk,lv_racct.
ASSIGN COMPONENT 'BUDAT' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = '合计'.
lv_waerk = lw_components-name.
LOOP AT gt_rqhj INTO DATA(lw_rqhj) WHERE rtcur = lv_waerk AND racct = ''.
IF p_bwb = 'X'.
PERFORM frm_process_data_to_excel USING lv_excel lv_row lw_rqhj-dmbtr lv_cols.
ELSEIF p_yb = 'X'.
PERFORM frm_process_data_to_excel USING lv_excel lv_row lw_rqhj-wrbtr lv_cols.
ENDIF.
ENDLOOP.
ENDLOOP.
lv_row = lv_row + 1.
lv_index = lines( gt_budat ).
lv_cols = 1.
PERFORM frm_process_data_to_excel USING lv_excel lv_row '每日平均' lv_cols.
lv_cols = 2.
LOOP AT lt_components INTO lw_components.
CLEAR:lv_waerk,lv_racct.
lv_waerk = lw_components-name.
LOOP AT gt_rqhj INTO lw_rqhj WHERE rtcur = lv_waerk AND racct = ''.
IF p_bwb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_rqhj-dmbtr / lv_index.
PERFORM frm_process_data_to_excel USING lv_excel lv_row <dyn_field> lv_cols.
ELSEIF p_yb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_rqhj-wrbtr / lv_index.
PERFORM frm_process_data_to_excel USING lv_excel lv_row <dyn_field> lv_cols.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_download_excel
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_download_excel CHANGING pv_path TYPE string..
DATA: lv_filename TYPE string,
lv_path TYPE string.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = '下载文件'
file_filter = '*.xls'
CHANGING
filename = lv_filename
path = lv_path
fullpath = pv_path
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_data_jzqj_mx
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_data_jzqj_mx .
DATA:lv_field(18) TYPE c,
lv_index TYPE i.
DATA:lr_struc_descr TYPE REF TO cl_abap_structdescr,
BEGIN OF lt_components OCCURS 40,
name TYPE abap_compdescr-name,
component TYPE sy-tabix,
END OF lt_components.
DATA:lv_waerk TYPE waerk,
lv_racct TYPE racct.
FIELD-SYMBOLS: <ls_component> TYPE abap_compdescr,
<fs> TYPE any.
LOOP AT gt_period.
lv_index = lv_index + 1.
ASSIGN COMPONENT 'YMONTH' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = gt_period-ymonth.
IF p_yb = 'X'.
LOOP AT gt_hkont..
LOOP AT gt_pswsl.
READ TABLE gt_qjmx_yb WITH KEY rtcur = gt_pswsl-pswsl racct = gt_hkont-hkont ymonth = gt_period-ymonth.
IF sy-subrc EQ 0.
lv_field = gt_pswsl-pswsl && '_' && gt_hkont-hkont.
ASSIGN COMPONENT lv_field OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = gt_qjmx_yb-wrbtr.
ENDIF.
ENDLOOP.
ENDLOOP.
ELSEIF p_bwb = 'X'.
LOOP AT gt_hkont..
LOOP AT gt_pswsl.
READ TABLE gt_qjmx_bwb WITH KEY rtcur = gt_pswsl-pswsl racct = gt_hkont-hkont ymonth = gt_period-ymonth.
IF sy-subrc EQ 0 .
lv_field = gt_pswsl-pswsl && '_' && gt_hkont-hkont.
ASSIGN COMPONENT lv_field OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = gt_qjmx_bwb-dmbtr.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.
APPEND <dyn_wa> TO <dyn_table>.
CLEAR:<dyn_wa>.
ENDLOOP.
"获取期间和月均
ASSIGN LOCAL COPY OF INITIAL LINE OF <dyn_table> TO <fs>.
lr_struc_descr ?= cl_abap_typedescr=>describe_by_data( <fs> ).
LOOP AT lr_struc_descr->components ASSIGNING <ls_component>.
lt_components-component = sy-tabix.
lt_components-name = <ls_component>-name.
APPEND lt_components.
ENDLOOP.
SORT lt_components BY name.
LOOP AT lt_components INTO DATA(lw_components).
CLEAR:lv_waerk,lv_racct.
ASSIGN COMPONENT 'YMONTH' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = '合计'.
SPLIT lw_components-name AT '_' INTO lv_waerk lv_racct.
LOOP AT gt_qjhj INTO DATA(lw_qjhj) WHERE rtcur = lv_waerk AND racct = lv_racct..
IF p_bwb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_qjhj-dmbtr.
ELSEIF p_yb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_qjhj-wrbtr.
ENDIF.
ENDLOOP.
ENDLOOP.
IF gt_qjhj[] IS NOT INITIAL.
APPEND <dyn_wa> TO <dyn_table>.
CLEAR:<dyn_wa>.
ENDIF.
LOOP AT lt_components INTO lw_components.
CLEAR:lv_waerk,lv_racct.
ASSIGN COMPONENT 'YMONTH' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = '月度平均'.
SPLIT lw_components-name AT '_' INTO lv_waerk lv_racct.
LOOP AT gt_qjhj INTO lw_qjhj WHERE rtcur = lv_waerk AND racct = lv_racct..
IF p_bwb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_qjhj-dmbtr / lv_index.
ELSEIF p_yb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_qjhj-wrbtr / lv_index.
ENDIF.
ENDLOOP.
ENDLOOP.
IF gt_qjhj[] IS NOT INITIAL.
APPEND <dyn_wa> TO <dyn_table>.
CLEAR:<dyn_wa>.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_data_jzqj_hz
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_data_jzqj_hz .
DATA:lv_field(18) TYPE c,
lv_index TYPE i.
DATA:lr_struc_descr TYPE REF TO cl_abap_structdescr,
BEGIN OF lt_components OCCURS 40,
name TYPE abap_compdescr-name,
component TYPE sy-tabix,
END OF lt_components.
DATA:lv_waerk TYPE waerk,
lv_racct TYPE racct.
FIELD-SYMBOLS: <ls_component> TYPE abap_compdescr,
<fs> TYPE any.
LOOP AT gt_period.
lv_index = lv_index + 1.
ASSIGN COMPONENT 'YMONTH' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = gt_period-ymonth.
LOOP AT gt_pswsl.
READ TABLE gt_qjhz WITH KEY ymonth = gt_period-ymonth rtcur = gt_pswsl-pswsl.
IF sy-subrc EQ 0.
ASSIGN COMPONENT gt_pswsl-pswsl OF STRUCTURE <dyn_wa> TO <dyn_field> .
IF p_bwb = 'X'.
<dyn_field> = gt_qjhz-dmbtr.
ELSEIF p_yb = 'X'.
<dyn_field> = gt_qjhz-wrbtr.
ENDIF.
ENDIF.
ENDLOOP.
APPEND <dyn_wa> TO <dyn_table>.
CLEAR:<dyn_wa>.
ENDLOOP.
"获取期间和月均
ASSIGN LOCAL COPY OF INITIAL LINE OF <dyn_table> TO <fs>.
lr_struc_descr ?= cl_abap_typedescr=>describe_by_data( <fs> ).
LOOP AT lr_struc_descr->components ASSIGNING <ls_component>.
lt_components-component = sy-tabix.
lt_components-name = <ls_component>-name.
APPEND lt_components.
ENDLOOP.
SORT lt_components BY name.
LOOP AT lt_components INTO DATA(lw_components).
CLEAR:lv_waerk,lv_racct.
ASSIGN COMPONENT 'YMONTH' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = '合计'.
SPLIT lw_components-name AT '_' INTO lv_waerk lv_racct.
LOOP AT gt_qjhj INTO DATA(lw_qjhj) WHERE rtcur = lv_waerk AND racct = lv_racct..
IF p_bwb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_qjhj-dmbtr.
ELSEIF p_yb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_qjhj-wrbtr.
ENDIF.
ENDLOOP.
ENDLOOP.
IF gt_qjhj[] IS NOT INITIAL.
APPEND <dyn_wa> TO <dyn_table>.
CLEAR:<dyn_wa>.
ENDIF.
LOOP AT lt_components INTO lw_components.
CLEAR:lv_waerk,lv_racct.
ASSIGN COMPONENT 'YMONTH' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = '月度平均'.
SPLIT lw_components-name AT '_' INTO lv_waerk lv_racct.
LOOP AT gt_qjhj INTO lw_qjhj WHERE rtcur = lv_waerk AND racct = lv_racct..
IF p_bwb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_qjhj-dmbtr / lv_index.
ELSEIF p_yb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_qjhj-wrbtr / lv_index.
ENDIF.
ENDLOOP.
ENDLOOP.
IF gt_qjhj[] IS NOT INITIAL.
APPEND <dyn_wa> TO <dyn_table>.
CLEAR:<dyn_wa>.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_excel_data_jzqj_mx
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_excel_data_jzqj_mx .
DATA:lv_field(18) TYPE c,
lv_index TYPE i.
DATA:lr_struc_descr TYPE REF TO cl_abap_structdescr,
BEGIN OF lt_components OCCURS 40,
name TYPE abap_compdescr-name,
component TYPE sy-tabix,
END OF lt_components.
DATA:lv_waerk TYPE waerk,
lv_racct TYPE racct.
FIELD-SYMBOLS: <ls_component> TYPE abap_compdescr,
<fs> TYPE any.
DATA:lv_row TYPE i VALUE 1,
lv_col TYPE i.
lv_cols = 1.
PERFORM frm_process_data_to_excel USING lv_excel lv_row '期间' lv_cols.
IF p_yb = 'X'.
LOOP AT gt_hkont.
LOOP AT gt_pswsl.
READ TABLE gt_qjmx_yb WITH KEY rtcur = gt_pswsl-pswsl racct = gt_hkont-hkont .
IF sy-subrc EQ 0.
lv_field = gt_pswsl-pswsl && '_' && gt_hkont-hkont.
PERFORM frm_process_data_to_excel USING lv_excel lv_row lv_field lv_cols.
ENDIF.
ENDLOOP.
ENDLOOP.
ELSEIF p_bwb = 'X'.
LOOP AT gt_hkont.
LOOP AT gt_pswsl.
READ TABLE gt_qjmx_bwb WITH KEY rtcur = gt_pswsl-pswsl racct = gt_hkont-hkont .
IF sy-subrc EQ 0 .
lv_field = gt_pswsl-pswsl && '_' && gt_hkont-hkont.
PERFORM frm_process_data_to_excel USING lv_excel lv_row lv_field lv_cols.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.
lv_cols = 1.
LOOP AT gt_period.
lv_row = lv_row + 1.
lv_index = lv_index + 1.
ASSIGN COMPONENT 'YMONTH' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = gt_period-ymonth.
PERFORM frm_process_data_to_excel USING lv_excel lv_row gt_period-ymonth lv_cols.
IF p_yb = 'X'.
LOOP AT gt_hkont.
LOOP AT gt_pswsl.
READ TABLE gt_qjmx_yb WITH KEY rtcur = gt_pswsl-pswsl racct = gt_hkont-hkont ymonth = gt_period-ymonth.
IF sy-subrc EQ 0.
lv_field = gt_pswsl-pswsl && '_' && gt_hkont-hkont.
ASSIGN COMPONENT lv_field OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = gt_qjmx_yb-wrbtr.
PERFORM frm_process_data_to_excel USING lv_excel lv_row <dyn_field> lv_cols.
ENDIF.
ENDLOOP.
ENDLOOP.
ELSEIF p_bwb = 'X'.
LOOP AT gt_hkont..
LOOP AT gt_pswsl.
READ TABLE gt_qjmx_bwb WITH KEY rtcur = gt_pswsl-pswsl racct = gt_hkont-hkont ymonth = gt_period-ymonth.
IF sy-subrc EQ 0 .
lv_field = gt_pswsl-pswsl && '_' && gt_hkont-hkont.
ASSIGN COMPONENT lv_field OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = gt_qjmx_bwb-dmbtr.
PERFORM frm_process_data_to_excel USING lv_excel lv_row <dyn_field> lv_cols.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.
APPEND <dyn_wa> TO <dyn_table>.
CLEAR:<dyn_wa>.
lv_cols = 1.
ENDLOOP.
ASSIGN LOCAL COPY OF INITIAL LINE OF <dyn_table> TO <fs>.
lr_struc_descr ?= cl_abap_typedescr=>describe_by_data( <fs> ).
LOOP AT lr_struc_descr->components ASSIGNING <ls_component>.
lt_components-component = sy-tabix.
lt_components-name = <ls_component>-name.
APPEND lt_components.
ENDLOOP.
SORT lt_components BY name.
lv_row = lv_row + 1.
lv_cols = 1.
PERFORM frm_process_data_to_excel USING lv_excel lv_row '合计' lv_cols.
lv_cols = 2.
LOOP AT lt_components INTO DATA(lw_components).
CLEAR:lv_waerk,lv_racct.
ASSIGN COMPONENT 'YMONTH' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = '合计'.
SPLIT lw_components-name AT '_' INTO lv_waerk lv_racct.
LOOP AT gt_qjhj INTO DATA(lw_qjhj) WHERE rtcur = lv_waerk AND racct = lv_racct..
IF p_bwb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_qjhj-dmbtr.
PERFORM frm_process_data_to_excel USING lv_excel lv_row <dyn_field> lv_cols.
ELSEIF p_yb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_qjhj-wrbtr.
PERFORM frm_process_data_to_excel USING lv_excel lv_row <dyn_field> lv_cols.
ENDIF.
ENDLOOP.
ENDLOOP.
lv_row = lv_row + 1.
lv_cols = 1.
PERFORM frm_process_data_to_excel USING lv_excel lv_row '月度平均' lv_cols.
lv_cols = 2.
LOOP AT lt_components INTO lw_components.
CLEAR:lv_waerk,lv_racct.
ASSIGN COMPONENT 'YMONTH' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = '月度平均'.
SPLIT lw_components-name AT '_' INTO lv_waerk lv_racct.
LOOP AT gt_qjhj INTO lw_qjhj WHERE rtcur = lv_waerk AND racct = lv_racct..
IF p_bwb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_qjhj-dmbtr / lv_index.
PERFORM frm_process_data_to_excel USING lv_excel lv_row <dyn_field> lv_cols.
ELSEIF p_yb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_qjhj-wrbtr / lv_index.
PERFORM frm_process_data_to_excel USING lv_excel lv_row <dyn_field> lv_cols.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_excel_data_jzqj_hz
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_excel_data_jzqj_hz .
DATA:lv_field(18) TYPE c,
lv_index TYPE i.
DATA:lr_struc_descr TYPE REF TO cl_abap_structdescr,
BEGIN OF lt_components OCCURS 40,
name TYPE abap_compdescr-name,
component TYPE sy-tabix,
END OF lt_components.
DATA:lv_waerk TYPE waerk,
lv_racct TYPE racct.
FIELD-SYMBOLS: <ls_component> TYPE abap_compdescr,
<fs> TYPE any.
DATA:lv_row TYPE i VALUE 1,
lv_col TYPE i.
lv_cols = 1.
PERFORM frm_process_data_to_excel USING lv_excel lv_row '期间' lv_cols.
LOOP AT gt_pswsl.
PERFORM frm_process_data_to_excel USING lv_excel lv_row gt_pswsl-pswsl lv_cols.
ENDLOOP.
lv_cols = 1.
LOOP AT gt_period.
lv_row = lv_row + 1.
lv_index = lv_index + 1.
ASSIGN COMPONENT 'YMONTH' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = gt_period-ymonth.
PERFORM frm_process_data_to_excel USING lv_excel lv_row gt_period-ymonth lv_cols.
LOOP AT gt_pswsl.
READ TABLE gt_qjhz WITH KEY ymonth = gt_period-ymonth rtcur = gt_pswsl-pswsl.
IF sy-subrc EQ 0.
ASSIGN COMPONENT gt_pswsl-pswsl OF STRUCTURE <dyn_wa> TO <dyn_field> .
IF p_bwb = 'X'.
<dyn_field> = gt_qjhz-dmbtr.
ELSEIF p_yb = 'X'.
<dyn_field> = gt_qjhz-wrbtr.
ENDIF.
PERFORM frm_process_data_to_excel USING lv_excel lv_row <dyn_field> lv_cols.
ENDIF.
ENDLOOP.
APPEND <dyn_wa> TO <dyn_table>.
CLEAR:<dyn_wa>.
lv_cols = 1.
ENDLOOP.
ASSIGN LOCAL COPY OF INITIAL LINE OF <dyn_table> TO <fs>.
lr_struc_descr ?= cl_abap_typedescr=>describe_by_data( <fs> ).
LOOP AT lr_struc_descr->components ASSIGNING <ls_component>.
lt_components-component = sy-tabix.
lt_components-name = <ls_component>-name.
APPEND lt_components.
ENDLOOP.
SORT lt_components BY name.
lv_row = lv_row + 1.
lv_cols = 1.
PERFORM frm_process_data_to_excel USING lv_excel lv_row '合计' lv_cols.
lv_cols = 2.
LOOP AT lt_components INTO DATA(lw_components).
CLEAR:lv_waerk,lv_racct.
ASSIGN COMPONENT 'YMONTH' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = '合计'.
SPLIT lw_components-name AT '_' INTO lv_waerk lv_racct.
LOOP AT gt_qjhj INTO DATA(lw_qjhj) WHERE rtcur = lv_waerk AND racct = lv_racct..
IF p_bwb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_qjhj-dmbtr.
ELSEIF p_yb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_qjhj-wrbtr.
ENDIF.
PERFORM frm_process_data_to_excel USING lv_excel lv_row <dyn_field> lv_cols.
ENDLOOP.
ENDLOOP.
lv_row = lv_row + 1.
lv_cols = 1.
PERFORM frm_process_data_to_excel USING lv_excel lv_row '月度平均' lv_cols.
lv_cols = 2.
LOOP AT lt_components INTO lw_components.
CLEAR:lv_waerk,lv_racct.
ASSIGN COMPONENT 'YMONTH' OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = '月度平均'.
SPLIT lw_components-name AT '_' INTO lv_waerk lv_racct.
LOOP AT gt_qjhj INTO lw_qjhj WHERE rtcur = lv_waerk AND racct = lv_racct..
IF p_bwb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_qjhj-dmbtr / lv_index.
ELSEIF p_yb = 'X'.
ASSIGN COMPONENT lw_components-name OF STRUCTURE <dyn_wa> TO <dyn_field> .
<dyn_field> = lw_qjhj-wrbtr / lv_index.
ENDIF.
PERFORM frm_process_data_to_excel USING lv_excel lv_row <dyn_field> lv_cols.
ENDLOOP.
ENDLOOP.
ENDFORM.