PDA

Ver la Versión Completa : Tablas en Tiempos de Ejecucion


Traveller
10/02/09, 13:23:51
Hola amigos...

Necesito crear varias tablas en tiempo de ejecución... el número de tablas dependerán del número de datos que entren en las tablas iniciales... pero mi verdadero problema es que no se cómo crear un número indefinido de tablas en tiempo de ejecución, se cómo crear una, pero no se cómo podría crear varias tablas en tiempo de ejecución para ser utilizadas dentro de mi report ... me podrías iluminar un poco en este asunto ...?

Gracias!!

DavidXD_XD
10/02/09, 14:14:47
Supongo q t refieres a tablas internas o a transparentes???

Traveller
10/02/09, 14:34:13
Hola David,

mi problemilla es con tablas internas..

DavidXD_XD
10/02/09, 19:05:44
Hola, aqui tengo un ejemplo de como crear una tabla interna con columnas dinamicas, la idea es tener un LOOp y x cada LOOP crear tu tabla interna

REPORT ZPRUEBA_2.

TYPE-POOLS: abap, col.
* Tablas dinámicas
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
<dyn_wa>,
<fs>.

* Variables Globales
DATA: gt_dyn TYPE REF TO data,
gw_dyn TYPE REF TO DATA,
r_table TYPE REF TO cl_salv_table,
r_header TYPE REF TO cl_salv_form_element,
r_footer TYPE REF TO cl_salv_form_element,
r_columns_table TYPE REF TO cl_salv_columns_table,
r_column_table TYPE REF TO cl_salv_column_table,
r_datadescr TYPE REF TO cl_abap_datadescr,
r_structdescr TYPE REF TO cl_abap_structdescr,
gw_component TYPE abap_componentdescr,
gt_component TYPE abap_component_tab.

PARAMETERS: p_col(2) TYPE c OBLIGATORY.

* S T A R T - O F - S E L E C T I O N
START-OF-SELECTION.
PERFORM build_dynamic_table.
PERFORM get_data.

* E N D - O F - S E L E C T I O N
END-OF-SELECTION.
PERFORM display_report.

*&---------------------------------------------------------------------*
*& Form build_dynamic_table
*&---------------------------------------------------------------------*
FORM build_dynamic_table.

DATA: l_idx(2) TYPE c,
l_desc TYPE char50,
l_hslxx(5) TYPE c,
lt_color TYPE lvc_t_scol.

* Columna 1
r_datadescr ?= cl_abap_datadescr=>describe_by_data( l_desc ).
gw_component-name = 'COLUMN'.
gw_component-type = r_datadescr.
APPEND gw_component TO gt_component.
* Column 2 - Types of color for each line
r_datadescr ?= cl_abap_datadescr=>describe_by_data( lt_color ).
gw_component-name = 'COLOR'.
gw_component-type = r_datadescr.
APPEND gw_component TO gt_component.

DO p_col TIMES.
l_idx = sy-index.
CONDENSE l_idx NO-GAPS.
r_datadescr ?= cl_abap_datadescr=>describe_by_data( l_hslxx ).
CONCATENATE 'COL' l_idx INTO gw_component-name.
gw_component-type = r_datadescr.
APPEND gw_component TO gt_component.
ENDDO.

TRY.
r_structdescr = cl_abap_structdescr=>create( p_components = gt_component ).
CATCH cx_sy_struct_creation .
WRITE: / 'CX_SY_STRUCT_CREATION'.
ENDTRY.
* Fill the table with data from GT_DATA
CREATE DATA gw_dyn TYPE HANDLE r_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

*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
FORM get_data.
* select statement
ENDFORM. "get_data

*&---------------------------------------------------------------------*
*& Form display_report
*&---------------------------------------------------------------------*
FORM display_report .

PERFORM display_header. " Display ALV Header
PERFORM display_footer. " DIsplay ALV Footer
PERFORM fill_data. " Fill data
PERFORM set_color. " Set color
PERFORM display_list. " Display the ALV

ENDFORM. " display_report

*&---------------------------------------------------------------------*
*& Form display_header
*&---------------------------------------------------------------------*
FORM display_header .

DATA: lr_grid TYPE REF TO cl_salv_form_layout_grid,
l_text TYPE string.

SELECT SINGLE name_textc
INTO l_text
FROM user_addr
WHERE bname = sy-uname.

CONCATENATE 'Usuario :'
l_text INTO l_text SEPARATED BY space.

