MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Puede el COLLECT agrupar promediando? (foro/showthread.php?t=37344)

andresf02 19/06/10 20:39:57

Puede el COLLECT agrupar promediando?
 
Buenas Tardes

Tengo una tabla interna como la siguiente:

IT_VALORES
-----------------------------------------------
|....ORDEN....|....KILOGRAMOS....|....TIEMPO....|
-----------------------------------------------
|....500001...|.........400,0..........|........4,5.....|
|....500001...|.........200,0..........|........5,5.....|
|....500001...|.........300,0..........|........2,0.....|
|....500002...|.........100,0..........|........2,5.....|
|....500002...|.........500,0..........|........3,5.....|

y necesito agruparla por ORDEN pero con las condiciones siguientes:

*-La columna KILOGRAMOS debe sumarse
*-La columna TIEMPO debe promediarse


De tal manera que debe quedar:

IT_VALORES
-----------------------------------------------
|....ORDEN....|....KILOGRAMOS....|....TIEMPO....|
-----------------------------------------------
|....500001...|.........900,0..........|........4,0.....|
|....500002...|.........600,0..........|........3,0.....|


Se que con el Collect podria agruparla facilmente si ambas columnas se debieran SUMAR, pero como necesito que la columna TIEMPO se PROMEDIE, entonces solicito ayuda porque desconozco como realizar este proceso.


No se si con el mismo COLLECT se pueda realizar esto, o si exista alguna otra funciones que permita agrupar datos sumando y promediando a la vez.


Si me pueden ayudar con algun codigo se los agradeceria ya que no soy experto en ABAP.


Gracias!

belen6183 19/06/10 20:48:21


Podrias hacer un corte de control por el campo ORDEN, pero tene en cuenta 2 cosas, primero pasar la wa a una auxiliar y que el campo ORDEN sea el primero en tu tabla interna.

Suerte.

ballan 21/06/10 09:53:04

Efectivamente el collect solo suma, no promedia pero con un sencillo truco puedes simularlo

1.- Añade a tu tabla un campo al final que sea de tipo I, la idea es que ese campo valga 1 siempre, te quedaria algo asi

IT_VALORES
--------------------------------------------------------------
|....ORDEN....|....KILOGRAMOS....|....TIEMPO....|......LINEAS....|
---------------------------------------------------------------
|....500001...|.........400,0..........|........4, 5.....|.......1..........|
|....500001...|.........200,0..........|........5, 5.....|.......1..........|
|....500001...|.........300,0..........|........2, 0.....|.......1..........|
|....500002...|.........100,0..........|........2, 5.....|.......1..........|
|....500002...|.........500,0..........|........3, 5.....|.......1..........|

2.- Harias un collect normal con los kilos y el tiempo y en el campo lineas tendrias el numero de lineas que habia de cada orden por lo tanto si divides el valor del campo tiempo (suma de los tiempos) entre el valor del campo lineas (numero de registros) obtendras el promedio

IT_VALORES
--------------------------------------------------------------
|....ORDEN....|....KILOGRAMOS....|....TIEMPO....|......LINEAS....|
---------------------------------------------------------------
|....500001...|.........900,0..........|........12.......|.......3..........|
|....500002...|.........600,0..........|........6.........|.......2..........|


3.- Al final podrias hacer algo asi

loop at tabla assigning <linea>.

<linea>-tiempo = <linea>-tiempo / <linea>-lineas.

endloop.

Jewel_1982 21/06/10 12:19:30

Un ole por BALLAN, me ha gustado!

ballan 22/06/10 09:40:05

jaja, gracias :D


Husos Horarios son GMT. La hora en este momento es 18:14:32.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web