Error al generar tabla dinámica

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • jonono
    Junior Member
    • abr
    • 6

    #1

    Error al generar tabla dinámica

    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
    Senior Member
    • oct
    • 671

    #2
    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.

    Comentario

    • jonono
      Junior Member
      • abr
      • 6

      #3
      Error al verificar

      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

      Comentario

      • Chispi
        Junior Member
        • sep
        • 4

        #4
        Esto te puede ayudar, pero es complicado

        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

        Comentario

        • darona
          Member
          • jun
          • 44

          #5
          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...

          Comentario

          • karasap
            Junior Member
            • jun
            • 10

            #6
            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.

            Comentario

            • kats13
              Junior Member
              • ago
              • 1

              #7
              Originalmente publicado por darona
              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.

              Comentario

              • DavidXD_XD
                Moderator
                • ago
                • 1255

                #8
                Aver si este post sirve:

                David Carballido Córdova

                Comentario

                Trabajando...