#1
|
|||
|
|||
Tabla Interna Dinamica
Amig@s necesito saber como puedo declarar... y me refiero a dinamica en el hecho que el numero de campos es variable
Gracias Luis G. Úlima edición por luisgb fecha: 12/12/06 a las 16:16:15. |
#2
|
|||
|
|||
Haber si te vale esto.
DATA: PV_TABLA TYPE DD02L-TABNAME, GENERIC_TABLE_WA TYPE REF TO DATA. FIELD-SYMBOLS: <WA> TYPE ANY, <FIELD>. CREATE DATA GENERIC_TABLE_WA TYPE (PV_TABLA). ASSIGN GENERIC_TABLE_WA->* TO <WA>. .... ASSIGN COMPONENT LV_COMPONENT OF STRUCTURE <WA> TO <FIELD>. MODIFY (PV_TABLA) FROM <WA>. .... Si tienes alguna duda sobre el codigo pregunta. Saludos. |
#3
|
||||
|
||||
Una duda...
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? Úlima edición por crounly fecha: 13/12/06 a las 14:51:28. |
#4
|
|||
|
|||
crounly tu ejemplo estaria bien salvo por esto:
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. Saludos. |
#5
|
||||
|
||||
okas, gracias SPINeTe
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. |
#6
|
|||
|
|||
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. Espero que te "ilumine". Saludos. |
#7
|
||||
|
||||
La linea
CREATE DATA GENERIC_TABLE_WA LIKE (PV_TABLA). 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. |
#8
|
|||
|
|||
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. P_TABLE = P_NAMETAB. ASSIGN (P_TABLE) TO <FS_TABLE>. LOOP AT <FS_TABLE> ASSIGNING <FS_WA>. . . . . |
Herramientas | Buscar en Tema |
Desplegado | |
|
|