CREATE OBJECT lr_grid.
lr_grid->create_text( row = 1
column = 1
text = l_text ).
lr_grid->create_text( row = 2
column = 1
text = sy-host ).
r_header = lr_grid.

ENDFORM. " display_header

*&---------------------------------------------------------------------*
*& Form display_footer
*&---------------------------------------------------------------------*
FORM display_footer .

DATA: lr_grid TYPE REF TO cl_salv_form_layout_grid.

CREATE OBJECT lr_grid.
lr_grid->create_text( row = 1
column = 1
text = sy-datum ).
lr_grid->create_text( row = 2
column = 1
text = sy-uzeit ).
r_footer = lr_grid.

ENDFORM. " display_footer

*&---------------------------------------------------------------------*
*& Form set_color
*&---------------------------------------------------------------------*
FORM set_color.

DATA: lt_color TYPE lvc_t_scol,
ls_color LIKE LINE OF lt_color,
l_idx(2) TYPE c.

FIELD-SYMBOLS: <fs_color>.

LOOP AT <dyn_table> INTO <dyn_wa>.
l_idx = sy-tabix.
CONDENSE l_idx NO-GAPS.
ASSIGN COMPONENT 'COLOR' OF STRUCTURE <dyn_wa> TO <fs_color>.
ls_color-color-col = '6'.
APPEND ls_color TO lt_color.
<fs_color> = lt_color.
MODIFY <dyn_table> FROM <dyn_wa> INDEX l_idx.
UNASSIGN: <fs_color>.
ENDLOOP.

ENDFORM. " set_color

*&---------------------------------------------------------------------*
*& Form display_list
*&---------------------------------------------------------------------*
FORM display_list.

DATA: r_display TYPE REF TO cl_salv_display_settings.
* Prepare the internal table for display
cl_salv_table=>factory( EXPORTING list_display = 'X'
IMPORTING r_salv_table = r_table
CHANGING t_table = <dyn_table> ).
* Set report page title
r_table->set_top_of_list( r_header ).
* Set report footer
r_table->set_end_of_list( r_footer ).
r_display = r_table->get_display_settings( ).
* Assign all the column names
PERFORM set_column_attr.
* Desplegando el reporte
r_table->display( ).

ENDFORM. " display_list

*&---------------------------------------------------------------------*
*& Form set_column_attr
*&---------------------------------------------------------------------*
FORM set_column_attr.

DATA: l_idx(2) TYPE c,
l_text(4) TYPE c,
colname TYPE lvc_fname,
outps TYPE scrtext_s,
outpm TYPE scrtext_m,
outpl TYPE scrtext_l.

r_columns_table = r_table->get_columns( ).
* Set color column
r_columns_table->set_color_column( 'COLOR' ).
DO p_col TIMES.
l_idx = sy-index.
CONDENSE l_idx NO-GAPS.
CONCATENATE 'COL' l_idx INTO colname.
outps = colname.
outpm = colname.
outpl = colname.
r_column_table ?= r_columns_table->get_column( colname ).
r_column_table->set_optimized( value = abap_true ).
r_column_table->set_alignment( value = 1 ).
r_column_table->set_zero( value = space ).
r_column_table->set_short_text( outps ).
r_column_table->set_medium_text( outpm ).
r_column_table->set_long_text( outpl ).
ENDDO.

ENDFORM. " set_column_attr

*&---------------------------------------------------------------------*
*& Form fill_data
*&---------------------------------------------------------------------*
FORM fill_data.

DATA: l_idx(2),
l_col TYPE string.

DO p_col TIMES.
l_idx = sy-index.
CONDENSE l_idx NO-GAPS.
CONCATENATE 'COL' l_idx INTO l_col.
ASSIGN COMPONENT l_col OF STRUCTURE <dyn_wa> TO <fs>.
<fs> = 0.
UNASSIGN <fs>.
ENDDO.

DO p_col TIMES.
l_idx = sy-index.
CONDENSE l_idx NO-GAPS.
ASSIGN COMPONENT 'COLUMN' OF STRUCTURE <dyn_wa> TO <fs>.
CONCATENATE 'Row' l_idx INTO <fs> SEPARATED BY space.
UNASSIGN <fs>.
APPEND <dyn_wa> TO <dyn_table>.
ENDDO.

ENDFORM. " fill_data

Traveller
11/02/09, 16:23:45
Hola David!
Muchas Gracias, me fue de gran ayuda este código.
Ciao