01-12-2016 3:31 AM
Hi Gurus,
I want to print alv in a dynamic manner, like below, field should increase dynamically. I tried below
Input
Group Text1 Field1 Field2
25 Iron abc def
25 Iron sss mmm
46 Copper Jack Ran
46 copper Rob Jim
46 copper Sarn Debr
Output
Group Text1 field1 field2 field1 field2 field1 field2
25 Iron abc def sss mmm
46 Copper jack ran rob jim sarn debr
I tried below method, but i dont know how to proceed. Please help.
LOOP AT git_output INTO gwa_output.
READ TABLE <gfs_dyn_table> INTO <gfs_line1> WITH KEY ('PLNNR') = gwa_output-plnnr.
IF sy-subrc = 0.
CONTINUE.
ENDIF.
count = 2.
ASSIGN COMPONENT 'PLNNR' OF STRUCTURE <gfs_line> TO <fs1>.
<fs1> = gwa_output-plnnr.
UNASSIGN <fs1>.
ASSIGN COMPONENT 'PLNAL' OF STRUCTURE <gfs_line> TO <fs1>.
<fs1> = gwa_output-plnal.
UNASSIGN <fs1>.
Endloop.
Then loop again same gt_output to fetch remaining column in dynamic manner,
case wa_flname.
ASSIGN COMPONENT gwa_dyn_fcat-fieldname OF STRUCTURE <gfs_line> TO <fs1>.
ASSIGN COMPONENT wa_flname OF STRUCTURE <gfs_line> TO <fs1>.
if lv_num = 'FIELD9'."WA_FLNAME."
<fs1> = lv_vornr.
UNASSIGN <fs1>.
ELSEif lv_num = 'FIELD10'.
<fs1> = lv_steus.
UNASSIGN <fs1>.
ELSEif lv_num = 'FIELD11'.
<fs1> = lv_ltxa1.
UNASSIGN <fs1>.
ELSEif lv_num = 'FIELD12'.
<fs1> = lv_arbid.
UNASSIGN <fs1>.
endloop.
APPEND <gfs_line> TO <gfs_dyn_table>.
CLEAR: <gfs_line>.
I'm new to this dynamic concept. If anyone tried like this, kindly help on. TIA.
Message was edited by: Matthew Billingham
01-12-2016 10:47 AM
so completely program with alv display.
REPORT ZDEMO2.
TYPE-POOLS:SLIS.
TYPES:BEGIN OF TY_INPUT,
GRP TYPE STRING,
TXT TYPE STRING,
F1 TYPE STRING,
F2 TYPE STRING,
END OF TY_INPUT,
TT_INPUT TYPE STANDARD TABLE OF TY_INPUT.
TYPES:BEGIN OF TY_TIMES,
GRP TYPE STRING,
REC TYPE I,
END OF TY_TIMES,
TT_TIMES TYPE STANDARD TABLE OF TY_TIMES.
DATA:GT_INPUT TYPE TT_INPUT,
GS_INPUT TYPE TY_INPUT.
DATA:GT_TIMES TYPE TT_TIMES,
GS_TIMES TYPE TY_TIMES.
FIELD-SYMBOLS:<GT_FINAL> TYPE STANDARD TABLE,
<GS_FINAL> TYPE ANY.
DATA:GT_DATA TYPE REF TO DATA,
GS_DATA TYPE REF TO DATA.
DATA:LT_STR TYPE STANDARD TABLE OF STRING,
LS_STR TYPE STRING,
LV_NAME TYPE STRING.
DATA:LV_STR TYPE STRING.
FIELD-SYMBOLS:<LV_FIELD> TYPE ANY.
DATA:LV_I TYPE I.
START-OF-SELECTION.
CLEAR GS_INPUT.
GS_INPUT-GRP = '25'.
GS_INPUT-TXT = 'Iron'.
GS_INPUT-F1 = 'abc'.
GS_INPUT-F2 = 'def'.
APPEND GS_INPUT TO GT_INPUT.
CLEAR GS_INPUT.
GS_INPUT-GRP = '25'.
GS_INPUT-TXT = 'Iron'.
GS_INPUT-F1 = 'sss'.
GS_INPUT-F2 = 'mmm'.
APPEND GS_INPUT TO GT_INPUT.
CLEAR GS_INPUT.
GS_INPUT-GRP = '46'.
GS_INPUT-TXT = 'Copper'.
GS_INPUT-F1 = 'Jack'.
GS_INPUT-F2 = 'Ran'.
APPEND GS_INPUT TO GT_INPUT.
CLEAR GS_INPUT.
GS_INPUT-GRP = '46'.
GS_INPUT-TXT = 'Copper'.
GS_INPUT-F1 = 'Rob'.
GS_INPUT-F2 = 'Jim'.
APPEND GS_INPUT TO GT_INPUT.
CLEAR GS_INPUT.
GS_INPUT-GRP = '46'.
GS_INPUT-TXT = 'Copper'.
GS_INPUT-F1 = 'Sarn'.
GS_INPUT-F2 = 'Debr'.
APPEND GS_INPUT TO GT_INPUT.
SORT GT_INPUT BY GRP.
LOOP AT GT_INPUT INTO GS_INPUT.
CLEAR GS_TIMES.
GS_TIMES-GRP = GS_INPUT-GRP.
GS_TIMES-REC = 1.
COLLECT GS_TIMES INTO GT_TIMES.
ENDLOOP.
CLEAR LS_STR.
LS_STR = 'REPORT ZDYN_REP.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'FORM GET_TT_ST CHANGING CT_DATA'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = ' CS_DATA.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'TYPES:BEGIN OF TY_DYNST.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'TYPES:GRP TYPE STRING.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'TYPES:TXT TYPE STRING.'.
APPEND LS_STR TO LT_STR.
SORT GT_TIMES BY REC DESCENDING.
CLEAR GS_TIMES.
READ TABLE GT_TIMES INTO GS_TIMES INDEX 1.
DO GS_TIMES-REC TIMES.
CLEAR LS_STR.
CLEAR LV_STR.
LV_STR = SY-INDEX.
CONCATENATE 'TYPES:FO' LV_STR ' TYPE STRING.' INTO LV_STR RESPECTING BLANKS.
CONDENSE LV_STR.
LS_STR = LV_STR.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
CLEAR LV_STR.
LV_STR = SY-INDEX.
CONCATENATE 'TYPES:FT' LV_STR ' TYPE STRING.' INTO LV_STR RESPECTING BLANKS.
CONDENSE LV_STR.
LS_STR = LV_STR.
APPEND LS_STR TO LT_STR.
ENDDO.
CLEAR LS_STR.
LS_STR = 'TYPES:END OF TY_DYNST.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'CREATE DATA CT_DATA TYPE STANDARD TABLE OF TY_DYNST.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'CREATE DATA CS_DATA TYPE TY_DYNST.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'ENDFORM.'.
APPEND LS_STR TO LT_STR.
CLEAR LV_NAME.
GENERATE SUBROUTINE POOL LT_STR NAME LV_NAME.
IF SY-SUBRC = 0.
PERFORM ('GET_TT_ST') IN PROGRAM (LV_NAME) CHANGING GT_DATA
GS_DATA.
ENDIF.
IF <GT_FINAL> IS NOT ASSIGNED.
ASSIGN GT_DATA->* TO <GT_FINAL>.
ASSIGN GS_DATA->* TO <GS_FINAL>.
ENDIF.
LOOP AT GT_TIMES INTO GS_TIMES.
CLEAR <GS_FINAL>.
UNASSIGN <LV_FIELD>.
ASSIGN COMPONENT 'GRP' OF STRUCTURE <GS_FINAL> TO <LV_FIELD>.
<LV_FIELD> = GS_TIMES-GRP.
LV_I = 0.
LOOP AT GT_INPUT INTO GS_INPUT WHERE GRP = GS_TIMES-GRP.
ASSIGN COMPONENT 'TXT' OF STRUCTURE <GS_FINAL> TO <LV_FIELD>.
<LV_FIELD> = GS_INPUT-TXT.
LV_I = LV_I + 1.
CLEAR LV_STR.
LV_STR = LV_I.
CONCATENATE 'FO' LV_STR INTO LV_STR.
CONDENSE LV_STR NO-GAPS.
ASSIGN COMPONENT LV_STR OF STRUCTURE <GS_FINAL> TO <LV_FIELD>.
<LV_FIELD> = GS_INPUT-F1.
CLEAR LV_STR.
LV_STR = LV_I.
CONCATENATE 'FT' LV_STR INTO LV_STR.
CONDENSE LV_STR NO-GAPS.
ASSIGN COMPONENT LV_STR OF STRUCTURE <GS_FINAL> TO <LV_FIELD>.
<LV_FIELD> = GS_INPUT-F2.
ENDLOOP.
APPEND <GS_FINAL> TO <GT_FINAL>.
ENDLOOP.
DATA:LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'GRP'.
LS_FIELDCAT-SELTEXT_L = 'GRP'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'TXT'.
LS_FIELDCAT-SELTEXT_L = 'TXT'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR GS_TIMES.
READ TABLE GT_TIMES INTO GS_TIMES INDEX 1.
LV_I = 0.
DO GS_TIMES-REC TIMES.
LV_I = LV_I + 1.
CLEAR LV_STR.
LV_STR = LV_I.
CONCATENATE 'FO' LV_STR INTO LV_STR.
CONDENSE LV_STR NO-GAPS.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = LV_STR.
LS_FIELDCAT-SELTEXT_L = LV_STR.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR LV_STR.
LV_STR = LV_I.
CONCATENATE 'FT' LV_STR INTO LV_STR.
CONDENSE LV_STR NO-GAPS.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = LV_STR.
LS_FIELDCAT-SELTEXT_L = LV_STR.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
ENDDO.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IT_FIELDCAT = LT_FIELDCAT
TABLES
T_OUTTAB = <GT_FINAL>
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
01-12-2016 4:21 AM
hi i wrote some program for ur issue.
may be it will be helpfull.
REPORT ZDEMO2.
TYPES:BEGIN OF TY_INPUT,
GRP TYPE STRING,
TXT TYPE STRING,
F1 TYPE STRING,
F2 TYPE STRING,
END OF TY_INPUT,
TT_INPUT TYPE STANDARD TABLE OF TY_INPUT.
TYPES:BEGIN OF TY_TIMES,
GRP TYPE STRING,
REC TYPE I,
END OF TY_TIMES,
TT_TIMES TYPE STANDARD TABLE OF TY_TIMES.
DATA:GT_INPUT TYPE TT_INPUT,
GS_INPUT TYPE TY_INPUT.
DATA:GT_TIMES TYPE TT_TIMES,
GS_TIMES TYPE TY_TIMES.
FIELD-SYMBOLS:<GT_FINAL> TYPE STANDARD TABLE,
<GS_FINAL> TYPE ANY.
DATA:GT_DATA TYPE REF TO DATA,
GS_DATA TYPE REF TO DATA.
DATA:LT_STR TYPE STANDARD TABLE OF STRING,
LS_STR TYPE STRING,
LV_NAME TYPE STRING.
DATA:LV_STR TYPE STRING.
FIELD-SYMBOLS:<LV_FIELD> TYPE ANY.
DATA:LV_I TYPE I.
START-OF-SELECTION.
CLEAR GS_INPUT.
GS_INPUT-GRP = '25'.
GS_INPUT-TXT = 'Iron'.
GS_INPUT-F1 = 'abc'.
GS_INPUT-F2 = 'def'.
APPEND GS_INPUT TO GT_INPUT.
CLEAR GS_INPUT.
GS_INPUT-GRP = '25'.
GS_INPUT-TXT = 'Iron'.
GS_INPUT-F1 = 'sss'.
GS_INPUT-F2 = 'mmm'.
APPEND GS_INPUT TO GT_INPUT.
CLEAR GS_INPUT.
GS_INPUT-GRP = '46'.
GS_INPUT-TXT = 'Copper'.
GS_INPUT-F1 = 'Jack'.
GS_INPUT-F2 = 'Ran'.
APPEND GS_INPUT TO GT_INPUT.
CLEAR GS_INPUT.
GS_INPUT-GRP = '46'.
GS_INPUT-TXT = 'Copper'.
GS_INPUT-F1 = 'Rob'.
GS_INPUT-F2 = 'Jim'.
APPEND GS_INPUT TO GT_INPUT.
CLEAR GS_INPUT.
GS_INPUT-GRP = '46'.
GS_INPUT-TXT = 'Copper'.
GS_INPUT-F1 = 'Sarn'.
GS_INPUT-F2 = 'Debr'.
APPEND GS_INPUT TO GT_INPUT.
SORT GT_INPUT BY GRP.
LOOP AT GT_INPUT INTO GS_INPUT.
CLEAR GS_TIMES.
GS_TIMES-GRP = GS_INPUT-GRP.
GS_TIMES-REC = 1.
COLLECT GS_TIMES INTO GT_TIMES.
ENDLOOP.
CLEAR LS_STR.
LS_STR = 'REPORT ZDYN_REP.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'FORM GET_TT_ST CHANGING CT_DATA'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = ' CS_DATA.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'TYPES:BEGIN OF TY_DYNST.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'TYPES:GRP TYPE STRING.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'TYPES:TXT TYPE STRING.'.
APPEND LS_STR TO LT_STR.
SORT GT_TIMES BY REC DESCENDING.
CLEAR GS_TIMES.
READ TABLE GT_TIMES INTO GS_TIMES INDEX 1.
DO GS_TIMES-REC TIMES.
CLEAR LS_STR.
CLEAR LV_STR.
LV_STR = SY-INDEX.
CONCATENATE 'TYPES:FO' LV_STR ' TYPE STRING.' INTO LV_STR RESPECTING BLANKS.
CONDENSE LV_STR.
LS_STR = LV_STR.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
CLEAR LV_STR.
LV_STR = SY-INDEX.
CONCATENATE 'TYPES:FT' LV_STR ' TYPE STRING.' INTO LV_STR RESPECTING BLANKS.
CONDENSE LV_STR.
LS_STR = LV_STR.
APPEND LS_STR TO LT_STR.
ENDDO.
CLEAR LS_STR.
LS_STR = 'TYPES:END OF TY_DYNST.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'CREATE DATA CT_DATA TYPE STANDARD TABLE OF TY_DYNST.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'CREATE DATA CS_DATA TYPE TY_DYNST.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'ENDFORM.'.
APPEND LS_STR TO LT_STR.
CLEAR LV_NAME.
GENERATE SUBROUTINE POOL LT_STR NAME LV_NAME.
IF SY-SUBRC = 0.
PERFORM ('GET_TT_ST') IN PROGRAM (LV_NAME) CHANGING GT_DATA
GS_DATA.
ENDIF.
IF <GT_FINAL> IS NOT ASSIGNED.
ASSIGN GT_DATA->* TO <GT_FINAL>.
ASSIGN GS_DATA->* TO <GS_FINAL>.
ENDIF.
LOOP AT GT_TIMES INTO GS_TIMES.
CLEAR <GS_FINAL>.
UNASSIGN <LV_FIELD>.
ASSIGN COMPONENT 'GRP' OF STRUCTURE <GS_FINAL> TO <LV_FIELD>.
<LV_FIELD> = GS_TIMES-GRP.
LV_I = 0.
LOOP AT GT_INPUT INTO GS_INPUT WHERE GRP = GS_TIMES-GRP.
ASSIGN COMPONENT 'TXT' OF STRUCTURE <GS_FINAL> TO <LV_FIELD>.
<LV_FIELD> = GS_INPUT-TXT.
LV_I = LV_I + 1.
CLEAR LV_STR.
LV_STR = LV_I.
CONCATENATE 'FO' LV_STR INTO LV_STR.
CONDENSE LV_STR NO-GAPS.
ASSIGN COMPONENT LV_STR OF STRUCTURE <GS_FINAL> TO <LV_FIELD>.
<LV_FIELD> = GS_INPUT-F1.
CLEAR LV_STR.
LV_STR = LV_I.
CONCATENATE 'FT' LV_STR INTO LV_STR.
CONDENSE LV_STR NO-GAPS.
ASSIGN COMPONENT LV_STR OF STRUCTURE <GS_FINAL> TO <LV_FIELD>.
<LV_FIELD> = GS_INPUT-F2.
ENDLOOP.
APPEND <GS_FINAL> TO <GT_FINAL>.
ENDLOOP.
01-12-2016 10:13 AM
Hi Krishna Murthy,
Thanks for your valuable reply. It helps me a lot. I'm learning something new.
But while display in alv, im looping the <gt_final> and taking the field.
DATA : git_dyn_fcat TYPE lvc_t_fcat,
gwa_dyn_fcat TYPE lvc_s_fcat,
git_layout TYPE slis_layout_alv,
git_fieldcat TYPE slis_t_fieldcat_alv,
gwa_fieldcat TYPE slis_fieldcat_alv,
gv_pos TYPE i.
LOOP at <gt_final> INTO <gs_final>.
lv_pos = lv_pos + 1.
gwa_fieldcat-fieldname = 'GRP'.
gwa_fieldcat-seltext_l = 'Group'.
gwa_fieldcat-col_pos = lv_pos.
APPEND gwa_fieldcat TO git_fieldcat.
CLEAR gwa_fieldcat.
lv_pos = lv_pos + 1.
gwa_fieldcat-fieldname = 'TEXT1'.
gwa_fieldcat-seltext_l = 'Text1'.
gwa_fieldcat-col_pos = lv_pos.
APPEND gwa_fieldcat TO git_fieldcat.
CLEAR gwa_fieldcat.
lv_pos = lv_pos + 1.
gwa_fieldcat-fieldname = 'FIELD1'.
gwa_fieldcat-seltext_l = 'Field 1'.
gwa_fieldcat-col_pos = lv_pos.
APPEND gwa_fieldcat TO git_fieldcat.
CLEAR gwa_fieldcat.
lv_pos = lv_pos + 1.
gwa_fieldcat-fieldname = 'TEXT1'.
gwa_fieldcat-seltext_l = 'Text1'.
gwa_fieldcat-col_pos = lv_pos.
APPEND gwa_fieldcat TO git_fieldcat.
CLEAR gwa_fieldcat.
ENDLOOP.
and am passing this git_fieldcat to reuse_alv_grid_display. But it did't show correct column. Is that correct way am doing is?
01-12-2016 10:23 AM
Hi krishna murthy ,
Thanks for your valuable reply. It helped me a lot. I learned something new. Thanks.
But while display in ALV, am facing issue like it not displayed all the column, it repeating the text.
DATA : git_dyn_fcat TYPE lvc_t_fcat,
gwa_dyn_fcat TYPE lvc_s_fcat,
git_layout TYPE slis_layout_alv,
git_fieldcat TYPE slis_t_fieldcat_alv,
gwa_fieldcat TYPE slis_fieldcat_alv,
lv_pos TYPE i.
LOOP at <gt_final> INTO <gs_final>.
lv_pos = lv_pos + 1.
gwa_fieldcat-fieldname = 'GRP'.
gwa_fieldcat-seltext_l = 'Group'.
gwa_fieldcat-col_pos = lv_pos.
APPEND gwa_fieldcat TO git_fieldcat.
CLEAR gwa_fieldcat.
lv_pos = lv_pos + 1.
gwa_fieldcat-fieldname = 'TEXT1'.
gwa_fieldcat-seltext_l = 'Text1'.
gwa_fieldcat-col_pos = lv_pos.
APPEND gwa_fieldcat TO git_fieldcat.
CLEAR gwa_fieldcat.
lv_pos = lv_pos + 1.
gwa_fieldcat-fieldname = 'FIELD1'.
gwa_fieldcat-seltext_l = 'Field 1'.
gwa_fieldcat-col_pos = lv_pos.
APPEND gwa_fieldcat TO git_fieldcat.
CLEAR gwa_fieldcat.
lv_pos = lv_pos + 1.
gwa_fieldcat-fieldname = 'TEXT1'.
gwa_fieldcat-seltext_l = 'Text1'.
gwa_fieldcat-col_pos = lv_pos.
APPEND gwa_fieldcat TO git_fieldcat.
CLEAR gwa_fieldcat.
ENDLOOP.
finally i passing this git_fieldcat to 'reuse_alv_grid_display'.
Whether the way am doing is correct? Please suggest.
01-12-2016 10:40 AM
this is way wrong.
becasue u want find field name through fina table is field symbol.
for field cat.
do following manner.
1. we know which columns are fixed in final field symbol. those are mained in field catalog.
2. for dynmic columns u know starting text and change text .
i will give one example for above program in alv for ur knowledge.
01-12-2016 10:47 AM
FOR only fieldcat
DATA:LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'GRP'.
LS_FIELDCAT-SELTEXT_L = 'GRP'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'TXT'.
LS_FIELDCAT-SELTEXT_L = 'TXT'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR GS_TIMES.
READ TABLE GT_TIMES INTO GS_TIMES INDEX 1.
LV_I = 0.
DO GS_TIMES-REC TIMES.
LV_I = LV_I + 1.
CLEAR LV_STR.
LV_STR = LV_I.
CONCATENATE 'FO' LV_STR INTO LV_STR.
CONDENSE LV_STR NO-GAPS.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = LV_STR.
LS_FIELDCAT-SELTEXT_L = LV_STR.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR LV_STR.
LV_STR = LV_I.
CONCATENATE 'FT' LV_STR INTO LV_STR.
CONDENSE LV_STR NO-GAPS.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = LV_STR.
LS_FIELDCAT-SELTEXT_L = LV_STR.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
ENDDO.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IT_FIELDCAT = LT_FIELDCAT
TABLES
T_OUTTAB = <GT_FINAL>
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
01-12-2016 10:47 AM
so completely program with alv display.
REPORT ZDEMO2.
TYPE-POOLS:SLIS.
TYPES:BEGIN OF TY_INPUT,
GRP TYPE STRING,
TXT TYPE STRING,
F1 TYPE STRING,
F2 TYPE STRING,
END OF TY_INPUT,
TT_INPUT TYPE STANDARD TABLE OF TY_INPUT.
TYPES:BEGIN OF TY_TIMES,
GRP TYPE STRING,
REC TYPE I,
END OF TY_TIMES,
TT_TIMES TYPE STANDARD TABLE OF TY_TIMES.
DATA:GT_INPUT TYPE TT_INPUT,
GS_INPUT TYPE TY_INPUT.
DATA:GT_TIMES TYPE TT_TIMES,
GS_TIMES TYPE TY_TIMES.
FIELD-SYMBOLS:<GT_FINAL> TYPE STANDARD TABLE,
<GS_FINAL> TYPE ANY.
DATA:GT_DATA TYPE REF TO DATA,
GS_DATA TYPE REF TO DATA.
DATA:LT_STR TYPE STANDARD TABLE OF STRING,
LS_STR TYPE STRING,
LV_NAME TYPE STRING.
DATA:LV_STR TYPE STRING.
FIELD-SYMBOLS:<LV_FIELD> TYPE ANY.
DATA:LV_I TYPE I.
START-OF-SELECTION.
CLEAR GS_INPUT.
GS_INPUT-GRP = '25'.
GS_INPUT-TXT = 'Iron'.
GS_INPUT-F1 = 'abc'.
GS_INPUT-F2 = 'def'.
APPEND GS_INPUT TO GT_INPUT.
CLEAR GS_INPUT.
GS_INPUT-GRP = '25'.
GS_INPUT-TXT = 'Iron'.
GS_INPUT-F1 = 'sss'.
GS_INPUT-F2 = 'mmm'.
APPEND GS_INPUT TO GT_INPUT.
CLEAR GS_INPUT.
GS_INPUT-GRP = '46'.
GS_INPUT-TXT = 'Copper'.
GS_INPUT-F1 = 'Jack'.
GS_INPUT-F2 = 'Ran'.
APPEND GS_INPUT TO GT_INPUT.
CLEAR GS_INPUT.
GS_INPUT-GRP = '46'.
GS_INPUT-TXT = 'Copper'.
GS_INPUT-F1 = 'Rob'.
GS_INPUT-F2 = 'Jim'.
APPEND GS_INPUT TO GT_INPUT.
CLEAR GS_INPUT.
GS_INPUT-GRP = '46'.
GS_INPUT-TXT = 'Copper'.
GS_INPUT-F1 = 'Sarn'.
GS_INPUT-F2 = 'Debr'.
APPEND GS_INPUT TO GT_INPUT.
SORT GT_INPUT BY GRP.
LOOP AT GT_INPUT INTO GS_INPUT.
CLEAR GS_TIMES.
GS_TIMES-GRP = GS_INPUT-GRP.
GS_TIMES-REC = 1.
COLLECT GS_TIMES INTO GT_TIMES.
ENDLOOP.
CLEAR LS_STR.
LS_STR = 'REPORT ZDYN_REP.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'FORM GET_TT_ST CHANGING CT_DATA'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = ' CS_DATA.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'TYPES:BEGIN OF TY_DYNST.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'TYPES:GRP TYPE STRING.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'TYPES:TXT TYPE STRING.'.
APPEND LS_STR TO LT_STR.
SORT GT_TIMES BY REC DESCENDING.
CLEAR GS_TIMES.
READ TABLE GT_TIMES INTO GS_TIMES INDEX 1.
DO GS_TIMES-REC TIMES.
CLEAR LS_STR.
CLEAR LV_STR.
LV_STR = SY-INDEX.
CONCATENATE 'TYPES:FO' LV_STR ' TYPE STRING.' INTO LV_STR RESPECTING BLANKS.
CONDENSE LV_STR.
LS_STR = LV_STR.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
CLEAR LV_STR.
LV_STR = SY-INDEX.
CONCATENATE 'TYPES:FT' LV_STR ' TYPE STRING.' INTO LV_STR RESPECTING BLANKS.
CONDENSE LV_STR.
LS_STR = LV_STR.
APPEND LS_STR TO LT_STR.
ENDDO.
CLEAR LS_STR.
LS_STR = 'TYPES:END OF TY_DYNST.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'CREATE DATA CT_DATA TYPE STANDARD TABLE OF TY_DYNST.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'CREATE DATA CS_DATA TYPE TY_DYNST.'.
APPEND LS_STR TO LT_STR.
CLEAR LS_STR.
LS_STR = 'ENDFORM.'.
APPEND LS_STR TO LT_STR.
CLEAR LV_NAME.
GENERATE SUBROUTINE POOL LT_STR NAME LV_NAME.
IF SY-SUBRC = 0.
PERFORM ('GET_TT_ST') IN PROGRAM (LV_NAME) CHANGING GT_DATA
GS_DATA.
ENDIF.
IF <GT_FINAL> IS NOT ASSIGNED.
ASSIGN GT_DATA->* TO <GT_FINAL>.
ASSIGN GS_DATA->* TO <GS_FINAL>.
ENDIF.
LOOP AT GT_TIMES INTO GS_TIMES.
CLEAR <GS_FINAL>.
UNASSIGN <LV_FIELD>.
ASSIGN COMPONENT 'GRP' OF STRUCTURE <GS_FINAL> TO <LV_FIELD>.
<LV_FIELD> = GS_TIMES-GRP.
LV_I = 0.
LOOP AT GT_INPUT INTO GS_INPUT WHERE GRP = GS_TIMES-GRP.
ASSIGN COMPONENT 'TXT' OF STRUCTURE <GS_FINAL> TO <LV_FIELD>.
<LV_FIELD> = GS_INPUT-TXT.
LV_I = LV_I + 1.
CLEAR LV_STR.
LV_STR = LV_I.
CONCATENATE 'FO' LV_STR INTO LV_STR.
CONDENSE LV_STR NO-GAPS.
ASSIGN COMPONENT LV_STR OF STRUCTURE <GS_FINAL> TO <LV_FIELD>.
<LV_FIELD> = GS_INPUT-F1.
CLEAR LV_STR.
LV_STR = LV_I.
CONCATENATE 'FT' LV_STR INTO LV_STR.
CONDENSE LV_STR NO-GAPS.
ASSIGN COMPONENT LV_STR OF STRUCTURE <GS_FINAL> TO <LV_FIELD>.
<LV_FIELD> = GS_INPUT-F2.
ENDLOOP.
APPEND <GS_FINAL> TO <GT_FINAL>.
ENDLOOP.
DATA:LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'GRP'.
LS_FIELDCAT-SELTEXT_L = 'GRP'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'TXT'.
LS_FIELDCAT-SELTEXT_L = 'TXT'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR GS_TIMES.
READ TABLE GT_TIMES INTO GS_TIMES INDEX 1.
LV_I = 0.
DO GS_TIMES-REC TIMES.
LV_I = LV_I + 1.
CLEAR LV_STR.
LV_STR = LV_I.
CONCATENATE 'FO' LV_STR INTO LV_STR.
CONDENSE LV_STR NO-GAPS.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = LV_STR.
LS_FIELDCAT-SELTEXT_L = LV_STR.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR LV_STR.
LV_STR = LV_I.
CONCATENATE 'FT' LV_STR INTO LV_STR.
CONDENSE LV_STR NO-GAPS.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = LV_STR.
LS_FIELDCAT-SELTEXT_L = LV_STR.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
ENDDO.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IT_FIELDCAT = LT_FIELDCAT
TABLES
T_OUTTAB = <GT_FINAL>
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
01-12-2016 12:41 PM
01-12-2016 1:01 PM
Moderator message: I've edited your subject to something more meaningful than the previous "ALV". Please ensure in future that your subjects give an indication of what the question is about. Meaningless subject posts may be rejected.