If this is your first visit, be sure to
check out the FAQ by clicking the
link above. You may have to register
before you can post: click the register link above to proceed. To start viewing messages,
select the forum that you want to visit from the selection below.
Este codigo serviria si ya existiese la tabla en el diccionario, no?
Por Ejemplo, digamos que necesito una tabla interna con la estructura de una tabla del diccionario, pero no se que tabla sera hasta que se ejecute el programa
Seria algo asi:
DATA: PV_TABLA TYPE DD02L-TABNAME,
GENERIC_TABLE_WA TYPE REF TO DATA.
FIELD-SYMBOLS: <WA> TYPE ANY,
<FIELD>.
DATA: MI_TABLA TYPE STANDARD TABLE OF MARA
WITH HEADER LINE.
PV_TABLA = 'MI_TABLA'.
CREATE DATA GENERIC_TABLE_WA TYPE (PV_TABLA).
ASSIGN GENERIC_TABLE_WA->* TO <WA>.
o serviria para crear cualquier tabla interna sin que exista en el diccionario?
Editado por última vez por crounly; 13/12/2006, 14:51:28.
CREATE DATA GENERIC_TABLE_WA TYPE (PV_TABLA).
que seria
CREATE DATA GENERIC_TABLE_WA LIKE (PV_TABLA).
Este ejemplo sirve para crear una tabla interna de forma dinamica con la estructura de cualquier tabla del diccionario de datos o de otra tabla interna, solo conociendo el nombre de la tabla.
Lo que me gustaria probar seria lo contrario, mas o menos... crear una tabla interna en tiempo de ejecucion que no tenga reflejo en el diccionario o que coja tipos de campos de tablas del diccionario diferentes.
Estaba pensando en un programa de prueba que por ejemplo te deje seleccionar un numero de tablas del diccionario y dentro de cada tabla algunos campos de la misma para despues crear una tabla interna que aglutine los campos seleccionados.
La unica solucion que veo a eso que comentas es crear codigo dinamico.
DATA: CODE TYPE TABLE OF RSSOURCE-LINE,
LINEA LIKE RSSOURCE-LINE.
DATA: VARIABLE(10). "ESTA VARIABLE LLEVA EL NOMBRE DE LA TABLA.
VARIABLE = 'ZAPR'.
CLEAR LINEA.
CONCATENATE 'TABLES: ' VARIABLE INTO LINEA SEPARATED BY SPACE.
CONCATENATE LINEA '.' INTO LINEA.
APPEND LINEA TO CODE.
CLEAR LINEA.
CONCATENATE 'DATA TI_' VARIABLE INTO LINEA.
CONCATENATE LINEA 'LIKE' VARIABLE INTO LINEA SEPARATED BY SPACE.
CONCATENATE LINEA 'OCCURS 0 WITH HEADER LINE.' INTO LINEA SEPARATED BY
SPACE..
APPEND LINEA TO CODE.
INSERT REPORT 'ZREPORTDINAMICHR' FROM CODE.
Este es un ejemplo que puso un compañero en otro hilo.
da un fallo de sintaxis, y con el TYPE, lo que crea dinamicamente es un campo estructurado, no una tabla interna que es el objetivo.
Rebuscando en la ayuda de SAP encontre que hay una opcion para CREATE DATA que se utiliza para variables referenciadas a tablas
Al final necesitamos 2 variables referenciadas y dos field-symbols, 1 variable sera la tabla y otra la cabecera.
Despues de secuencia 'Prueba y Error" ha quedado el siguiente codigo:
DATA: pv_tabla TYPE dd02l-tabname,
generic_table TYPE REF TO data,
generic_line TYPE REF TO data.
FIELD-SYMBOLS: <table> TYPE ANY TABLE,
<wa> TYPE ANY,
<field> TYPE ANY.
pv_tabla = 'spfli'.
CREATE DATA generic_table TYPE STANDARD TABLE OF (pv_tabla).
ASSIGN generic_table->* TO <table>.
CREATE DATA generic_line TYPE (pv_tabla).
ASSIGN generic_line->* TO <wa>.
SELECT * INTO CORRESPONDING FIELDS OF TABLE <table> FROM (pv_tabla).
LOOP AT <table> INTO <wa>.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE <wa> TO <field>.
IF sy-subrc <> 0.
EXIT.
ENDIF.
WRITE <field>.
ENDDO.
NEW-LINE.
ENDLOOP.
si cambias spfli por mara o otra tabla del diccionario creara una tabla interna identica y mostrara su contenido por pantalla.
Gracias por el codigo SPINete, mas o menos veo la luz, probara a ver que sale.
el código correcto para tabla interna dinámica es el siguiente....
IMPORTANTE: EL NOMBRE DE LA TABLA INTERNA DEBERÁ ESTAR CON CORCHETE -> []... LO QUE HICE FUE HACER UNA RUTINA QUE RECIBE EL NOMBRE DE LA TABLA INTERNA.
FIELD-SYMBOLS: <FS_TABLE> TYPE ANY TABLE,
<FS_WA> TYPE ANY,
<FS_FIELD> TYPE ANY.
Comentario