Ver Mensaje Individual
  #5  
Antiguo 17-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 31
Lepe Va por buen camino
Uff, vaya lío tienes ¿eh?

He editado este mensaje varias veces, espero que veas el definitivo.
En el datamodule:
Código Delphi [-]
var
    //Reporte de prueba
    Titulo : TRContinuaTitulo1;
    Agrupado : TRAgrupado;
    ReporteTotales : TRTotales;
    ReporteIVA : TRIVAS;

 implementation  // ojo esto es importante, declaramos las variables en la
// parte interface, para que sean visibles desde fuera

// no sé como lo tienes, porque no has dado referencias, no sé donde tenías 
//este código. Así queda claro.

En esa unidad tuya que no dices como se llama ni que hace :
Código Delphi [-]
if TipoFactura = 'Agrupada' then
  Begin
    try
    datam.Titulo := TRContinuaTitulo1.Create(Nil);
    datam.Agrupado := TRAgrupado.Create(Nil);
    datam.ReporteTotales := TRTotales.Create(Nil);
    datam.ReporteIVA := TRIVAS.Create(Nil);
    with datam.Titulo do
    Begin
      //Consulta de impresion
        Query1.Close;
        Query1.SQL.Clear;
        Query1.SQL.TexT := 'SELECT * FROM FACTURATOTALES(' + inttostr(Factura) + ' )';
        Query1.Active := True;
       End;
    with datam.Agrupado do
    Begin
       ///Agrupo los productos de la Orden de servicio
        Agrupado.Close;
        Agrupado.SQL.Clear;
        Agrupado.SQL.Add('SELECT I.Grupo As Grupo, SUM(I.Valor) AS Valor FROM Servicio S, Orden_Servicio O, ItemServicio I');
        Agrupado.SQL.Add('WHERE N_Factura = '+ inttostr(Factura) +' AND S.Codigo = I.Servicio AND I.Orden = N_Orden AND I.Servicio = S.Codigo GROUP BY I.Grupo');
        Agrupado.Active := True;
     
    End;

    with datam.ReporteTotales do
    Begin
       //Totales de la Factura
        Totales.Close;
        Totales.SQL.Clear;
        Totales.SQL.Text := 'SELECT * FROM TOTALFACTURA ('+ inttostr(Factura) + ')';
        Totales.Active := True;
 
    End;

    with datam.ReporteIVA DO
    bEGIN
       //Totales de la Factura
        IVAS.Close;
        IVAS.SQL.Clear;
        IVAS.SQL.Text := 'SELECT * FROM TOTALFACTURA1 ('+ inttostr(Factura) + ')';
        IVAS.Active := True;
    END;
    //ahora añadimos al qrComposite todos los informes (reportes)
   qrCompositeReport1.Reports.Add(datam.Titulo);
   QRCompositeReport1.Reports.Add(datam.Agrupado);
   QRCompositeReport1.Reports.Add(datam.ReporteIVA);
   QRCompositeReport1.Reports.Add(datam.ReporteTotales);

       qrCompositeReport1.PreviewMODAL; // modal por fuerza mayor  
     finally
      QRCompositeReport1.Reports.Clear;
       FreeAndNil(datam.Titulo);
       FreeAndNil(datam.Agrupado);
       FreeAndNil(datam.ReporteTotales);
      ¿el de iva no lo liberas?? ¿por qué?
     end;
   end;

El evento OnAddReport del Qrcomposite reports se ejecuta cuando haces esta línea:
Código Delphi [-]
qrCompositeReport1.Reports.Add(titulo);
pero eso lo haces dentro del mismo evento OnAddReports, así que:
- No se ejecuta nunca (por eso no entra en el evento OnAddReports.
- Si se llega a ejecutar alguna vez, dará recursión (desbordado de pila).

Para lo que quieres, no debes usar el evento OnAddReports para nada.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 17-11-2007 a las 15:18:15.
Responder Con Cita