MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Como recalcular totales en reporte ALV?? (foro/showthread.php?t=62418)

Eduesqueda 26/04/12 16:35:21

Como recalcular totales en reporte ALV??
 
Hola a todos de casualidad alguien sabe lo siguiente:

1.- Tengo un reporte ALV que despliega ciertas columnas y la última columna es un checkbox para seleccionar o deseleccionar el renglón.
2.- También al desplegar mi reporte me muestra totales por proveedor (LIFNR) y un total TOTAL. Y lo que sumariza es el importe (WRBTR). Todos los renglones la primer vez aparecen seleccionados o marcados.
3.- Tengo el evento "data_changed" que me detecta si el usuario selecciona o deselecciona el checkbox del renglón. Si el usuario "Deselecciona" entonces se limpia el Checkbox....si el usuario "Selecciona" entonces se marca el checkbox. Y también se actualiza el checkbox en mi tabla de salida. De tal manera que mi tabla de salida es un reflejo del reporte ALV.

La duda es??:

Como le podría hacer para que me esté recalculando los totales ( proveedor y total total) dependiendo de los renglones que se estén seleccionando?


Ejemplo de ALV al principio:

lifnr wrbtr checkbox
10 200 x
10 150 x

TOTAL 10 350

20 300 x
20 131 x
20 70 x

TOTAL 20 501

TOTAL 851


Ahora si yo desmarco
el proveedor 10 importe 200 y
el proveddor 20 importe 70 poniendole al checkbox blancos,
quiero que me quede asi EN LOS TOTALES:

lifnr wrbtr checkbox
10 200
10 150 x

TOTAL 10 150

20 300 x
20 131 x
20 70

TOTAL 20 431

TOTAL 581

La tabla de salida para el alv tiene estas columnas: lifnr, wrbtr, envio (que es el checkbox).
El campo envio se actualiza con espacios o x cada vez que el usuario deselecciona o selecciona.
Siempre tengo que mostrar los marcados y no marcados en la tabla de salida para el ALV por lo que no le puedo mandar en una tabla de salida al ALV solo los registros marcados para el recálculo de totales.

EN BASE A LO ANTERIOR:
Se puede recalcular los totales, DEPENDIENDO DEL CHECKBOX AL MOMENTO QUE SE ESTA SELECCIONANDO O DESELECCIONANDO?? Como??

Y la tabla de salida está así después de seleccionar o deseleccionar por renglón según el evento "Data_Changed":

lifnr wrbtr envio
10 200
10 150 x
20 300 x
20 131 x
20 70

ES DECIR QUIERO QUE PARA LOS TOTALES SOLO SUME LOS REGISTROS MARCADOS CON X CUANDO MUESTRO LA TABLA EN ALV YA QUE AHORITA SUMA TODOS LOS RENGLONES DE LA TABLA DE SALIDA AL ALV.


Saludos y espero alguien me pueda ayudar.
Gracias.

kibo 26/04/12 19:54:39

La suma la hace de manera std? deberias de hacer la suma manual. Entonces en tu evento de data change, haces los calculos manuales y le "appendias" la linea a tu tabla de salida.

Es medio picapiedra la cosa

Eduesqueda 26/04/12 20:19:13



Si gracias, lo que pasa es que no puedo agregar nada a la tabla de salida porque esto es lo que el usuario está viendo y va a seleccionar para generar un archivo de salida con lo seleccionado y si lo hago como tú dices entonces los botones estandard de SAP en ALV para grupos, cortes y totales me van a incluír en la suma los totales que yo calculé como me estás diciendo y aparte me va a activar el checkbox en estos renglones calculados y el usuario los podría seleccionar cuando no debe ser.

Por lo que mejor lo hago de manera estandard con las rutinas ya creadas por sap, pasandole solo la tabla de salida con sus registros a sumarizar y que SAP haga los totales pero solo quiero que no me sume o no me incluya en los totales los que no tienen el checkbox seleccionado.

Esto ya está en la tabla a desplegar con los campos: lifnr, wrbtr y checkbox solo que me suma todos los registros.....y solo quiero los marcados en el checkbox.

Utilizo las rutinas estandar de SAP como:

1.- * Construction of the Layout.
PERFORM f_construction_layout.----> llena estructura con valores de layout

