Ayuda loop.

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • miguel.esteban.martin
    Member
    • ene
    • 89

    #1

    Ayuda loop.

    Hola.

    Tengo un problema en un loop.

    Yo estoy metiendo datos de una tabla interna a otra, y me sale un problema a ver si logro esplicarme.

    Ejemplo.

    Tabla i_a.

    linea | cant1 | fecha1|
    -----------------------
    1 | | 12.02.2002
    ---------------------------
    1 | 1 |
    -------------------------
    2
    .
    .
    .


    Lo que quiero es que pasar cada linea a la otra tabla, osea que qeude la linea 1 que en esta tabla tiene 2 registros, quede en un solo registro en la otra tabla.

    estoy haciendo un loop y supongo que para el append a la otra tabla hay que usar un :
    loop at i_a.
    ....
    at new linea.
    append
    end at.
    endloop.

    Mi pregunta es: cual de los at....endat que hay debo usar, o si no es asi, como lo prodria hacer.

    Muchas gracias.
  • ic_man_777
    Member
    • oct
    • 97

    #2
    o sea que en tu otra tabla quieres que te quede mas o menos así?:

    Tabla i_a.

    linea | cant1 | fecha1|
    -----------------------
    1 | 1 | 12.02.2002
    ---------------------------
    2
    .
    .
    .

    o como?

    Comentario

    • miguel.esteban.martin
      Member
      • ene
      • 89

      #3
      perdona la tardanza en responder, si eso es lo que quiero.

      como podria hacerlo???

      muchas gracias

      Comentario

      • jtristan
        Senior Member
        • oct
        • 240

        #4
        Podrías usar COLLECT.
        De esta forma, te agruparía todos los valores de tipo cadena y te sumaría los numéricos, porque supongo que si hay necesitas tener el total de ellos.
        Si, simplemente quieres quedarte con un único registro puedes usar el DELETE ADJUNT DUPLICATE que te eliminará todos los registros que estén duplicados.

        Un saludo.

        Comentario

        • miguel.esteban.martin
          Member
          • ene
          • 89

          #5
          gracias pero lo del collect y delete adjacent duplicates no me vale, es con el at...endat pero no se como.

          muchhas gracias

          Comentario

          • Abaunus
            Senior Member
            • nov
            • 119

            #6
            Yo haría lo siguiente:
            Una vez la tabla ordenada ascendente por el campo "línea", hacés un loop. Vaz chequeando con "IF" si los otros campos están vacíos. Si no, los vas copiando a otra work área. Dentro del LOOP que haya un "AT END OF línea". Ahí, appendeás esa work área que vas armando a otra tabla interna. Y borrás la WA.

            Una cosa así sería. Corríjanme si me equivoco:

            Código:
            LOOP AT itab_orig into wa1.
            
             AT NEW línea.
              CLEAR wa2.
              wa2 = wa1.
              CLEAR wa1.
              CONTINUE.
             ENDAT.
            
             IF wa1-cant1 IS NOT INITIAL.
              wa2-cant1 = wa1-cant1.
             ENDIF.
            
             IF wa1-fecha1 IS NOT INITIAL.
              wa2-fecha1 = wa1-fecha1.
             ENDIF.
            
             CLEAR wa1.
            
             AT END OF linea.
              APPEND wa2 INTO itab_dest.
              CLEAR wa2.
             ENDAT.
            
            ENDLOOP.
            Editado por última vez por Abaunus; 13/07/2009, 18:09:10.

            Comentario

            • ibecerra

              #7
              Originalmente publicado por miguel.esteban.martin
              Hola.

              Tengo un problema en un loop.

              Yo estoy metiendo datos de una tabla interna a otra, y me sale un problema a ver si logro esplicarme.

              Ejemplo.

              Tabla i_a.

              linea | cant1 | fecha1|
              -----------------------
              1 | | 12.02.2002
              ---------------------------
              1 | 1 |
              -------------------------
              2
              .
              .
              .


              Lo que quiero es que pasar cada linea a la otra tabla, osea que qeude la linea 1 que en esta tabla tiene 2 registros, quede en un solo registro en la otra tabla.

              estoy haciendo un loop y supongo que para el append a la otra tabla hay que usar un :
              loop at i_a.
              ....
              at new linea.
              append
              end at.
              endloop.

              Mi pregunta es: cual de los at....endat que hay debo usar, o si no es asi, como lo prodria hacer.

              Muchas gracias.


              Hola , a ver si te entiendo.
              tienes asi

              linea | cant1 | fecha1|
              -----------------------
              1 | 1 | 12.02.2002
              ---------------------------
              1 | 1 | xx.xx.xxxx
              -------------------------
              2 | 2 | xx.xx.xxxxx
              2 | 2 | xx.xx.xxxxx

              y quieres tomar una linea del registro por cada linea
              entonces has lo siguiente
              data fl .
              loop at wtabla.
              at new linea.
              fl = '1'.
              endat.
              if fl = '1'.
              move-corresponding wtabla to xtabla.
              append xtabla.
              fl = '0'.
              endat.

              endloop.

              Comentario

              • Abaunus
                Senior Member
                • nov
                • 119

                #8
                Originalmente publicado por ibecerra
                Hola , a ver si te entiendo.
                tienes asi

                linea | cant1 | fecha1|
                -----------------------
                1 | 1 | 12.02.2002
                ---------------------------
                1 | 1 | xx.xx.xxxx
                -------------------------
                2 | 2 | xx.xx.xxxxx
                2 | 2 | xx.xx.xxxxx

                y quieres tomar una linea del registro por cada linea
                entonces has lo siguiente
                data fl .
                loop at wtabla.
                at new linea.
                fl = '1'.
                endat.
                if fl = '1'.
                move-corresponding wtabla to xtabla.
                append xtabla.
                fl = '0'.
                endat.

                endloop.

                Según lo que yo entendí, lo que Miguel necesita es "acumular" o "juntar" en uno solo los datos que están en dos o más registros para el mismo número de "línea", no tomar una línea sola y descartar las siguientes... Creo que con At END OF es la forma...

                Comentario

                • miguel.esteban.martin
                  Member
                  • ene
                  • 89

                  #9
                  muchas gracias funciona con at end ..... endat

                  Comentario

                  Trabajando...