Cómo mostrar la suma acumulada de los registros seleccionados en el pie de la rejilla

Los que venimos de 6x echamos de menos una instrucción muy útil que había en los pies de las rejillas: «Suma acumulada de los marcados».

Con esta instrucción conseguías que apareciese la suma acumulada de los registros seleccionados por el usuario en en el pie de las columnas de las rejillas.

En V7 no tenemos esta instrucción «de fábrica» pero podemos conseguir realizar la misma acción… Veamos cómo:

Suma_Seleccionados

Preparando la rejilla

Lo primero que tenemos que hacer es, obviamente, poner las propiedades de la rejilla «Multiselección» y «Pie activo» a verdadero.

A continuación tenemos que crear una variable local a la rejilla de tipo numérico (por ejemplo «TOT_ALB») que será donde acumularemos el total de los albaranes seleccionados por el usuario.

En la columna en la que queramos mostrar la suma, indicaremos las siguientes propiedades:

  • – Tipo contenido pie: Texto
  • – Contenido pie: numberToString(TOT_ALB, «L», $CFG_DEC_IMP@bd_Común.dat)

La última instrucción es para dar formato a la variable y que aparezca con los decimales indicados en una variable global en memoria.

Calculando la suma acumulada de los registros seleccionados por el usuario

Ahora tendremos que crear los mecanismos para que según vaya el usuario seleccionando registros, se vaya acumulando (en este caso) el total del albarán y mostrándose el acumulado en el pie de la rejilla.

Para ello necesitaremos un manejador de evento y una conexión de evento en la propia rejilla.

Creando el manejador de evento

Vamos a crear un manejador de evento en la rejilla (por ejemplo «CAL_SUM_SEL»)

suma acumulada de los registros seleccionados

suma acumulada de los registros seleccionados

Si os fijáis, lo que hago en el manejador de evento es:

  • 1.- Inicializamos la variable que se va a encargar de acumular el importe de los registros seleccionados.
  • 2.- Con la instrucción «Intefaz: Obtener la multi-selección()» obtenemos los registros que ha seleccionado el usuario
  • 3.- Recorremos la lista de los seleccionados y vamos a cumulando en la variable el total de los albaranes.
  • 4.- Con la instrucción «Interfaz: Set variable local de vista de datos«, le pasamos el resultado obtenido a la variable declarada en la rejilla para mostrarlo en el pie.

Creando la conexión de evento

Sólo nos queda crear una conexión de evento en la rejilla que se dispare con la señal «Ítem: simple-click» el manejador de evento «CAL_SUM_SEL»

Problemas

El primer «problema» es que este manejador de evento se lanza cada vez que el usuario selecciona un registro. Es decir, cada vez que seleccionamos un registro (o lo quitamos de la selección), el manejador recorre todos los registro realizando la suma de los registros.

El segundo «problema» y al que todavía no le he encontrado solución es el siguiente.

  • En la rejilla ponemos la propiedad «Modo ver cabeceras»: Horizontal y vertical (o sólo vertical)
  • Marcamos la propiedad «Cabecera vertical on/off» como verdadero.
  • Si en la rejilla, el usuario pincha en la columna con el «check» que aparece, aunque la fila queda seleccionada, no se lanza el manejador de evento «CAL_SUM_SEL» por lo que el pie de la rejilla no mostrará el total de este albarán.

** Confirmado por soporte de Velneo: «en la versión actual (7.18.1) las rejillas carecen de señales específicas de multiselección y que en la columna de multiselección no son funcionales las señales de la rejilla (item simple clic, cambio de seleccionado, etc.)»

Si encontráis una solución a este segundo problema, podéis dejarla en los comentarios un poquito mas abajo.

Además si te ha parecido interesante este artículo puedes suscribirte al blog y al canal de youtube y sobre todo… no dudes en compartirlo por las redes sociales.

Francisco José Vila Martín
ayudavelneo@ayudavelneo.com

Francisco José Vila es autor del blog Ayudavelneo desde donde ayuda a desarrolladores que se están iniciando en Velneo a acortar su curva de aprendizaje para que obtengan beneficios y sean rentables desde el minuto 1. Además es programador certificado y formador en la plataforma de desarrollo de aplicaciones empresariales Velneo V7. Ampliar información

4 Comments
  • Carlos Sánchez López
    Posted at 18:34h, 18 marzo Responder

    Muchas gracias. He ahorrado tiempo y aprendido.
    Me creí que iba a acertar con solo leer el comienzo … jajaja qué chulito.
    Tuve que seguir leyendo.

  • Tomás Fdez. Cuesta
    Posted at 19:57h, 23 agosto Responder

    Creo que lo más elegante es poner un Acción «Suma» en la toolbar de la rejilla, que dispare una señal que es capturada por el manejador de evento qie debemos definir en la rejilla y lanza un proceso de la rejilla que es el que tu has puesto correctamente, Esto permite que sea el usuario el que selccione la opción, sin lentificar el proceso por el marcado o pinchado de registro en la rejilla. Saludos

  • Marco Rangel
    Posted at 17:27h, 30 agosto Responder

    Vengo del futuro xD.
    Encontré este tema ya que requiero lo inverso. Si ya la rejilla me está mostrando un total, es porque ya realizó el cálculo. ¿Hay alguna manera de acceder a ese valor del total?
    De igual manera y solo por no dejar ¿Esto que mencionas en el post original ya se puede hacer en las versiones recientes o seguimos igual?

  • Matias Castro
    Posted at 18:54h, 18 enero Responder

    Versión 7.31 y todavía no hay una señal especifica de la multiselección… Velneo se deberia concentrar en mejorar lo nativo.
    En fin, la solución hay rebuscarsela con un timer en el formulario que contiene la rejilla, «atando alambres» se llega a solucionar.

Post A Comment

Información básica sobre Protección de Datos: Responsable: Francisco José Vila Martín. Finalidad: Gestionar y moderar los comentarios. Legitimación: Tu consentimiento. Destinatarios: Tus datos se alojarán en los servidores de Web Empresa S.L. (UE). Derechos: Tienes derecho a acceder, rectificar, limitar y suprimir los datos, así como otros derechos, como se explica en la información adicional. Información adicional: Puedes consultar la información adicional y detallada sobre protección de datos personales en mi Política de Privacidad.

Pin It on Pinterest