Tabla Interna Dinamica

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • luisgb
    Junior Member
    • nov
    • 10

    #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.
    Editado por última vez por luisgb; 12/12/2006, 16:16:15.
  • SPlNeTe
    Junior Member
    • jul
    • 7

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

    Comentario

    • crounly
      Senior Member
      • nov
      • 227

      #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?
      Editado por última vez por crounly; 13/12/2006, 14:51:28.
      http://codigoderetorno.blogspot.com.es/

      Comentario

      • SPlNeTe
        Junior Member
        • jul
        • 7

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

        Comentario

        • crounly
          Senior Member
          • nov
          • 227

          #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.
          http://codigoderetorno.blogspot.com.es/

          Comentario

          • SPlNeTe
            Junior Member
            • jul
            • 7

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

            Comentario

            • crounly
              Senior Member
              • nov
              • 227

              #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.
              http://codigoderetorno.blogspot.com.es/

              Comentario

              • vstarke
                Member
                • feb
                • 60

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

                Comentario

                Trabajando...