Ver Mensaje Individual
  #2  
Antiguo Hace 2 Días
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Reputación: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Yo no tengo ni idea, aunque te pego lo que dice el primo chatgpt:
Ufff... se ha descuadrado la respuesta.

Cita:
En este tipo de casos en QuickReport (o componentes similares en Delphi), cuando el detalle se muestra bien pero los SUM no aparecen, el problema casi nunca está en la expresión SUM(DEBE), sino en el contexto de evaluación del QRExpr dentro del ciclo de impresión del reporte. Lo primero importante es entender que los agregados como SUM dependen de que el reporte esté realmente recorriendo el dataset durante el proceso de impresión; no basta con asignar el DataSet al reporte o al Master, sino que el motor del reporte tiene que estar en ejecución con el dataset activo y completamente preparado antes de imprimir. En tu caso, al generar el query de forma dinámica y luego mapear los campos, es muy probable que el reporte ya haya sido preparado internamente antes de que el dataset esté completamente estable o antes de que los enlaces estén bien establecidos, y eso hace que las expresiones de agregación no se inicialicen correctamente. Otro punto clave es la ubicación de los QRExpr: SUM solo funciona correctamente si los QRExpr están dentro de una banda que participe en el recorrido del dataset, normalmente un SummaryBand o un GroupFooterBand que dependa del mismo dataset maestro; si están en un band que no se recorre o no está correctamente enlazado al flujo del reporte, el valor nunca se acumula. También es importante que el dataset esté activo en el momento exacto en que el reporte se prepara, porque si el dataset se asigna pero todavía no está abierto o se abre después de configurar el reporte, los cálculos agregados pueden quedar vacíos. En muchos casos con QuickReport dinámico, cuando se cambian campos o dataset en tiempo de ejecución, es necesario forzar una nueva preparación del reporte después del mapeo, porque si no el motor mantiene una estructura interna anterior y no recalcula expresiones como SUM o diferencias. Además, debes confirmar que los campos DEBE y HABER son realmente numéricos (por ejemplo Float o Currency) y no strings, porque si vienen como texto desde una consulta dinámica, SUM no va a funcionar correctamente aunque el detalle sí se muestre. Finalmente, el hecho de que tengas ResetAfterPrint := False indica que quieres acumulación global, lo cual está bien, pero si el ciclo de impresión no se está ejecutando correctamente o el dataset no está siendo iterado por el reporte, ese acumulador nunca llega a activarse. En resumen, lo más probable en tu caso es una combinación de que el reporte se está preparando antes de que el dataset dinámico esté completamente listo, o que los QRExpr no estén dentro de una banda que realmente recorra el dataset durante la impresión, o que el dataset no esté activo en el momento de calcular las expresiones. Si quieres afinarlo al 100%, habría que ver en qué banda están esos QRExpr y en qué momento exacto abres el dataset respecto a este método de mapeo, porque ahí normalmente está la clave del fallo.

Última edición por Casimiro Noteví fecha: Hace 2 Días a las 15:54:34.
Responder Con Cita