PDA

Ver la Versión Completa : Estructura a tabla


Cristi_RP
09/10/07, 11:33:07
Quiero hacer una función en la que se le pase una estructura y me lo guarde en una tabla con los siguientes campos (Nombre campo, valor campo).
A la función se le pasará la estructura y el nombre de la tabla donde guardaremos la información de la estructura.
Sería lo siguiente:

Estructura: estr
estr-nombre_campo1 = valor1
estr-nombre_campo2 = valor2

Pasarlo a una tabla que qdaria de la siguiente manera:
Primer registro
tabla-nombre = estr-nombre_campo1
tabla-valor = valor1
Segundo registro
tabla-nombre = estr-nombre_campo2
tabla-valor = valor2

Supongo que tengo que hacer con field-symbols pero no me ocurre como. Mi problema esta en como hacer referencia a los campos de la estructura porque se supone que pueden pasar estructuras de distinto tipo.
Gracias de antemano.

nenuke
09/10/07, 15:25:30
Hola,

pues se me ocurre que puedes recuperar el nombre de los campos de la estructura usando la funcion ALV_REUSE_FIELDCATALOG_MERGE y su contenido como bien has dicho utiizando field-symbols.
Ejecuta el código de ejemplo que te adjunto y espero que te oriente un poco en su funcionamiento. Tu fución será igual solo deberás cambiar el write en pantalla por el insert en tu tabla.
Pregúntame sii no esta lo suficientemente claro:

TYPE-POOLS: slis.

* Esta es una estructura de ejemplo
DATA: BEGIN OF line,
col1 TYPE i VALUE 11,
col2 TYPE i VALUE 22,
col3 TYPE i VALUE 33,
END OF line.

* Almacena el numero de columnas de la estructura import
DATA colum TYPE i.
* Estructura para recoger el catálogo de campos
* Como si fueras a hacer un ALV
* Declaro tambien una wa para poder leer la estructura fields.
DATA: fields TYPE slis_t_fieldcat_alv,
wa_fields LIKE LINE OF fields.

FIELD-SYMBOLS: <f1> TYPE ANY, <f2> TYPE ANY.


ASSIGN line TO <f1>.

* Recuperamos la información necesaria sobre la estructura import
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_internal_tabname = 'LINE'
i_inclname = sy-repid
CHANGING
ct_fieldcat = fields.

DESCRIBE TABLE fields LINES colum.

LOOP AT fields INTO wa_fields.
WRITE wa_fields-fieldname.
ENDLOOP.

DO colum TIMES.
ASSIGN COMPONENT sy-index OF STRUCTURE <f1> TO <f2>.
WRITE:/ <f2>.
ENDDO.

Un saludo.