‎2007 Sep 13 10:30 AM
hello friends,
i am using a function module to get data reagarding batch characteristics,now i get the data in a table,also the amount of data i get varies,sometimes i get only 2 records and sometimes 10.
now i want to display this data horizhontally and im using ALV to display this.
how can i dynamically change the number of columns in my alv,
i think i have to use field symbols !!!!
‎2007 Sep 13 10:49 AM
Hello
an short example
REPORT demo_select_dynamic_columns .
DATA: itab TYPE STANDARD TABLE OF spfli,
wa LIKE LINE OF itab.
DATA: line(72) TYPE c,
list LIKE TABLE OF line(72).
line = ' CITYFROM CITYTO '.
APPEND line TO list.
SELECT DISTINCT (list)
INTO CORRESPONDING FIELDS OF TABLE itab
FROM spfli.
IF sy-subrc EQ 0.
LOOP AT itab INTO wa.
WRITE: / wa-cityfrom, wa-cityto.
ENDLOOP.
ENDIF.
By Chris
‎2007 Sep 13 10:49 AM
Hello
an short example
REPORT demo_select_dynamic_columns .
DATA: itab TYPE STANDARD TABLE OF spfli,
wa LIKE LINE OF itab.
DATA: line(72) TYPE c,
list LIKE TABLE OF line(72).
line = ' CITYFROM CITYTO '.
APPEND line TO list.
SELECT DISTINCT (list)
INTO CORRESPONDING FIELDS OF TABLE itab
FROM spfli.
IF sy-subrc EQ 0.
LOOP AT itab INTO wa.
WRITE: / wa-cityfrom, wa-cityto.
ENDLOOP.
ENDIF.
By Chris
‎2007 Sep 13 10:51 AM
Hi,
You have to build the dynamic internal table. And then you can build the field catalog based on that.
Check the following program in which it is handled dynamically,
TABLES : tadir. " table in which the obj_name field stores all the
" database table names
TYPE-POOLS : slis.
TYPES ztab LIKE dcobjdef-name .
DATA : dyntab LIKE dntab OCCURS 0 WITH HEADER LINE,
dref TYPE REF TO data,
i_fcat TYPE lvc_t_fcat ,
wa_fcat TYPE lvc_s_fcat ,
w_pgm LIKE sy-repid,
count TYPE i VALUE 0,
w_obj_name LIKE tadir-obj_name.
DATA : wa_fieldcat TYPE slis_fieldcat_alv, "ALV FIELD CATALOG TABLE
i_fieldcat TYPE slis_t_fieldcat_alv, "ALV FIELD CATALOG STRUCTURE
i_event TYPE slis_t_event, "ALV EVENT HANDLING TABLE
wa_event TYPE slis_alv_event, "ALV EVENT HANDLING STRUCT
i_listheader TYPE slis_t_listheader, "ALV LIST HEADER TABLE
wa_listheader TYPE slis_listheader, "ALV LIST HEADER STRUCT
i_layout TYPE slis_layout_alv.
FIELD-SYMBOLS :<newtab> TYPE table.
INITIALIZATION.
w_pgm = sy-repid.
****************SELECTION-SCREEN 2000
SELECTION-SCREEN BEGIN OF SCREEN 2000 AS WINDOW.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE tit1.
PARAMETERS: tab_name TYPE ztab . " Enter database table name
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN END OF SCREEN 2000.
***************END OF SELECTION-SCREEN 2000
tit1 = 'Enter Table Name?'.
START-OF-SELECTION.
CALL SELECTION-SCREEN 2000 STARTING AT 10 10.
PERFORM occurcheck.
*********CHECKING WHETHER THE DATABASE TABLE EXISTS
FORM occurcheck.
SELECT obj_name FROM tadir INTO w_obj_name WHERE obj_name = tab_name.
ENDSELECT.
IF sy-subrc <> 0.
MESSAGE i003."Table not found in the database .
CALL SELECTION-SCREEN 2000 STARTING AT 10 10.
PERFORM occurcheck.
ELSE.
PERFORM startprocess.
EXIT.
ENDIF.
ENDFORM.
**********GETTING THE FIELD NAMES OF THE INPUT DATABASE TABLE
FORM startprocess.
CALL FUNCTION 'NAMETAB_GET'
EXPORTING
langu = sy-langu
tabname = tab_name
TABLES
nametab = dyntab. "dntab now contains the field names
**********FILLING THE CATALOG OF NEW DYNAMIC INTERNAL TABLE
LOOP AT dyntab.
wa_fcat-fieldname = dyntab-fieldname.
wa_fcat-ref_field = dyntab-fieldname.
wa_fcat-ref_table = dyntab-tabname.
APPEND wa_fcat TO i_fcat .
ENDLOOP.
***********CREATING A POINTER (FIELD SYMBOL) TO THE INTERNAL TABLE
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = i_fcat
IMPORTING
ep_table = dref.
ASSIGN dref->* TO <newtab>.
SELECT * FROM (dyntab-tabname) INTO TABLE <newtab>.
**********CHECKING WHETHER DATA HAS BEEN UPLOADED.
DESCRIBE TABLE <newtab> LINES sy-tfill.
DESCRIBE TABLE <newtab> LINES count.
IF sy-tfill = 0 .
MESSAGE i001. "Internal table is not filled
ELSE.
MESSAGE i002 WITH count. "Internal table is filled
ENDIF.
****************EVENTS USED IN ALV
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0 " 0-simple list, 1-hierarchial list.
IMPORTING
et_events = i_event.
SORT i_event.
READ TABLE i_event
WITH KEY name = slis_ev_top_of_page "TOP_OF_PAGE event
INTO wa_event.
IF sy-subrc = 0.
MOVE 'IAM_TOP_OF_PAGE' TO wa_event-form. "IAM_TOP_OF_PAGE will
"call subroutine automatically
MODIFY i_event FROM wa_event INDEX sy-tabix.
ENDIF.
****************DISPLAYING ALV.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = w_pgm
i_structure_name = dyntab-tabname
it_events = i_event
TABLES
t_outtab = <newtab>.
ENDFORM.
**********FORM TOP_OF-PAGE.
******FILLING OF LIST HEADER TABLE
FORM iam_top_of_page.
CLEAR wa_listheader.
wa_listheader-typ = 'H'. "HEADING
wa_listheader-info = 'ALV CREATED DYNAMICALLY'.
APPEND wa_listheader TO i_listheader.
CLEAR wa_listheader.
wa_listheader-typ = 'S'. "SUB-HEADING
wa_listheader-key = 'PGM NAME:'.
wa_listheader-info = w_pgm.
APPEND wa_listheader TO i_listheader.
CLEAR wa_listheader.
wa_listheader-typ = 'S'.
wa_listheader-key = 'USER:'.
wa_listheader-info = sy-uname.
APPEND wa_listheader TO i_listheader.
CLEAR wa_listheader.
wa_listheader-typ = 'S'.
wa_listheader-key = 'DATE:'.
wa_listheader-info = sy-datum.
APPEND wa_listheader TO i_listheader.
CLEAR wa_listheader.
wa_listheader-typ = 'S'.
wa_listheader-key = 'TABLE NAME:'.
wa_listheader-info = dyntab-tabname.
APPEND wa_listheader TO i_listheader.
********FUNCTION TO WRITE THE TITLE AND SUB-TITLE OF THE ALV.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = i_listheader.
ENDFORM.
<b>Reward if helpful.</b>