Ver Mensaje Individual
  #2  
Viejo 30/08/07, 12:16:27
ballan ballan is offline
Senior Member
 
Fecha de Ingreso: oct 2006
Mensajes: 671
De esta manera te limitas a poder crear tablas dinamicas referentes a elementos creados en el diccionario ABAP, para poder crear tablas internas dinamicas con los campos que desees puedes hacerlo de esta manera:

REPORT zpruebatabladinamica.

DATA: ls_prueba TYPE REF TO cl_rs_struc,
lo_data TYPE REF TO data.

*se tiene que declarar un fs para la cabecera y otro para el contenido de la tabla
*asi mismo para acceder a los campos necesitamos otro fs
FIELD-SYMBOLS: <tabla> TYPE STANDARD TABLE,
<linea> TYPE ANY,
<campo> TYPE ANY.

*creas el objeto para la estructura dinamica
CREATE OBJECT ls_prueba.

*vas añadiendo los campos (referentes a elementos de datos)
CALL METHOD ls_prueba->add_element
EXPORTING
i_sconame = 'VBELN'
i_type = 'VBELN'.

CALL METHOD ls_prueba->add_element
EXPORTING
i_sconame = 'POSNR'
i_type = 'POSNR'.

CALL METHOD ls_prueba->add_element
EXPORTING
i_sconame = 'MATNR'
i_type = 'MATNR'.

*creas la estructura
CALL METHOD ls_prueba->create
EXPORTING
i_dynamic = rs_c_false
RECEIVING
r_r_data = lo_data
EXCEPTIONS
wrong_struc_definition = 1
no_struc_definition = 2
OTHERS = 3.

* la variable lo_data lleva un numerajo que es el handle para manejar ese objeto
* por lo que tenemos que utilizar el operador ->* para referenciar al contenido
* de ese objeto, en este caso una estructura
ASSIGN lo_data->* TO <linea>.

* previamente hemos creado una wa ahora crearemos la tabla del tipo de esa misma wa
CREATE DATA lo_data LIKE TABLE OF <linea>.

* la asignamos a otro fieldsymbol
ASSIGN lo_data->* TO <tabla>.

*esto es para rellenar valores e introducir un registro y hacer un loop
DO.

ASSIGN COMPONENT sy-index OF STRUCTURE <linea> TO <campo>.

IF sy-subrc <> 0.
EXIT.
ENDIF.

<campo> = '123'.

ENDDO.

APPEND <linea> TO <tabla>.

LOOP AT <tabla> INTO <linea>.

ENDLOOP.
Responder Con Cita