Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

ALV with variable number of columns

moorthy_s
Explorer
0 Kudos

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

1 ACCEPTED SOLUTION

former_member241258
Active Participant
0 Kudos

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.

8 REPLIES 8

former_member241258
Active Participant
0 Kudos

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.


moorthy_s
Explorer
0 Kudos

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?

moorthy_s
Explorer
0 Kudos

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.

0 Kudos

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.

former_member241258
Active Participant
0 Kudos

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.

former_member241258
Active Participant
0 Kudos

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.

moorthy_s
Explorer
0 Kudos

Thanks a lot. It working fine.

matt
Active Contributor
0 Kudos

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.