*&---------------------------------------------------------------------*
*& Report Z_ALV_COLUMNAS_DINAMICAS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT z_alv_columnas_dinamicas.
TYPE-POOLS: slis.
FIELD-SYMBOLS: TYPE STANDARD TABLE, " Tabla interna dinamica
, " Field symbol para Work area
TYPE ANY. " Field symbol para asignar valores
PARAMETERS: p_cols(5) TYPE c, " Input number of columns
p_rows(5) TYPE c.
DATA: t_newtable TYPE REF TO data,
t_newline TYPE REF TO data,
fs_fldcat TYPE slis_t_fieldcat_alv,
t_fldcat TYPE lvc_t_fcat,
wa_it_fldcat TYPE lvc_s_fcat,
wa_colno(2) TYPE n,
wa_flname(5) TYPE c.
****************
** Crear campos.
****************
DO p_cols TIMES.
CLEAR wa_it_fldcat.
MOVE sy-index TO wa_colno.
CONCATENATE 'COL'
wa_colno
INTO wa_flname.
wa_it_fldcat-fieldname = wa_flname.
wa_it_fldcat-datatype = 'CHAR'.
wa_it_fldcat-intlen = 10.
APPEND wa_it_fldcat TO t_fldcat.
ENDDO.
* Crear tabla interna y asignarlo al FS
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = t_fldcat
IMPORTING
ep_table = t_newtable.
ASSIGN t_newtable->* TO.
* Crear work area y asignarlo al FS
CREATE DATA t_newline LIKE LINE OF.
ASSIGN t_newline->* TO.
*************************
** Rellenar tabla interna
*************************
DATA: fieldname(20) TYPE c.
DATA: fieldvalue(10) TYPE c.
DATA: index(3) TYPE c.
DATA: index2(3) TYPE c.
DO p_rows TIMES.
index2 = sy-index.
DO p_cols TIMES.
index = sy-index.
MOVE sy-index TO wa_colno.
CONCATENATE 'COL'
wa_colno
INTO wa_flname.
* Asignar el valor
CONCATENATE 'VALOR ' index '-' index2 INTO
fieldvalue.
CONDENSE fieldvalue NO-GAPS.
ASSIGN COMPONENT wa_flname
OF STRUCTURE TO .
= fieldvalue.
ENDDO.
* Añadir a la tabla interna dinamica
APPEND TO .
ENDDO.
***************************
** Visualizar tabla interna
***************************
DATA: wa_cat LIKE LINE OF fs_fldcat.
DO p_cols TIMES.
CLEAR wa_cat.
MOVE sy-index TO wa_colno.
CONCATENATE 'COL'
wa_colno
INTO wa_flname.
wa_cat-fieldname = wa_flname.
wa_cat-seltext_s = wa_flname.
wa_cat-outputlen = '10'.
APPEND wa_cat TO fs_fldcat.
ENDDO.
* Llamada al ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = fs_fldcat
TABLES
t_outtab =.
PARAMETERS: p_cols(5) TYPE c, " Input number of columns
p_rows(5) TYPE c.
DATA: t_newtable TYPE REF TO data,
t_newline TYPE REF TO data,
fs_fldcat TYPE slis_t_fieldcat_alv,
t_fldcat TYPE lvc_t_fcat,
wa_it_fldcat TYPE lvc_s_fcat,
wa_colno(2) TYPE n,
wa_flname(5) TYPE c.
****************
** Crear campos.
****************
DO p_cols TIMES.
CLEAR wa_it_fldcat.
MOVE sy-index TO wa_colno.
CONCATENATE 'COL'
wa_colno
INTO wa_flname.
wa_it_fldcat-fieldname = wa_flname.
wa_it_fldcat-datatype = 'CHAR'.
wa_it_fldcat-intlen = 10.
APPEND wa_it_fldcat TO t_fldcat.
ENDDO.
* Crear tabla interna y asignarlo al FS
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = t_fldcat
IMPORTING
ep_table = t_newtable.
ASSIGN t_newtable->* TO
* Crear work area y asignarlo al FS
CREATE DATA t_newline LIKE LINE OF
ASSIGN t_newline->* TO
*************************
** Rellenar tabla interna
*************************
DATA: fieldname(20) TYPE c.
DATA: fieldvalue(10) TYPE c.
DATA: index(3) TYPE c.
DATA: index2(3) TYPE c.
DO p_rows TIMES.
index2 = sy-index.
DO p_cols TIMES.
index = sy-index.
MOVE sy-index TO wa_colno.
CONCATENATE 'COL'
wa_colno
INTO wa_flname.
* Asignar el valor
CONCATENATE 'VALOR ' index '-' index2 INTO
fieldvalue.
CONDENSE fieldvalue NO-GAPS.
ASSIGN COMPONENT wa_flname
OF STRUCTURE
ENDDO.
* Añadir a la tabla interna dinamica
APPEND
ENDDO.
***************************
** Visualizar tabla interna
***************************
DATA: wa_cat LIKE LINE OF fs_fldcat.
DO p_cols TIMES.
CLEAR wa_cat.
MOVE sy-index TO wa_colno.
CONCATENATE 'COL'
wa_colno
INTO wa_flname.
wa_cat-fieldname = wa_flname.
wa_cat-seltext_s = wa_flname.
wa_cat-outputlen = '10'.
APPEND wa_cat TO fs_fldcat.
ENDDO.
* Llamada al ALV
EXPORTING
it_fieldcat = fs_fldcat
TABLES
t_outtab =