Ir al contenido


Foto

[RESUELTO] Error al Preparar un Reporte ( Qreport )


  • Por favor identifícate para responder
8 respuestas en este tema

#1 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes
  • LocationMéxico

Escrito 03 noviembre 2010 - 01:38

Buen dia compañeros, tengo un problema con el Qreport y el QRCompositeReport, en mi aplicación hay una parte del programa donde manda imprimir 3 copias de 2 Reportes que estan integrados dentro de un QRCompositeReport, la forma de agregar estos 2 reportes al QRCompositeReport es la siguiente....

Dentro del evento onAddReports tengo lo siguiente:


delphi
  1.   with QRCompositeReport.Reports do begin
  2.     Add(qrReporte1);
  3.     Add(qrReporte2);
  4.   end;



La forma para imprimir los reportes es dentro de 1 ciclo, con el fin de que la 1era impresión salga la leyenda ORIGINAL y las otras 2 diga COPIA:


delphi
  1.   ..
  2.   // Asigna valores a etiquetas (qrLabel ) ejemplo qrLabel1.Caption := 'Cliente:'
  3.   PreparaQRLabel;
  4.  
  5.   // Iniciamos Ciclo 
  6.   for x := 1 to 2 do begin
  7.  
  8.     // Original
  9.     if x = 1 then
  10.         QRCompositeReport.PrinterSettings.Copies := 1 // Original
  11.     else
  12.         QRCompositeReport.PrinterSettings.Copies := 2; // Copias
  13.  
  14.     // Preparar Reporte para tomar el Num de páginas
  15.     qrReporte1.Prepare;
  16.  
  17.     NPages := qrReporte1.QRPrinter.PageCount; 
  18.  
  19.     // Imprimimos
  20.     QRCompositeReport.Print; 
  21.  
  22.   end;



En ocasiones imprime muy bien las 3 impresiones, pero en otras no, marca el error que les señalo en la imagen adjunta a este tema, y cuando marca el error solo imprime la ORIGINAL, el error salta dentro de la función del QRPrinter:


delphi
  1. function TCustomQuickRep.PrepareQRPrinter : boolean;
  2. var
  3.   aReceiver : TWinControl;
  4. begin
  5.   Result := Available;
  6.   if Result then
  7.   begin
  8.     if assigned(FQRPrinter) then
  9.       AReceiver := QRPrinter.Client  [b]<<- Aqui es donde marca el error[/b]
  10.     else
  11.       AReceiver := nil;
  12.       // standard printer option
  13.     QRPrinter := TQRPrinter.Create( self );
  14.     QRPrinter.Client := AReceiver;
  15.     QRPrinter.AfterPreview := PreviewFinished;
  16.     QRPrinter.AfterPrint := PrintFinished;
  17.   end;
  18. end;



Archivos adjuntos


  • 0

#2 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 03 noviembre 2010 - 04:04

No será que estas intentando usar tu objeto QRPrinter antes de crearlo ????
El error que muestras es común cuando se hacer referencia a un objeto no creado... (y)
Saludox ! :)
  • 0

#3 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes
  • LocationMéxico

Escrito 03 noviembre 2010 - 06:28

Asi es compañero, pero ese objeto me imagino que se llama sólo al llamar:


delphi
  1. qrReporte1.Prepare;



Y qrReporte1 ya esta creado, lo tengo en el mismo formulario donde se llama.



  • 0

#4 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 04 noviembre 2010 - 06:50



delphi
  1. function TCustomQuickRep.PrepareQRPrinter : boolean;
  2. var
  3.   aReceiver : TWinControl;
  4. begin
  5.   Result := Available;
  6.   if Result then
  7.   begin
  8.     if assigned(FQRPrinter) then
  9.       AReceiver := QRPrinter.Client  [b]<<- Aqui es donde marca el error[/b]
  10.     else
  11.       AReceiver := nil;
  12.       // standard printer option
  13.     QRPrinter := TQRPrinter.Create( self );
  14.     QRPrinter.Client := AReceiver;
  15.     QRPrinter.AfterPreview := PreviewFinished;
  16.     QRPrinter.AfterPrint := PrintFinished;
  17.   end;
  18. end;



Si te fijas en ese codigo estas llamando al QrPrinter antes de crearlo, eso es lo que te quizo decir Fenareth.... prueba esta modificación



delphi
  1. function TCustomQuickRep.PrepareQRPrinter : boolean;
  2. var
  3.   aReceiver : TWinControl;
  4. begin
  5.   Result := Available;
  6.   if Result then
  7.   begin
  8.   QRPrinter := TQRPrinter.Create( self ); //Se crea el QRPrinter antes de utilizarlo
  9.     if assigned(FQRPrinter) then
  10.       AReceiver := QRPrinter.Client  [b]<<- Aqui es donde marca el error[/b]
  11.     else
  12.       AReceiver := nil;
  13.       // standard printer option
  14.     QRPrinter.Client := AReceiver;
  15.     QRPrinter.AfterPreview := PreviewFinished;
  16.     QRPrinter.AfterPrint := PrintFinished;
  17.   end;
  18. end;


  • 0

#5 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes
  • LocationMéxico

Escrito 04 noviembre 2010 - 09:43

Tienes toda la razon, lo raro es que esa parte del código es del componente del QuickReport, por lo que de seguro es un Bug detectado :) , gracias.... voy a probarlo.
  • 0

#6 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes
  • LocationMéxico

Escrito 20 noviembre 2010 - 01:20

Muchas Gracias eduarcol ya no me ha marcado el error después de arrelgar la función TCustomQuickRep.PrepareQRPrinter .
  • 0

#7 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 20 noviembre 2010 - 03:07

Me alegra te haya servido, voy a marcarlo como resuelto
  • 0

#8 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 20 noviembre 2010 - 03:47

analizando mejor la cosa me he dado cuenta que el error en la función fue por la omisión de una "F", ellos preguntan si el objeto esta asignado para poder trabajar con el, pero en lugar de trabajar con el preguntaron trabajan con otro cuya diferencia es una letra, asi que propongo que mejor dejes el codigo de esta forma:



delphi
  1. function TCustomQuickRep.PrepareQRPrinter : boolean;
  2. var
  3.   aReceiver : TWinControl;
  4. begin
  5.   Result := Available;
  6.   if Result then
  7.   begin
  8.     if assigned(FQRPrinter) then
  9.       AReceiver := FQRPrinter.Client  [b]<<- Aqui es donde marca el error[/b]
  10.     else
  11.       AReceiver := nil;
  12.       // standard printer option
  13.     QRPrinter := TQRPrinter.Create( self );
  14.     QRPrinter.Client := AReceiver;
  15.     QRPrinter.AfterPreview := PreviewFinished;
  16.     QRPrinter.AfterPrint := PrintFinished;
  17.   end;
  18. end;


Nota que ahora al AReceiver se le asigna el FQrPrinter en lugar del QrPrinter, sinceramente no se cual pueda ser la diferencia pero si te puedo asegurar que originalmente fue pensado asi.

Cualquier cosa avisas
  • 0

#9 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes
  • LocationMéxico

Escrito 22 noviembre 2010 - 11:14

ok, de acuerdo, lo voy a dejar asi, gracias....
  • 0




IP.Board spam blocked by CleanTalk.