PDA

Ver la Versión Completa : Error al generar tabla dinámica


jonono
30/08/07, 10:52:02
Hola a todos:

Soy nuevo en esto y me han pedido que genere una tabla dinámica para después pasarla a formato XML. Leyendo en el foro (por cierto, enhorabuena a los que lo hacen posible) he encontrado un post de diciembre del 2006 de LUISGB y contestado por CROUNLY donde explica como hacerlo:

Escribo el código testualmente:

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.



He subido el código a SAP Y el problema que tengo es que al verificarlo aparece este mensaje de error:

Unable to interpret "TABLE". Possible causes of error: Incorrect
spelling or comma error.

(Al clickear se coloca en la linea: CREATE DATA generic_table TYPE STANDARD TABLE OF (pv_tabla)"

Si quito la palabra STANDARD aparece otro error:

The type specification of "TABLE" is incomplete

¿podeís echarme una manita?

Muchas gracias

ballan
30/08/07, 12:16:27
De esta manera te limitas a poder crear tablas dinamicas referentes a elementos creados en el diccionario ABAP, para poder crear tablas internas dinamicas con los campos que desees puedes hacerlo de esta manera:

REPORT zpruebatabladinamica.

DATA: ls_prueba TYPE REF TO cl_rs_struc,
lo_data TYPE REF TO data.

*se tiene que declarar un fs para la cabecera y otro para el contenido de la tabla
*asi mismo para acceder a los campos necesitamos otro fs
FIELD-SYMBOLS: <tabla> TYPE STANDARD TABLE,
<linea> TYPE ANY,
<campo> TYPE ANY.

*creas el objeto para la estructura dinamica
CREATE OBJECT ls_prueba.

*vas añadiendo los campos (referentes a elementos de datos)
CALL METHOD ls_prueba->add_element
EXPORTING
i_sconame = 'VBELN'
i_type = 'VBELN'.

CALL METHOD ls_prueba->add_element
EXPORTING
i_sconame = 'POSNR'
i_type = 'POSNR'.

CALL METHOD ls_prueba->add_element
EXPORTING
i_sconame = 'MATNR'
i_type = 'MATNR'.

*creas la estructura
CALL METHOD ls_prueba->create
EXPORTING
i_dynamic = rs_c_false
RECEIVING
r_r_data = lo_data
EXCEPTIONS
wrong_struc_definition = 1
no_struc_definition = 2
OTHERS = 3.

* la variable lo_data lleva un numerajo que es el handle para manejar ese objeto
* por lo que tenemos que utilizar el operador ->* para referenciar al contenido
* de ese objeto, en este caso una estructura
ASSIGN lo_data->* TO <linea>.

* previamente hemos creado una wa ahora crearemos la tabla del tipo de esa misma wa
CREATE DATA lo_data LIKE TABLE OF <linea>.

* la asignamos a otro fieldsymbol
ASSIGN lo_data->* TO <tabla>.

*esto es para rellenar valores e introducir un registro y hacer un loop
DO.

ASSIGN COMPONENT sy-index OF STRUCTURE <linea> TO <campo>.

IF sy-subrc <> 0.
EXIT.
ENDIF.

<campo> = '123'.

ENDDO.

APPEND <linea> TO <tabla>.

LOOP AT <tabla> INTO <linea>.

ENDLOOP.

jonono
31/08/07, 07:32:54
Hola:

He subido tu programita para ver como funciona y me da un error al verificarlo. Se para en la linea:
DATA: ls_prueba TYPE REF TO cl_rs_struc.

Por que cl_rs_struc no existe.

El error concretamente es: The type "CL_RS_STRUC" is unknown.

La versión de R/3 con la que trabajo es la 4.6C

Gracias

Chispi
07/09/07, 08:55:06
A ver jonono. La respuesta es chunga para un principiante, pues tienes q crear código ABAP dinamicamente, y hacer un global assign para obtener la referencia a la tabla q deseas crear dinamicamente.

Las preguntas q te tienes q hacer son:

1- ¿Cómo defino la tabla q necesito de forma estática con ABAP?
2- Escribo el código ABAP de la respuesta de la pregunta 1 en una tabla interna cuyo tipo es carácter de longitud 72.
3- Amplía el código ABAP de la tabla interna, para q sea una declaración de tipo/datos global. Define también en dicha tabla interna una variable global del tipo recién definido y crea además una subrutina de momento vacía.
4- Échale un vistazo a la ayuda de la instrucción GENERATE SUBROUTINE POOL. Ahora mismo no recuerdo si está disponible en 4.6C. Verás un ejemplo chulo en dicha ayuda.
5-Llamas a la subrutina del reporte q acabas de generar
6-Obtienes con global assign un field symbol q apunte a dicha variable global q has definido en tu reporte dinámico
7- Échale un vistazo a la ayuda de la instrucción CREATE DATA ... LIKE, porque ahora tienes una variable de donde dicha instrucción puede sacar la información del tipo en tiempo de ejecución.
8- Si te funciona lo de 7, te falta un ASSIGN dataref->* TO <field_symbol> y ya puedes usar tu tabla dinámica.

Lo de pasarlo a XML... lo tienes chungo, pues te tienes q construir tu mismo el stream XML. Sólo a partir de Basis 4.7 tienes instrucciones ABAP para generar un stream XML a partir de una variable ABAP.

Suerte

darona
07/09/07, 11:56:05
Lo de hacer las tablas dinamicas es un poco complicado de ver a la primera, pero no es muy dificil cuando le pillas el tranquillo, no te preocupes. ;)

Pon tu mail y te mando un ejemplo de un programa que hice yo en el que está comentado todo el proceso.
Si tienes problemas, create una cuenta de Skype y hablamos...

karasap
29/10/07, 09:29:45
Hola, buenas. He empezado hace poco en este mundo y ahora ando con lo de las tablas dinamicas. He visto que dices que tienes un ejemplo de un programa sobre la creacion de tablas dinamicas que me interesa. Si puedes mandamelo a gotzi_e@hotmail.com. Muchas gracias.

kats13
20/08/08, 18:15:47
Lo de hacer las tablas dinamicas es un poco complicado de ver a la primera, pero no es muy dificil cuando le pillas el tranquillo, no te preocupes. ;)

Pon tu mail y te mando un ejemplo de un programa que hice yo en el que está comentado todo el proceso.
Si tienes problemas, create una cuenta de Skype y hablamos...
Hola, Soy nueva en el mundo sap, necesito crear tablas dinamicas. Darona dijiste que tienes un ejemplo podrías enviarlo a mi correo, es k08_07_1980@yahoo.com.ar.
Muchas gracias.

DavidXD_XD
20/08/08, 19:49:10
Aver si este post sirve:

http://www.mundosap.com/foro/showthread.php?t=15588