PDA

Ver la Versión Completa : problema con loop anidado


j3sus
06/03/08, 00:07:42
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
06/03/08, 07:23:06
Buenas, no te entiendo muy bien, pero puedes tener 3 loops anidados perfectamente, que error te esta dando el compilador?

Saludos,

LouieBoy

abapconsultoria
06/03/08, 12:37:01
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.

ibecerra
07/03/08, 12:42:05
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

ibecerra
07/03/08, 12:49:07
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.

ibecerra
07/03/08, 12:50:38
Correcion
wsytabix2 = SY-TABIX. --- 3ra correccion
LOOP AT I_LIPS INTO wa_lips FROM SY-TABIX.

j3sus
12/03/08, 00:13:40
muchas gracias ibecerra
me sirvio de mucho
te debo una
=)