PDA

Ver la Versión Completa : Funcion SUMATORIA en ALV GRID


andresf02
24/06/10, 13:13:58
Buenod dias.


Quisiera consultarles una duda.
Una consultora creo un reporte dinamico (segun los parametros de seleccion muestra en el ALV determinadas columnas), es decir si se quiere ver los datos del objeto1 por ejemplo, el ALV muestra n columnas con los valores de sus caracteristicas, pero si se escoge en el parametro el objeto2, el alv cambia complemtamente y muestra otras columnas relacionadas al objeto2. Supongo que trabajaron el reporte con Fields-symbols.

El problema es que este reporte, al mostrar la ALV no tiene habilitada la funcion de SUMATORIA E (total, promedio, maximo, minimo). Y segun la consultora no es posible habilitarsela.

Esto es verdad? es posible que al trabajar con estos reportes que cambia dinamicamente no se puedan habilitar todas las funciones del ALV? O por el contrario existe alguna forma de hacerlo. O en que casos definitivamente es imposible en ABAP habilitar la sumatoria en las ALV.


Aclaro que no manejo el concepto de field-symbols muy bien, pero si existe alguna forma de lograr poner la SUMATORIA a este ALV por favor me la dicen y me pongo a invenstigar.


gracias!

Paul Duque
24/06/10, 13:49:10
Buen día Andrés!

Te comento, de habilitarse se puede. Puede ser que por cuestiones de la información mostrada hayan dado la orden de no habilitarse para que no vayan a descontrolar la información porque puede ser que tenga un orden la información específica. A mí me ha tocado que quitar esa funcionalidad por esos motivos, solo por programa pongo los ordenamientos y subtotales. A continuación te envío una porción de código configurando el ALV:

FORM CARGAR_SUBTOTALES CHANGING pt_sort TYPE lvc_t_sort.

DATA ls_sort TYPE lvc_s_sort.

CLEAR ls_sort.
ls_sort-spos = 1.
ls_sort-fieldname = 'CONTENEDOR'.
ls_sort-up = 'X'.
ls_sort-subtot = 'X'.
APPEND ls_sort TO pt_sort.

CLEAR ls_sort.
ls_sort-spos = 2.
ls_sort-fieldname = 'SECUENCIAC'.
ls_sort-up = 'X'.
ls_sort-subtot = ''.
APPEND ls_sort TO pt_sort.

ENDFORM. " CARGAR_SUBTOTALES

Espero te sirva mi respuesta.

Paul Duque

Mauricio Hidalgo
24/06/10, 16:26:33
Si no estás en el caso que expone Paul. Entonces fíjate en el párametro IT_EXCLUDING si estan usando ALV creado con funciones REUSE_ALV_* o IT_TOOLBAR_EXCLUDING si el alv está creado con Objetos.

En esa tabla interna van las funciones a quitar en la botonera del ALV.

Saludos

andresf02
24/06/10, 18:23:41
Buenas Tardes

Gracias por las respuestas.

Revisando el codigo, no se trata del caso que expone PAUL ya que a pesar que existe un catalogo, en él no estan todas las columnas que esta mostrando el reporte.

En el codigo estaban excluidos muchos botones:

REFRESH it_exclude.
APPEND cl_gui_alv_grid=>mc_fc_sum TO it_exclude.
APPEND cl_gui_alv_grid=>mc_fc_views TO it_exclude.
APPEND cl_gui_alv_grid=>mc_fc_subtot TO it_exclude.
* APPEND cl_gui_alv_grid=>mc_fc_graph TO it_exclude.
APPEND cl_gui_alv_grid=>mc_fc_count TO it_exclude.

Pero luego de haber comentado todas estas lineas de codigo, aparece el boton de sumatoria y el de subtotal en la ALV pero de color GRIS, es decir, se visualizan pero no es posible usarlos, estan deshabilitados y no se como lo podria habilitar.


Todas las columnas del field_cat tiene la misma configuracion
CLEAR ls_fcat.
ls_fcat-fieldname = 'HORA_PTO'.
ls_fcat-inttype = 'C'.
ls_fcat-outputlen = '8'.
ls_fcat-coltext = 'Hora'.
ls_fcat-seltext = 'Hora del punto de inspección'.
ls_fcat-no_zero = 'X'.
ls_fcat-no_merging = 'X'.
APPEND ls_fcat TO p_it_fieldcat.

la verdad no le veo nada de raro como para que se bloqueen la SUMATORIA por esto.

Si saben que mas puede ser por favor me avisan.


Recuerden que el reporte muestra mas o menos columnas dependiendo de los parametros iniciales de entrada (cambia dinamicamente dependiendo de la operacion seleccionada como parametro)


gracias

Mauricio Hidalgo
24/06/10, 18:48:26
Oki. Se trata de una ALV basado en objetos. Bueno, que aparezcan inhibidos es por que ninguna columna del ALV es numérica.

¿Como se está creando el catalogo de campos?, si tienes desde donde se saca el dato y es posible además determinar el tipo de datos podrías complementar el catalogo cambiando el atributo INTTYPE con un tipo adecuado.

juanchoakorn
24/06/10, 18:50:23
que tipo de datos tienen las columnas?

Saludos!
JM

andresf02
24/06/10, 20:36:58
Gracias por las respuestas.


Efectivamente el tema es que todos los campos creados dinamicamente les ponian INITYPE = 'C' sin importar el tipo de dato que tuvieran:



SORT it_campos BY tipo cont.
LOOP AT it_campos.
CLEAR ls_fcat.
ls_fcat-fieldname = it_campos-campo.
IF it_campos-tipo_dato = 'DATE'.
ls_fcat-inttype = 'D'.
ls_fcat-outputlen = '8'.
ELSE.
ls_fcat-inttype = 'C'.
ls_fcat-outputlen = '22'.
ENDIF.
ls_fcat-coltext = it_campos-car.
ls_fcat-seltext = it_campos-desc.
ls_fcat-no_zero = 'X'.
ls_fcat-no_merging = 'X'.
* IF it_campos-tipo = 'I'. "Caracteristicas de inspeccion
* ls_fcat-emphasize = 'C200'.
* ELSE. "Caracteristicas de la suerte
* ls_fcat-emphasize = 'C300'.
* ENDIF.
IF it_campos-tipo_dato <> 'CHAR'.
ls_fcat-just = 'R'.
ENDIF.
APPEND ls_fcat TO p_it_fieldcat.
ENDLOOP.



La verdad algo debe tener el reporte que al hacer sumatorias no cuadre o no se si generara un DUMP desde que se lo quitaron, pero al escoger el INTTYPE adecuado, ya se pueden realizar las sumatorias.


Gracias!!

Mauricio Hidalgo
24/06/10, 21:05:43
¿Que nos queda como moraleja de todo esto?.

Jamas decir "No se puede hacer" como respuesta a un requerimiento sin fundamentos.


Saludos