Building a Dynamic Table in ALV Report - SAP ABAP
Building a Dynamic Table in ALV Report - SAP ABAP
1. Data Declaration and Selection Screen
FIELD-SYMBOLS : <dyn_table> TYPE STANDARD TABLE,
<dyn_wa>,
<fs1>.
DATA: new_table TYPE REF TO data,
new_line TYPE REF TO data.
DATA: fieldname(20) TYPE c,
fieldvalue(60) TYPE c.
DATA: it_fldcat TYPE lvc_t_fcat,
wa_fldcat TYPE lvc_s_fcat,
gs_layout1 TYPE lvc_s_layo.
DATA: v_date TYPE acdoca-budat.
DATA: daysbetween TYPE i.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
s_bukrs FOR acdoca-rbukrs OBLIGATORY NO-EXTENSION NO INTERVALS,
s_racct FOR acdoca-racct,
s_budat FOR acdoca-budat OBLIGATORY. "This is the field we'll be using to build the dynamic ALV
SELECTION-SCREEN END OF BLOCK b1.
2. Build Dynamic Table
CLEAR wa_fldcat.
wa_fldcat-fieldname = 'RACCT'.
wa_fldcat-coltext = 'G/L Account'.
wa_fldcat-datatype = 'CHAR'.
wa_fldcat-outputlen = '10'.
wa_fldcat-key = 'X'.
APPEND wa_fldcat TO it_fldcat.
CLEAR wa_fldcat.
wa_fldcat-fieldname = 'TXT50'.
wa_fldcat-coltext = 'G/L Account Name'.
wa_fldcat-datatype = 'CHAR'.
wa_fldcat-outputlen = '50'.
wa_fldcat-key = 'X'.
APPEND wa_fldcat TO it_fldcat.
CLEAR wa_fldcat.
wa_fldcat-fieldname = 'BEGINNING'.
wa_fldcat-coltext = 'Beginning Balance'.
wa_fldcat-datatype = 'CURR'.
wa_fldcat-outputlen = '23'.
wa_fldcat-cfieldname = 'RWCUR'.
wa_fldcat-key = 'X'.
APPEND wa_fldcat TO it_fldcat.
CLEAR wa_fldcat.
wa_fldcat-fieldname = 'RWCUR'.
wa_fldcat-coltext = 'Currency'.
wa_fldcat-outputlen = '5'.
wa_fldcat-key = 'X'.
APPEND wa_fldcat TO it_fldcat.
daysbetween = s_budat-high - s_budat-low.
v_date = s_budat-low.
DO daysbetween + 1 TIMES.
CONCATENATE v_date+6(2) v_date+4(2) v_date(4) INTO lv_datestr SEPARATED BY '-'.
CLEAR wa_fldcat.
CONCATENATE lv_datestr '_BALANCE' INTO wa_fldcat-fieldname.
CONCATENATE 'Balance-' lv_datestr INTO wa_fldcat-coltext.
wa_fldcat-datatype = 'CURR'.
wa_fldcat-cfieldname = 'RWCUR'.
wa_fldcat-outputlen = '23'.
wa_fldcat-do_sum = 'X'.
APPEND wa_fldcat TO it_fldcat.
v_date = v_date + 1.
ENDDO.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fldcat
IMPORTING
ep_table = new_table
EXCEPTIONS
generate_subpool_dir_full = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ASSIGN new_table->* TO <dyn_table>.
CREATE DATA new_line LIKE LINE OF <dyn_table>.
ASSIGN new_line->* TO <dyn_wa>.
ENDFORM.
3. Build the Data Into the ALV
SORT lt_data BY racct rwcur.
SORT lt_data2 BY racct rwcur budat.
DELETE ADJACENT DUPLICATES FROM lt_data COMPARING racct rwcur.
LOOP AT lt_data ASSIGNING FIELD-SYMBOL(<fs_data>).
CLEAR <dyn_wa>.
CLEAR: fieldname, fieldvalue.
fieldname = 'RACCT'.
fieldvalue = <fs_data>-racct.
CONDENSE fieldvalue.
ASSIGN COMPONENT fieldname OF STRUCTURE <dyn_wa> TO <fs1>.
IF sy-subrc = 0.
<fs1> = fieldvalue.
ENDIF.
CLEAR: fieldname, fieldvalue.
fieldname = 'TXT50'.
fieldvalue = <fs_data>-txt50.
CONDENSE fieldvalue.
ASSIGN COMPONENT fieldname OF STRUCTURE <dyn_wa> TO <fs1>.
IF sy-subrc = 0.
<fs1> = fieldvalue.
ENDIF.
CLEAR: fieldname, fieldvalue.
fieldname = 'BEGINNING'.
fieldvalue = <fs_data>-beginning.
CONDENSE fieldvalue.
ASSIGN COMPONENT fieldname OF STRUCTURE <dyn_wa> TO <fs1>.
IF sy-subrc = 0.
<fs1> = fieldvalue.
ENDIF.
CLEAR: fieldname, fieldvalue.
fieldname = 'RWCUR'.
fieldvalue = <fs_data>-rwcur.
CONDENSE fieldvalue.
ASSIGN COMPONENT fieldname OF STRUCTURE <dyn_wa> TO <fs1>.
IF sy-subrc = 0.
<fs1> = fieldvalue.
ENDIF.
DATA: lv_last_balance TYPE acdoca-wsl.
lv_last_balance = <fs_data>-beginning.
v_date = s_budat-low.
DO daysbetween + 1 TIMES.
READ TABLE lt_data2 ASSIGNING FIELD-SYMBOL(<fs_data2>)
WITH KEY racct = <fs_data>-racct
rwcur = <fs_data>-rwcur
budat = v_date
BINARY SEARCH.
IF sy-subrc = 0.
lv_last_balance = lv_last_balance + <fs_data2>-balance.
ENDIF.
CONCATENATE v_date+6(2) v_date+4(2) v_date(4)
INTO lv_datestr SEPARATED BY '-'.
CLEAR: fieldname.
fieldname = lv_datestr && '_BALANCE'.
ASSIGN COMPONENT fieldname OF STRUCTURE <dyn_wa> TO <fs1>.
IF sy-subrc = 0.
<fs1> = lv_last_balance.
ENDIF.
v_date = v_date + 1.
ENDDO.
APPEND <dyn_wa> TO <dyn_table>.
ENDLOOP.
ENDFORM.
4. Display the Data into ALV
FORM alv_display.
gs_layout1-cwidth_opt = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout_lvc = gs_layout1
it_fieldcat_lvc = it_fldcat[]
i_default = 'X'
i_save = 'A'
is_variant = gt_variant
i_html_height_top = 15
TABLES
t_outtab = <dyn_table>
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
5. Result
Comments
Post a Comment