Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 3 Días
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.015
Poder: 22
oscarac Va por buen camino
reportes dinamicos.....

estoy probando delphi MVC sin librerias y tengo un problema con un reporte
genero el query de manera dinamica y en el reporte "seteo" los campos
Código Delphi [-]
procedure TrepListadoMensualCuentaNormal.MapearCamposReporte(ADataSet: TDataSet);
begin
  if ADataSet = nil then Exit;

  
  qrepListadoMensualCuentaNormal.DataSet := ADataSet;
  qrb_GrupoCuenta.Master                 := qrepListadoMensualCuentaNormal;
  qrb_GrupoCuenta.Expression             := 'Cuenta'; // Limpio, sin prefijos


  qrdbtxtLibro.DataSet            := ADataSet;
  qrdbtxtLibro.DataField          := 'Libro';

  qrdbtxtVoucher.DataSet          := ADataSet;
  qrdbtxtVoucher.DataField        := 'Voucher';

  qrdbtxtRgt.DataSet              := ADataSet;
  qrdbtxtRgt.DataField            := 'RGT';

  qrdbtxtDocumento.DataSet        := ADataSet;
  qrdbtxtDocumento.DataField      := 'Documento';

  qrdbtxtFechaDoc.DataSet         := ADataSet;
  qrdbtxtFechaDoc.DataField       := 'FechaDocumento';

  qrdbtxtFechaVencimiento.DataSet := ADataSet;
  qrdbtxtFechaVencimiento.DataField := 'FechaVencimiento';

  qrdbtxtRazonSocial.DataSet      := ADataSet;
  qrdbtxtRazonSocial.DataField    := 'RazonSocial';

  qrdbtxtGlosa.DataSet            := ADataSet;
  qrdbtxtGlosa.DataField          := 'glosa';

  qrdbtxtmnd.DataSet              := ADataSet;
  qrdbtxtmnd.DataField            := 'Mnd';

  qrdbtxtCCosto.DataSet           := ADataSet;
  qrdbtxtCCosto.DataField         := 'CCosto';

  // Asignación de importes con limpieza de propiedad previa
  qrdbtxtDEBE.DataSet             := ADataSet;
  qrdbtxtDEBE.DataField           := 'DEBE';
  qrdbtxtDEBE.Mask                := '#,##0.00;-#,##0.00;0.00';

  qrdbtxthaber.DataSet            := ADataSet;
  qrdbtxthaber.DataField          := 'HABER';
  qrdbtxthaber.Mask               := '#,##0.00;-#,##0.00;0.00';


  qrexSumaDebe.Master  := qrepListadoMensualCuentaNormal;
  qrexSumaHaber.Master := qrepListadoMensualCuentaNormal;
  QRExpr6.Master       := qrepListadoMensualCuentaNormal;

  qrexSumaDebe.ResetAfterPrint  := False;
  qrexSumaHaber.ResetAfterPrint := False;
  QRExpr6.ResetAfterPrint       := False;

  qrexSumaDebe.Expression  := 'SUM(DEBE)';
  qrexSumaHaber.Expression := 'SUM(HABER)';
  QRExpr6.Expression       := 'SUM(DEBE) - SUM(HABER)';


  qrexSumaDebe.Mask  := '#,##0.00;-#,##0.00;0.00';
  qrexSumaHaber.Mask := '#,##0.00;-#,##0.00;0.00';
  QRExpr6.Mask       := '#,##0.00;-#,##0.00;0.00';
end;


me muestra el detalle, perfecto, pero los totales no es decir SUM(DEBE) o SUM(HABER) o la diferencia entre ellos no las muestra, no se si me estoy haciendo entender
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #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
Poder: 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
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
arrays dinamicos Chompiras Varios 8 14-07-2015 22:49:51
Paquetes dinamicos xerkan Varios 14 22-10-2007 16:05:58
Forms dinámicos juliobuitrago Varios 8 16-04-2007 18:47:25
Arreglos Dinamicos diniremix Varios 3 23-05-2006 19:48:31
reportes dinamicos en quicjreport janettin_8 Impresión 3 15-04-2004 17:34:10


La franja horaria es GMT +2. Ahora son las 01:54:06.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi