|
#1
|
|||
|
|||
El write debes aplicarlo al campo de la tabla interna... no a la tabla interna por completo... para eso necesitarías el loop. Que no se realmente que es lo que quieres mostrar... pero pues, un loop así sería de la siguiente manera:
El loop anterior imprime todos los valores en el campo ernam de la tabla interna pedidos... no entiendo muy bien lo que quieres hacer: |
#2
|
||||
|
||||
Ok deja te explico mi dilema, mira mi tarea es:
El campo bstnk, almacena la clave del registro del pedido, bien pues hay registros repetidos, y lo que tengo que hacer es imprimir en pantalla esos registros que se repiten, te pongo un ejemplo: el registro AOL001 está dos veces, a pues lo que yo tengo que hacer es que me muestre en pantalla el AOL001 dos veces... no sé si me expliqué bien, si no pues me dices, y ya inserté el loop como lo pusiste y ya me imprime todos los registros, pero yo solo requiero imprimir los que se repiten nadamas... bueno muchas gracias por tú atención bro! espero la respuesta... |
#3
|
|||
|
|||
Y si se repite más de 2 veces también vd?.
|
#4
|
||||
|
||||
Hola
Create otra tabla interna. DATA: BEGIN OF t_pedidos2 OCCURS 0, bstnk LIKE vbak-bstnk, "CLAVE PEDIDO contador type i. END OF t_pedidos2. ahora has un loop a t_pedidos. clear t_pedidos2. refresh t_pedidos2. loop at t_pedidos. move-corresponding t_pedidos to t_pedidos2 contador = 1 collect t_pedidos2. endloop. En la variable contador se guardara cuantas veces se encuentra cada bstnk. ahora solo queda mostrar lo datos loop at t_pedidos2 where contador > 1. write : t_pedidos2-bstnk. endloop. saludos. |
#5
|
||||
|
||||
oraleee carnal, le atinaste!!, eso es exactamente lo que quería, ya lo probe y funciona a la perfección, estaba muy lejos de lograr lo que quería! , pero weno ya iré entendiendo bien el código...
Oye un ultimo favorsito, m podrías explicar algo de este código? mira por ejemplo: LOOP AT t_PEDIDOS WHERE bstnk = ''. DELETE t_pedidos. ENDLOOP. Allí mi campo de la clave del pedido me lo dejas en blanco no? bstnk = '', y eso que función hace? Aquí igualas las tablas internas, pero despues le eliminas los registros duplicados de la t_ped_tmp, para que? t_ped_tmp[] = t_pedidos[]. DELETE ADJACENT DUPLICATES FROM t_ped_tmp. Y para finalizar en esta parte: LOOP AT t_ped_tmp. veces = 0. LOOP AT t_pedidos WHERE bstnk = t_ped_tmp-bstnk. veces = veces + 1. ENDLOOP. if veces = 1. LOOP AT t_pedidos WHERE bstnk = t_ped_tmp-bstnk. DELETE t_pedidos. ENDLOOP. ENDIF. ENDLOOP. Para que sirve el veces, y porque borras t_pedidos antes de finalizar su loop y el if?? LOOP AT t_pedidos WHERE bstnk = t_ped_tmp-bstnk. DELETE t_pedidos. ENDLOOP. Bueno espero m puedas explicar, muchas gracias por las molestias hermano.. |
#6
|
|||
|
|||
Bueno, eso que ves es lo que se me ocurrió pero posiblemente se puede hacer de una forma mejor.
Explico: LOOP AT t_PEDIDOS WHERE bstnk = ''. DELETE t_pedidos. ENDLOOP. Lo que pasa es que en mis datos me aparecían muchos registros en los cuales el campo BSTNK está vacío... lo que hice fué borrarlos, no se si a ti te son útiles. Entonces, lo que hace el código es SELECCIONAR DE LA TABLA INTERNA t_pedidos DONDE bstnk ESTÁ VACÍO Y BORRARLOS. Como te digo, la forma que se me ocurrió para hacer lo que tu pedías fué, crear otra tabla interna que me ayudara: t_ped_tmp En la tabla de ayuda borré duplicados, porque, lo que quiero hacer es, buscar duplicados en la tabla t_pedidos, si tuviera registros duplicados en la tabla auxiliar no podría hacerlo tardaría mucho más... Entonces, ya al final en t_ped_tmp solo tendré registros que no se repiten... Entonces hago un recorrido a t_ped_tmp, busco cada registro que tengo (los cuales son unicos, no se repiten) en la tabla t_pedidos. Si lo encuentra una vez veces valdrá 1, si lo encuentra una vez no nos sirve, entonces lo buscamos y lo borramos: if veces = 1. LOOP AT t_pedidos WHERE bstnk = t_ped_tmp-bstnk. DELETE t_pedidos. ENDLOOP. Al final la tabla t_pedidos solo cuenta con registros que se repiten 2 o más veces... Espero que te haya servido un poco mi explicación... Yo también soy nuevo en Abap y pues, también mi forma de resolver este tipo de cosas es muy... básica, por eso digo que bien puede solucionarse de una mejor manera... |
#7
|
||||
|
||||
oyeee que bien, muchas gracias man, de verdad que pues aún no entiendo mucho esto, pero me está comenzando a gustar, solo es cuestión de práctica, y eso creo que va a ser a diario, pues es mi trabajo jejeje, muchas gracias y espero que no te molesten tanto mis dudas, y si no porque voy a seguir preguntado jejeje gracias bro!
|
Herramientas | Buscar en Tema |
Desplegado | |
|
|