problema con loop anidado

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • j3sus
    Member
    • oct
    • 33

    #1

    problema con loop anidado

    hola compañeros como estan soy nuevo en abap y
    estoy teniendo un problema con un loop anidado
    me gustaria que me dieran opciones de como solucionarlo
    puedo tener un loop dentro de otro.. mas no puedo tener un loop que tenga un loop dentro y estos dos esten dentro de otro loop como en el codigo que les pasare.. me gustaria que me ayudaran sin que perdiera la funcionalidad
    gracias =)

    LOOP AT I_INDX1.
    READ TABLE I_LIKP INTO WA_LIKP WITH KEY kunnr = i_indx1-zkunn2
    kunag = i_indx1-zkunnr.
    IF SY-SUBRC EQ 0.

    LOOP AT I_LIKP INTO WA_LIKP FROM SY-TABIX.

    IF I_INDX1-ZKUNN2 = WA_LIKP-KUNNR AND
    I_INDX1-ZKUNNR = WA_LIKP-KUNAG.
    READ TABLE I_LIPS INTO wa_lips WITH KEY
    VBELN = WA_LIKP-VBELN.
    IF SY-SUBRC = 0.

    LOOP AT I_LIPS INTO wa_lips FROM SY-TABIX.

    IF WA_LIKP-VBELN = WA_LIPS-VBELN.
    READ TABLE i_vbap WITH KEY vbeln = wa_lips-vgbel
    posnr = wa_lips-vgpos
    BINARY SEARCH.
    IF sy-subrc EQ 0.
    ADD i_vbap-netwr TO i_indx1-zklimk.
    ADD i_vbap-mwsbp TO i_indx1-zklimk.
    ENDIF.
    ELSE.
    EXIT.
    ENDIF.

    ENDLOOP. "I_LIPS
    ELSE.
    EXIT.
    ENDIF.
    ELSE.
    EXIT.
    ENDIF.

    ENDLOOP. "I_LIKP
    ENDIF.
    ENDLOOP.
  • LouieBoy
    Member
    • ago
    • 86

    #2
    Buenas, no te entiendo muy bien, pero puedes tener 3 loops anidados perfectamente, que error te esta dando el compilador?

    Saludos,

    LouieBoy

    Comentario

    • abapconsultoria
      Senior Member
      • ene
      • 101

      #3
      Podrias pasar el codigo incluyendo variables asi prueba hacer la verificacion en el editor. A la hora de anidad no deberias tener problema.

      Saludos.

      Javier.
      ABAPCONSULTORIA@GMAIL.COM

      www.consultoriaabap.blogspot.com

      Lo importante no es saber sino saber quien es el que sabe

      Comentario

      • ibecerra

        #4
        hola lo q estas haciendo esta bien, porque esta llendo al puntero directo de la tabla interna, lo que seria mejor y pueda avanzar el puntero correctamente es poner al sy-tabix a una variable ejmplo wsytabix.
        y dentro del loop has un add 1 wsytabix para que el puntero pueda avanzar, logico declara wsytabix1, wsytabix2... para no confundir los punteros.

        saludos

        Comentario

        • ibecerra

          #5
          Por tema de performance de vez en cuando aplico la logica q estas poniendo, te envio la posible correcion. ojo q la likp debera estar ordenado por
          kunnr , kunag , vbeln

          data:
          wsytabix like sy-tabix,
          wsytabix2 like sy-tabix.

          LOOP AT I_INDX1.
          clear wsytabix1,wsytabix2.
          READ TABLE I_LIKP INTO WA_LIKP WITH KEY kunnr = i_indx1-zkunn2
          kunag = i_indx1-zkunnr.
          IF SY-SUBRC EQ 0.
          wsytabix = SY-TABIX. --- 1ra correccion
          LOOP AT I_LIKP INTO WA_LIKP FROM wsytabix.

          IF I_INDX1-ZKUNN2 = WA_LIKP-KUNNR AND
          I_INDX1-ZKUNNR = WA_LIKP-KUNAG.
          READ TABLE I_LIPS INTO wa_lips WITH KEY
          VBELN = WA_LIKP-VBELN.
          IF SY-SUBRC = 0.

          LOOP AT I_LIPS INTO wa_lips FROM SY-TABIX.
          wsytabix2 = SY-TABIX. --- 3ra correccion

          IF WA_LIKP-VBELN = WA_LIPS-VBELN.
          READ TABLE i_vbap WITH KEY vbeln = wa_lips-vgbel
          posnr = wa_lips-vgpos
          BINARY SEARCH.
          IF sy-subrc EQ 0.
          ADD i_vbap-netwr TO i_indx1-zklimk.
          ADD i_vbap-mwsbp TO i_indx1-zklimk.
          ENDIF.
          ELSE.
          EXIT.
          ENDIF.
          add 1 to wsytabix2--->4ta correcion
          ENDLOOP. "I_LIPS
          ELSE.
          EXIT.
          ENDIF.
          ELSE.
          EXIT.
          ENDIF.
          add 1 to wsytabix. --->2da correcion
          ENDLOOP. "I_LIKP
          ENDIF.
          ENDLOOP.

          Comentario

          • ibecerra

            #6
            Correcion
            wsytabix2 = SY-TABIX. --- 3ra correccion
            LOOP AT I_LIPS INTO wa_lips FROM SY-TABIX.

            Comentario

            • j3sus
              Member
              • oct
              • 33

              #7
              muchas gracias ibecerra
              me sirvio de mucho
              te debo una
              =)

              Comentario

              Trabajando...