PDA

Ver la Versión Completa : Asignación dinamica de campos


goyleo
25/01/11, 17:15:29
Hola queria saber como acceder a un campo de una estructura, que fue declarada dinamicamente.


por ejemplo, si yo declaro una estructura

* Se crea una estructura generica
lv_tabla = 'MARA'.
CREATE DATA lv_generic_line TYPE (lv_tabla).
ASSIGN lv_generic_line->* TO <wa>.A continuacion obtengo datos dinamicamente en una tabla dinamica declarada igual que la estructura

* Se obtienen valores dinamicamente.
SELECT (lt_fieldname)
FROM (lv_tabla)
INTO CORRESPONDING FIELDS OF TABLE <table>.Luego realizo un LOOP para trabajar los valores.


* Se recorre los datos.
LOOP AT <table> INTO <wa>.

¿<wa>-matnr?

ENDLOOP. quiero acceder a el valor que contiene <wa>-matnr me dice que no puedo porque no existe el campo matnr, pero por debbug puedo ver que le asigno la estructura MARA y el campo matnr esta! pero no se como acceder directamente a esa info.

Muchas gracias a todos !
:D

Por las dudas dejo el codigo en el que estoy trabajando

*&---------------------------------------------------------------------*
*& Form f_get_data
*&---------------------------------------------------------------------*
* Se obtienen información armando un select dinámico.
*----------------------------------------------------------------------*
* -->P_GT_RELACIONES Tabla de relaciones
* <--P_GT_SALIDA Tabla de salida.
*----------------------------------------------------------------------*
FORM f_get_data USING p_gt_relaciones TYPE tyt_relaciones
CHANGING p_gt_salida TYPE tyt_salida.

* Variables locales
DATA: le_relaciones TYPE tye_relaciones,

* Estructuras para select dinámico
lv_tabla TYPE dd02l-tabname,
lt_campos TYPE STANDARD TABLE OF dfies,
le_campos TYPE dfies,
lt_fieldname TYPE STANDARD TABLE OF dntab-fieldname,
le_fieldname TYPE dntab-fieldname,
le_salida TYPE tye_salida,
lv_generic_line TYPE REF TO data,
lv_aux TYPE char40,
lt_valores TYPE tyt_salida,
lv_generic_table TYPE REF TO data.

* Punteros
FIELD-SYMBOLS: <wa> TYPE ANY,
<table> TYPE ANY TABLE,
<field> TYPE ANY.

* Se recorren los valores de las tablas
LOOP AT p_gt_relaciones INTO le_relaciones.

lv_tabla = le_relaciones-tabla.

* Se crea una tabla del tipo que viene en el archivo .
CREATE DATA lv_generic_table TYPE STANDARD TABLE OF (lv_tabla).
ASSIGN lv_generic_table->* TO <table>.

* Se crea una estructura
CREATE DATA lv_generic_line TYPE (lv_tabla).
ASSIGN lv_generic_line->* TO <wa>.


* Recupero los campos clave de la tabla.
CALL FUNCTION 'GET_KEY_FIELDS_OF_TABLE'
EXPORTING
tabname = lv_tabla
TABLES
key_fieldtab = lt_campos
EXCEPTIONS
not_supported = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

* Se recorren los campos.
LOOP AT lt_campos INTO le_campos.
le_fieldname = le_campos-fieldname.
APPEND le_fieldname TO lt_fieldname.
ENDLOOP.

* Se obtienen valores dinamicamente.
SELECT (lt_fieldname)
FROM (lv_tabla)
INTO CORRESPONDING FIELDS OF TABLE <table>.

* Se recorre los datos.
LOOP AT <table> INTO <wa>.

***********PROBLEMA*************

ENDLOOP.

ENDLOOP.

ENDFORM. " f_get_da

goyleo
25/01/11, 18:20:57
Hola muchas gracias a los que leyeron, ya puede solucionar el problema paso el codigo asi le sirve a cualquiera que quiera obtener datos y trabajarlos de manera dinamica. Saludos y gracias (Especialmente a los que moleste por msn jajaj)

Saludos

*Recorro tabla declarada dinamicamente con estructura dinamica
LOOP AT <fs_tabla_dinamica> ASSIGNING <fs_wa_dinamica>.

* Armo el field symbol con estructura y campo dinamico
CONCTENATE '<fs_wa_dinamica>' Lv_campo_variable INTO lv_campo.

* Asigno el valor al puntero
ASSIGN (lv_campo) TO <fs_field>.

* Cambio el valor del campo.
<fs_field> = 1.

ENDLOOP.

Saludos Gente!!! :D

ezeargen
25/01/11, 18:28:40
Fiera, máquina, mostro, Darín!! Sos el David Hasselhoff de los abapers!

Abrazo