• Jueves 14 de Noviembre de 2024, 23:39

Autor Tema:  Loop anidado consume mucho tiempo  (Leído 5870 veces)

gemaSolocodigo

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Loop anidado consume mucho tiempo
« en: Lunes 15 de Febrero de 2010, 21:48 »
0
Loop anidado ( Es demasiado lento )

De la tabla interna tab_ped3a debo insertar los registros a la tabla interna tab_ped3

Para esto :

1) Hago un read table con tab_ped4 y hago el insert en tab_ped3 (Aqui inserto los pedidos con sus respectivos materiales y respectivo No de factura por material)

2) Hago un loop para que inserte los otros registros (Aqui inserto los pedidos que tuvieron por un material mas de un factura, osea para un material se pidio 20 unidades y 10 se facturaron con la fact A y los otros 10 con las factura B )

 
Citar

   SORT tab_ped3a by vbeln matnr posnr paobjnr.
   SORT tab_ped4  by aubel matnr aupos paobjnr.
   CLEAR : tab_ped3a , tab_ped3, tab_ped4.

   Expresion1 = ''.

   LOOP AT tab_ped3a.

      CONCATENATE tab_ped3a-vbeln   tab_ped3a-posnr tab_ped3a-matnr
                  tab_ped3a-paobjnr tab_ped3a-doc_cial INTO Expresion1.

      IF Expresion1 <> Expresion2.

*      Punto 1)
        READ TABLE tab_ped4 WITH KEY aubel   = tab_ped3a-vbeln
                                     aupos   = tab_ped3a-posnr
                                     matnr   = tab_ped3a-matnr
                                     paobjnr = tab_ped3a-paobjnr.

        IF sy-subrc EQ 0.

           CONCATENATE tab_ped4-aubel   tab_ped4-aupos tab_ped4-matnr
                       tab_ped4-paobjnr tab_ped4-vbeln INTO Expresion2.

              tab_ped3-vbeln    = tab_ped3a-vbeln.
              tab_ped3-posnr    = tab_ped3a-posnr.
              tab_ped3-matnr    = tab_ped3a-matnr.
              tab_ped3-paobjnr  = tab_ped3a-paobjnr.
              tab_ped3-doc_cial = tab_ped4-vbeln.
             INSERT TABLE tab_ped3.
        ENDIF.
      ENDIF.

      CONCATENATE tab_ped3-vbeln   tab_ped3-posnr tab_ped3-matnr
                  tab_ped3-paobjnr tab_ped3-doc_cial INTO Expresion3.

*    Punto 2)
      LOOP AT tab_ped4 WHERE aubel   = tab_ped3-vbeln and
                             aupos   = tab_ped3-posnr and
                             matnr   = tab_ped3-matnr and
                             paobjnr = tab_ped3-paobjnr.

           CONCATENATE tab_ped4-aubel   tab_ped4-aupos tab_ped4-matnr
                       tab_ped4-paobjnr tab_ped4-vbeln INTO Expresion4.

           IF Expresion4 <> Expresion3.
              tab_ped3-vbeln     = tab_ped3a-vbeln.
              tab_ped3-posnr     = tab_ped3a-posnr.
              tab_ped3-matnr    = tab_ped3a-matnr.
              tab_ped3-paobjnr  = tab_ped3a-paobjnr.
              tab_ped3-doc_cial  = tab_ped4-vbeln.
              INSERT TABLE tab_ped3.
           ENDIF.

      ENDLOOP.

   ENDLOOP.



Gracias por la atencion

Gema
COLOMBIA

gemaSolocodigo

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Loop anidado consume mucho tiempo
« Respuesta #1 en: Lunes 15 de Febrero de 2010, 22:28 »
0
Aqui adjunto imagen con datos , para ser mas comprensible mi pregunta


Gracias

Gema
COLOMIBA
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Blizknight

  • Miembro activo
  • **
  • Mensajes: 41
    • Ver Perfil
Re: Loop anidado consume mucho tiempo
« Respuesta #2 en: Jueves 10 de Junio de 2010, 17:42 »
0
1- Ordenar la tabla tab_ped4 y agregarle binary search
2- No hacer el inset directamente por cada registro, crear tabla interna, luego adicionarlos

=) Ojala te ayude en algo anque.... este tema no se ha resuelto en meses...