Ver Mensaje Individual
  #3  
Viejo 15/12/10, 17:16:18
cubanito cubanito is offline
Junior Member
 
Fecha de Ingreso: nov 2006
Mensajes: 13
Post

Hola MarianitoSAPO...
LIFNR si es llave en las tres tablas... y a menos que tengan activos índices diferentes, si puedes usar ese campo como llave y hasta me atrevería a decirte que sería mucho mas rápido un INNER JOIN.
Por otro lado, es REGLA INVIOLABLE asegurarse SIEMPRE antes de hacer un FOR ALL ENTRIES que la tabla usada para ello no venga VACÍA!!!

Y por último, el código está muy mal hecho!!! No hay ninguna necesidad de usar esos LOOPS anidados!!! No necesitas usar ese AUX2 para hacerle ese LOOP a AUX3 ya que el LIFNR es el mismo en todas desde AUX1.
por lo tanto podrías dejarlo así:
LOOP AUX1.
LOOP AUX2 WHERE LIFNR = AUX1-LIFNR
ENDLOOP.

LOOP AUX3 WHERE LIFNR = AUX1-LIFNR
ENDLOOP.
ENDLOOP.

Además, podrías hacerle un SORT a todas tus tablas por el campo LIFNR antes de hacer los LOOP's e ir borrando los registros ya leídos para ir reduciendo el tamaño de las tablas internas:

SORT: AUX1, AUX2, AUX3 by LIFNR.
LOOP a AUX1.
LOOP a AUX2 WHERE LIFNR = AUX1-LIFNR.
<Realiza operaciones>
DELETE AUX2.
ENDLOOP.

LOOP a AUX3 WHERE LIFNR = AUX1-LIFNR
<Realiza operaciones>
DELETE AUX3.
ENDLOOP.
ENDLOOP.

Y si aún quieres mas velocidad, entónces mete tus tablas y tus work areas en FIELD-SYMBOLS y has los LOOPS con ellos:

FIELD-SYMBOLS: <AUX1> like aux1,
<W_AUX1> like line of aux1,
<AUX2> like aux2,
<W_AUX2> like line of aux2,
<AUX3> like aux3,
<W_AUX3> like line of aux3.

ASSIGN: aux1 TO <AUX1>,
aux2 TO <AUX2>,
aux3 TO <AUX3>.

LOOP AT <AUX1> ASSIGNING <W_AUX1>.
LOOP AT <AUX2> ASSIGNING <W_AUX2>.
<Realiza operaciones>
DELETE <AUX2>.
ENDLOOP.

LOOP AT <AUX3> ASSIGNING <W_AUX3>.
<Realiza operaciones>
DELETE <AUX3>.
ENDLOOP.
ENDLOOP.

Saludos!!!
Responder Con Cita