2.- * Build field catalog
PERFORM f_build_fieldcatalog---> utiliza la funcion: FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

*Aqui especifico que el importe es el campo que se sumará.
WHEN 'WRBTR'.
lw_fieldcat-do_sum = c_x.

3.- * Build Events
PERFORM f_build_events---> llena evento estatus y data_changed
CHANGING i_events.

4.- * Build Sort Criteria
PERFORM f_build_sortCat.--->llena estructura para que sume por proveedor como:

CLEAR wa_sort.
REFRESH it_sortCat.
wa_sort-spos = 1.
wa_sort-fieldname = 'LIFNR'.
wa_sort-up = c_x.
wa_sort-subtot = c_x. "subtotals any totals column by this field
APPEND wa_sort TO it_sortCat.
CLEAR wa_sort.

5.- * Display alv report on output screen
PERFORM f_display_alv_report.--->utiliza la funcion:
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

Eduesqueda 27/04/12 16:52:19



TIENES ALGUNA OTRA IDES KIBO? O ALGUIEN MAS??
HELP, PLEASE!!

kibo 27/04/12 17:02:26

No creo que al ALV_GRID puedas hacer de manera std eso... o al menos yo no lo se, si estuviera en Objetos tenes un poco mas de chances.

La UNICA que se me ocurre, es que copies la funcion de sumarizacion e un Z y ahi le puedas metar vos que solo tenga en cuenta los registros marcados.

No es muy alentadora la idea porque tendras que debuguear el std un rato pero desde mis pocos conocimientos no se me ocurre mas, tal vez puedas buscar en SDN a ver si saben algo.

Y sino la respuesta mas habitual "No, mira... eso SAP no lo contempla, bajalo a Excel y cualquier cosa preguntale a Microsft :p "

Eduesqueda 27/04/12 17:34:16



OK.....KIBO....MUCHAS GRACIAS....ESO ES LO QUE ESTABA DEBUGUEANDO HACE RATO LA FUNCION: REUSE_ALV_GRID_DISPLAY PERO ME DESESPERE...voy a ver si encuentro el sumarizado para excluír los que no fueron marcados.....

y si no les voy a decir que no se puede en SAP....

GRACIAS y te aviso si pude encontrar el punto exacto para cambiar en la funcion.

Saludos

DCErick 27/04/12 20:04:23

Puedes truquear los subtotales con el evento SUBTOTAL_TEXT, hacer tu calculo con los registros marcados y reemplazar el valor, pero el grand total seguirá siendo el de todos los registros de la tabla....

DCErick 27/04/12 21:00:16

En el evento changed, haz lo sigiuente:


Bueno ya tu le metes la lógica para calcular los totales en base a tu check.... Creo que tendré que ir a tu consultora a pasarte mas trucos xD.

Eduesqueda 27/04/12 21:39:13



JIJIJIJI....Si verdad, me falta mucho, yo sé. Muchas Gracias, DERICK, lo voy a probar te estoy avisando...gracias y saludos.


HOLA DCERICK, FIJATE QUE PROBE EL CODIGO COMO ME DIJISTES EN EL EVENTO DATA_CHANGED Y SI VI QUE FUNCIONA MUY BIEN. ** CAMBIA EL RENGLON DE LA TABLA DEL EL TOTAL TOTAL AL VALOR 100 ó 1000 (WRBTR)
** CAMBIA TODA LA INFO DE LA TABLA DE LOS SUBTOTALES POR PROVEEDOR AL VALOR 100 (WRBTR)

PERO NO ME CAMBIA EN MI ALV O PANTALLA NADA al salir del evento DATA_CHANGED y regresa a mi ALV, DEBERIA VER EL TOTAL TOTAL con 1000 Y LOS TOTALES POR PROVEEDOR CON 100.
PERO SIGUE CON LOS DATOS ORIGINALES...PORQUE?

GRACIAS Y SI ME PUDIERAS DECIR TE LO AGRADECERIA DE TODO CUCHARON.
SALUDOS.

DCErick 27/04/12 23:09:25

mmm sabes, no tengo forma de probarlo ahorita con el user_command

Yo lo puse en el top_of_page y me jala bien....


Husos Horarios son GMT. La hora en este momento es 10:13:56.

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