Hola!, alguien sabe si la funcion REUSE_ALV_GRID_DISPLAY tiene un limite en cuanto a cantidad de campos a mostrar o cantidad de caracteres.
Muchas Gracias.
Muchas Gracias.
, ahora solo deberas modificar el parametro de entrada con 4 caracteres y probar con 9999 columnas, creo q las columnas del ALV es ilimitado y ademas no creo q exista un reporte con mas de 999 columnas (seria perdida de tiempo), pero ahi va el codigo, espero te pueda ayudar[COLOR="blue"]*&---------------------------------------------------------------------*
*& Report ZPRUEBA_2
*&---------------------------------------------------------------------*
*& Autor : David Carballido Cordova
*& Fecha : 22/02/2009
*& Descripción : Crear una tabla interna dinámica y mostrar en ALV
*& Programa : ZPRUEBA_2
*&---------------------------------------------------------------------*[/COLOR]
REPORT ZPRUEBA_2.
TYPE-POOLS: abap, col, slis.
[COLOR="blue"]* Tablas dinámicas[/COLOR]
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
<dyn_wa>,
<fs>.
[COLOR="blue"]* Variables Globales[/COLOR]
DATA: gt_dyn TYPE REF TO DATA,
gw_dyn TYPE REF TO DATA.
PARAMETERS: p_col(3) TYPE c OBLIGATORY.
[COLOR="blue"]*&---------------------------------------------------------------------*
* S T A R T - O F - S E L E C T I O N
*&---------------------------------------------------------------------*[/COLOR]
START-OF-SELECTION.
PERFORM build_dynamic_table.
PERFORM get_data.
PERFORM build_alv.
[COLOR="blue"]*&---------------------------------------------------------------------*
*& Form build_dynamic_table
*&---------------------------------------------------------------------*
* Construyendo tabla interna dinamica
*----------------------------------------------------------------------*[/COLOR]
FORM build_dynamic_table.
DATA: lr_datadescr TYPE REF TO cl_abap_datadescr,
lr_structdescr TYPE REF TO cl_abap_structdescr,
ls_component TYPE abap_componentdescr,
lt_component TYPE abap_component_tab.
DATA: l_descr TYPE char50,
l_indx(3) TYPE n,
l_char5(5) TYPE c.
[COLOR="blue"]* Columna 1[/COLOR]
lr_datadescr ?= cl_abap_datadescr=>describe_by_data( l_descr ).
ls_component-name = 'COLUMNA'.
ls_component-type = lr_datadescr.
APPEND ls_component TO lt_component.
[COLOR="blue"]* Columnas Dinamicas[/COLOR]
DO p_col TIMES.
l_indx = sy-index.
CONDENSE l_indx NO-GAPS.
lr_datadescr ?= cl_abap_datadescr=>describe_by_data( l_char5 ).
CONCATENATE 'COL' l_indx INTO ls_component-name.
ls_component-type = lr_datadescr.
APPEND ls_component TO lt_component.
ENDDO.
[COLOR="blue"]* Creando la tabla interna[/COLOR]
TRY.
lr_structdescr = cl_abap_structdescr=>create( p_components = lt_component ).
CATCH cx_sy_struct_creation.
WRITE: / 'Excepcion:', 'CX_SY_STRUCT_CREATION'.
ENDTRY.
CREATE DATA gw_dyn TYPE HANDLE lr_structdescr.
ASSIGN gw_dyn->* TO <dyn_wa>.
CREATE DATA gt_dyn LIKE STANDARD TABLE OF <dyn_wa>.
ASSIGN gt_dyn->* TO <dyn_table>.
ENDFORM. " build_dynamic_table
[COLOR="blue"]*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* Armando data para la tabla interna
*----------------------------------------------------------------------*[/COLOR]
FORM get_data.
DATA: l_cadena(15),
l_cont(3) TYPE n.
FIELD-SYMBOLS <fs>.
DO 10 TIMES.
CLEAR <dyn_wa>.
l_cont = sy-index.
CONCATENATE 'COLUMNA' l_cont INTO <dyn_wa>.
CONDENSE <dyn_wa> NO-GAPS.
DO p_col TIMES.
CLEAR: l_cadena.
l_cont = sy-index.
CONCATENATE '<dyn_wa>-COL' l_cont INTO l_cadena.
ASSIGN (l_cadena) TO <fs>.
<fs> = sy-index.
ENDDO.
APPEND <dyn_wa> TO <dyn_table>.
ENDDO.
ENDFORM. " get_data
[COLOR="blue"]*&---------------------------------------------------------------------*
*& Form build_alv
*&---------------------------------------------------------------------*
* Construyendo ALV
*----------------------------------------------------------------------*[/COLOR]
FORM build_alv.
DATA: lt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA: l_cadena(6) TYPE c,
l_cont(3) TYPE n.
[COLOR="blue"]* Creando catalogo[/COLOR]
CLEAR lt_fieldcat.
lt_fieldcat-fieldname = 'COLUMNA'.
lt_fieldcat-tabname = '<DYN_TABLE>'.
lt_fieldcat-key = 'X'.
lt_fieldcat-seltext_l = 'Columna'.
APPEND lt_fieldcat.
DO p_col TIMES.
CLEAR lt_fieldcat.
l_cont = sy-index.
CONCATENATE 'COL' l_cont INTO l_cadena.
lt_fieldcat-fieldname = l_cadena.
lt_fieldcat-tabname = '<DYN_TABLE>'.
lt_fieldcat-seltext_l = l_cadena.
APPEND lt_fieldcat.
ENDDO.
[COLOR="Blue"]* Desplegando ALV[/COLOR]
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = 'ZPRUEBA_2'
IT_FIELDCAT = lt_fieldcat[]
TABLES
T_OUTTAB = <dyn_table>
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build_alv

Comentario