Anuncio

Colapsar
No hay anuncio todavía.

Problema con loop

Colapsar
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes

  • Problema con loop

    Pues el problema es muy simple, tengo una tabla interna declarada (itab), en dicha tabla le coloco los datos y cuando le hago un loop me desaparecen los datos de dentro de dos campos. He estado debugeando y me ha asombrado ver que los datos estaban dentro del itab y al recorrer el itab con un loop estos desaparecian.

    Alguna ayudita?

  • #2
    Hola!

    El LOOP por sí mismo no borra el contenido de la tabla o de alguno de los campos salvo se realice el cambio del LOOP.
    Si dentro del loop limpias o cambias algún campo y luegos actualizas la tabla, pues ésta se actualizará con los cambios.
    Ahora, si el LOOP lo tienes con un field-symbol (LOOP AT ITAB ASSIGNING <fs>), cualquier cambio que hagas a algún campo modificará directamente a la tabla ya que el fieldsymbol apunta directamente a la tabla, en cambio un workarea es una copia del registro actual de la tabla que está en curso y tendrías que hacer explícitamente una actualización de la misma.

    ¿Puedes poner el fragmento del código del LOOP para poder ayudarte mejor?

    Saludos.

    Comentario


    • #3
      Muchas gracias por contestar. Aquí te dejo el trozo de codigo del loop.


      WHEN 'COL'.

      ****************1
      LOOP AT itab WHERE marca = 'X' AND
      tipo = 'A'.
      ****************2

      MOVE-CORRESPONDING itab TO i_smartform.
      APPEND i_smartform.

      Donde esta el 1 dentro del itab hay un campo llamado dormt y otro chnum ambos con un valor y cuando pasa a 2 (despues del loop) ambos han desaparecido

      Comentario


      • #4
        Bueno, tengo las siguientes observaciones:

        1 - ITAB es una tabla declarada con la opción WITH HEADER LINE, ya que no hay un INTO en el LOOP. Así que ITAB tiene un workarea llamada ITAB de manera implícita.
        2 - Al entrar en el LOOP, se copia al workarea ITAB el contenido del primer registro de la tabla ITAB,
        3 - Si al debugear ves que los campos ITAB-DORMT y ITAB-CHNUM son borrados al entrar al LOOP, significa que el primer registro de la tabla ITAB tiene en blanco estos campos.

        Revisa el contenido de la tabla ITAB para ver si estos campos tienen valor antes de entrar al LOOP.
        Por cada ciclo del LOOP se copiará a ITAB el registro correspondiente, sobreescribiendo su contenido anterior.

        Es lo que se me ocurre que puede estar pasando, antes del LOOP ves que estos campos tienen valor, pero deben ser de otro registro de ITAB, de la última vez que lo hayas usado el workarea.
        Dentro del LOOP, se copia el contenido de la tabla a su workarea que tiene el mismo nombre, ITAB. Esto sobreescribe el valor que éste tenga por el correspondiente de la tabla.
        Por cada ciclo, se sobreescribe el contenido de ITAB por el registro correspondiente.

        Si continuás con el debug, al llegar al registro de la tabla ITAB en el cual estos campos sí tengan valor, los deberás ver en el workarea ITAB.

        Revísalo a ver si es eso: el workarea ITAB es reemplazado por el valor de cada registro de la tabla ITAB y por ello se borran, cuando en realidad están siendo reemplazados por el contenido de la tabla por cada ciclo del LOOP.

        Espero te sirva.

        Saludos.

        Comentario


        • #5
          Pues si, exactamente como tu has dicho, en la cabecera me salian los dos campos rellenados pero el primer registro no, por lo tanto, al hacer el loop la cabecera desaparecia y solo quedaba el registro.

          Lo he solucinado volcando los datos dentro de otro itab y luego añadiendole los dos campos, de esta manera funciona de forma correcta, quizas habia una forma mas correcta.

          El problema viene dado que un trozo de código genera el primer registro del itab y posteriormente le introduzco estos dos valores.

          Muchisimas grácias por el aporte, esto de ser un junior con pocos meses de práctica...., grácias!

          Comentario

          Trabajando...
          X