PDA

Ver la Versión Completa : Ayuda loop.


miguel.esteban.martin
08/07/09, 16:19:58
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
08/07/09, 23:42:54
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?

miguel.esteban.martin
09/07/09, 06:55:29
perdona la tardanza en responder, si eso es lo que quiero.

como podria hacerlo???

muchas gracias

jtristan
09/07/09, 08:33:31
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.

miguel.esteban.martin
09/07/09, 11:06:48
gracias pero lo del collect y delete adjacent duplicates no me vale, es con el at...endat pero no se como.

muchhas gracias

Abaunus
13/07/09, 12:59:58
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:

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.

ibecerra
13/07/09, 13:27:51
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.

Abaunus
13/07/09, 18:11:46
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...

miguel.esteban.martin
14/07/09, 06:54:54
muchas gracias funciona con at end ..... endat