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
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