¿Cómo pasar una tabla en un perform? Me da error

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Bego86
    Junior Member
    • ene
    • 27

    #1

    ¿Cómo pasar una tabla en un perform? Me da error

    Mi form es el siguiente

    PERFORM p_actualizar_clase using d_clase tabla.

    FORM p_actualizar_clase using d_clase tabla.
    .......
    .......
    ENDFORM.

    El error que me da es el siguiente:
    "TABLA" is neither specified under "TABLES"nor defined as an internal table.

    La tabla esta declarada vale?
    Supongo que falta algo al pasar la tabla pero no lo se.

    Espero que podais ayudarme.
    Gracias
  • goyleo
    Senior Member
    • sep
    • 102

    #2
    Este tipo de declaracion utilizo para pasar tablas por parametros espero te sirva.


    TYPES: BEGIN OF ty_equnr,
    equnr TYPE equi-equnr,
    END OF ty_equnr.

    TYPES: tty_equnr TYPE STANDARD TABLE OF ty_equnr.

    DATA gt_equnr TYPE tty_equnr.

    PERFORM obtener_equipos USING gt_equnr[]

    FORM obtener_equipos USING p_gt_equnr TYPE tty_equnr.
    ....
    ....
    ENDFORM.

    Comentario

    • acha3318
      Senior Member
      • abr
      • 182

      #3
      Saludos BEGO86,

      Bueno primero que todo los llamados a subrutinas "PERFORM" tienen 3 formas para ser usados por el programador de acuerdo a sus necesidades y son:

      1- TABLES
      2- USING
      3- CHANGING

      TABLES: Cuando invocas el parametro TABLES le estas diciendo al PERFORM que en ese parametro vas a enviar o pasar una estructura o tabla interna o la vas a recibir ENTRADA/SALIDA.

      USING: Cuando invocas el parametro USING, le vas a decir al PERFORM que vas a pasar parametros, para ser tratados dentro del FORM.

      CHANGING: Cuando usas este parametro le vas a decir a PERFORM, que de acuerdo a los datos que le has pasado a traves de TABLES y USING vas a realizar un proceso y el resultado de ese proceso lo vas a devolver en los parametros que tu coloques en la sentencia "CHANGING", te aclaro que si tu resultado es la salida de otra tabla interna lo puedes hacer en la definición de TABLES.

      Para no alargarme te mando una muestra de ejemplo:

      1- En el TOP declaro mi tabla interna
      DATA: BEGIN OF it_zproce OCCURS 0.
      INCLUDE STRUCTURE zproce.
      DATA: END OF it_zproce.


      * Hago un llamado para Obtener el tipo de proceso,
      la idea es que la tabla interna it_zproce, entra vacia y cuando
      sale del PERFORM sale llena por que en el parametro USING tengo un
      parametro "entrada" que es una estructura, y este contiene la llave
      para hacer un select a la tabla de procesos.

      Entonces:
      TABLES it_zproce: Tabla interna que entra vacia y sale llena.
      USING entrada: Es una estructura que contiene los datos para leer la tabla
      zproce, y llenar la tabla interna it_zproce.
      CHANGING codigo_error
      texto_error
      status_bloqueo
      w_result:
      Como puedes ver son parametros de retorno que me informan
      como le fué al proceso dentro del FORM.

      PERFORM obtener_tipo_proceso TABLES it_zproce
      USING entrada
      CHANGING codigo_error
      texto_error
      status_bloqueo
      w_result.

      Asi debe quedar el form por dentro:

      FORM obtener_tipo_proceso TABLES p_it_zproce STRUCTURE it_zproce
      USING p_entrada LIKE zparam_mf
      CHANGING p_codigo_error
      p_texto_error
      p_status_bloqueo
      p_result.

      ........ Codigo del proceso etc etc etc.
      ...
      ...
      ENDFORM.

      Espero haberte ayudado...

      Suerte ACHA

      Comentario

      • DavidXD_XD
        Moderator
        • ago
        • 1255

        #4
        Hola ... si quieres pasar una tabla en un perform pero que sea una tabla interna con campos que tu has creado en tu programa (mas del 80% d casos son ese) puedes hacerlo asi:

        Código:
        TYPES: BEGIN OF ty_itab,
                 camp1 TYPE i,
                 camp2 TYPE n,
                 camp3 TYPE c,
               END OF ty_itab.
        
        DATA: ti_itab TYPE TABLE OF ty_itab.
        
        START-OF-SELECTION.
        
        PERFORM get_data TABLES ti_itab.
        
        FORM get_data TABLES pt_itab LIKE ti_itab[].
          ... logica
        ENDFORM.
        Espero te ayude, un saludo !!
        David Carballido Córdova

        Comentario

        • Bmamba
          Member
          • jun
          • 91

          #5
          types: begin of ty_tabla
          ...
          end of ty_tabla.

          data: it_tabla type standard table of ty_tabla,
          wa_tabla type ty_tabla.

          ....
          perform chequeos tables it_tabla.
          ....
          form chequeos tables pt_tabla structure wa_tabla.

          Eso no falla.
          Y ya luego si quieres añadir más parámetros con USING recuerda que TABLES va siempre antes.

          Saludos

          Comentario

          • Bego86
            Junior Member
            • ene
            • 27

            #6
            EEEyyy gracias a todossssss que de respuestassss.

            GRACIASSSs

            Comentario

            Trabajando...