Tabla Dinámica en base a una estructura del diccionario.
*Obtener Tabla Dinámica y Especificaciones Técnicas de la misma.PERFORM f_obt_tabla_dinamica TABLES t_tabla_fields
CHANGING t_tabla_comb.
"Asignar Tabla Dinámica.
ASSIGN t_tabla_comb->* TO <l_table>.
IF <l_table> IS ASSIGNED.
CREATE DATA ep_line LIKE LINE OF <l_table>.
ASSIGN ep_line->* TO <l_line>.
ENDIF.
***Para la el tratamiento de la tabla dinámica se realiza en base a los campos
***que contiene, como no es posible saberlo hasta runtime, usamos la tabla
***que contiene las especificaciones técnicas en base al nombre del campo.
"Ingresar y Leer información de la tabla dinámica.
LOOP AT t_tabla_fields INTO w_tabla_fields.
"Preparar Campo.
ASSIGN COMPONENT w_tabla_fields-fieldname OF STRUCTURE <l_line> TO <l_field>.
IF <l_field> IS ASSIGNED.
"Mostrar Valor del Campo.
WRITE <l_field>.
"Asignar Valor del Campo.
<l_field> = v_valor_del_campo.
INSERT <l_line> INTO TABLE <l_table>.
UNASSIGN <l_field>.
ENDIF.
ENDLOOP.
"Procesar la Tabla dinámica.
LOOP AT <l_table> INTO <l_line>. "No puedes manipular directamente <l_line>.
ASSIGN COMPONENTE 'nombre_campo' OF STRUCTURE <l_line> TO <l_field>.
"Puedes manipular los valores en base a <l_field>.
ENDLOOP.
Nota: puedes usar tambien ASSIGN COMPONENT 'nombre_campo' OF STRUCTURE <l_line> TO <l_field>.
*&---------------------------------------------------------------------*
*& Form F_OBT_TABLA_DINAMICA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--> T_TABLA_FIELDS text
* <--> T_TABLA_COMB text
*----------------------------------------------------------------------*
FORM f_obt_tabla_dinamica
TABLES t_tabla_fields STRUCTURE dd03l
CHANGING t_tabla_comb TYPE REF TO data.
*Tablas internas.
DATA: t_fieldcat TYPE lvc_t_fcat.*Estructuras y Cabeceras
DATA w_fieldcat TYPE LINE OF lvc_t_fcat.*Variables
DATA: v_tabla TYPE dd03l-tabname
,v_tabname TYPE dd03l-tabname.*Field-Symbols
FIELD-SYMBOLS: <fs_tabla_fields> TYPE dd03l. "Definir nombre de la estructura de la cual crearas la tabla interna dinámica.
v_tabla = v_tabname = 'sflight'.
"Contruir el Catálogo para contrucción de Tabla Dinámica.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = v_tabla
CHANGING
ct_fieldcat = t_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
vg_mensaje = TEXT-E01.
"'Error FUNCTION_LVC_FIELDCATALOG_MERGE:creación propiedades tabla dinámica'
ELSE.
"Añadir Campo extra.
DESCRIBE TABLE t_fieldcat LINES sy-dbcnt.
w_fieldcat-col_pos = sy-dbcnt.
w_fieldcat-datatype = 'QUOMO'.
w_fieldcat-fieldname = 'QUOMO'.
w_fieldcat-seltext = 'QUOMO'.
APPEND w_fieldcat TO t_fieldcat.
"Crear Tabla Dinámica en base a Catálogo.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = t_fieldcat
IMPORTING
ep_table = t_tabla_comb
EXCEPTIONS
generate_subpool_dir_full = 1
OTHERS = 2.
IF sy-subrc <> 0.
vg_mensaje = TEXT-E02.
"'Error METODO_cl_alv_table_create=>create_dynamic_table:creación tabla dinámica'
ENDIF.
"éste paso se puede omitir, puedes usar el mismo catálogo que usaste para crear la tabla dinámica.
"Obtener Propiedades Técnicas del Catálogo.
"Nombre del Campo.
"Posición
"Tipo
CALL FUNCTION 'ISB_TABLE_READ_FIELDS'
EXPORTING
tab_name = v_tabname
TABLES
table_fields = t_tabla_fields.
ENDIF.
ENDFORM. "f_obt_tabla_dinamica