Con la siguiente porción de código se puede crear una tabla interna de forma dinámica a partir de un Field Catalog (fieldcat).
DATA:
FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE,
<fs_wa> TYPE any.
DATA: dyn_table TYPE REF TO data,
dyn_line TYPE REF TO data,
ltb_field_cat TYPE lvc_t_fcat.
*Lo primero es cargar el Field Catalog (la tabla interna ltb_field_cat) por ejemplo con la función ‘LVC_FIELDCATALOG_MERGE‘
*Y a continuación podemos modificar el Field Catalog como queramos. Por ejemplo quedarnos únicamente con los campos/columnas visibles:
SORT ltb_field_cat BY no_out.
DELETE ltb_field_cat WHERE no_out = abap_true.
SORT ltb_field_cat BY col_pos.
*Luego entonces creamos la tabla interna dinámica y se asigna al Field Symbol:
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = ltb_field_cat
IMPORTING
ep_table = dyn_table.
ASSIGN dyn_table->* TO <fs_table>.
*Y también creamos su respectiva work area dinámica y se asigna al Field Symbol
CREATE DATA dyn_line LIKE LINE OF <fs_table>.
ASSIGN dyn_line->* TO <fs_wa>.
*Finalmente cargamos con datos la tabla dinámica que creamos en el paso anterior. Se puede hacer un select into a la tabla <fs_table>.
O bien con un código como el siguiente con datos de otra tabla interna previa:
LOOP AT tb_report ASSIGNING FIELDSYMBOL(<lwa_report>).
MOVE-CORRESPONDING <lwa_report> TO <fs_wa>.
APPEND <fs_wa> TO <fs_table>.
ENDLOOP.
Technorati tags: sdn blogger
Comentarios Recientes: