Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-11-2006
Alexis7788 Alexis7788 is offline
Miembro
 
Registrado: sep 2006
Posts: 30
Poder: 0
Alexis7788 Va por buen camino
Quickreport, unir dos informes

Hola a todos, sé que quickreport da la opción de unir dos informes en uno solo pero por más que busco no encuentro documentación acerca de cómo poder hacer esto. ¿Alguien sabe cómo?? Gracias
Responder Con Cita
  #2  
Antiguo 17-11-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Busca en la ayuda por TCompositeReport.

Se trata de crear un composite y después añadir los informes:
(vagamente):
Código Delphi [-]
var c:TcompositeReport;
begin

   c := Tcompositereport.create(self);
   c.add(qrclientes); // añado un QuickReport que ya existe y se llama qrclientes;
   c.Add(qrDirecciones); // añado otro quickreport;
   c.PreviewModal;

FreeAndnil(c);
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 17-11-2006
Alexis7788 Alexis7788 is offline
Miembro
 
Registrado: sep 2006
Posts: 30
Poder: 0
Alexis7788 Va por buen camino
algo faltará que no consigo ver, me sale el composite vacío
Responder Con Cita
  #4  
Antiguo 18-11-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Según he visto por el foro, (que hay bastante sobre el compositeReport) tienes que poner a true la propiedad PrintifEmpty de cada informe.

Por supuesto tendrás que abrir las consultas o tablas de donde saques los datos para cada informe, parece obvio, pero igual se olvida.

Aquí tienes una guía rápida, supongo que habrás hecho eso mismo, o muy parecido.

Edito: en tu carpeta de delphi\demos tienes varios ejemplos de QR3 y uno en concreto del compositeReport

Por mi parte, nunca he usado el CompositeReport, así que no puedo darte más información.

Saludos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 24-11-2007
marlulipe marlulipe is offline
No confirmado
 
Registrado: jun 2007
Posts: 16
Poder: 0
marlulipe Va por buen camino
Unhappy Composite Report : problema!

Hola... también estoy con un problema con el composite, pero un poco diferente. Les cuento: tengo 3 formularios A, B y C

A: se llama desde el menu y se eligen alumno y curso al que pertenece para mostrar en los reports los examenes q rindio y notas
B: es llamado por A y contiene un quick report con varios datos tomados de la BD. Ademas contiene el composite report
C: contiene otro quick report que quiero adosar al reporte en A.

Hago lo siguiente, en el Form A cuando hace click en el botón para ver el reporte:

// FORM A
procedure tFormA.ButtonClick(Sender...){
if(FormB=nil) then
Application.CreateForm(TFormB, FormB);
}

// FORM B
procedure tFormB.FormCreate(Sender...){
// ... tomo datos de la BD

QRCompositeReport.Preview;

// ...
}

procedure TFormB.QRCompositeReportAddReports(Sender..);
begin
with (QRCompositeReport.Reports) do begin
Add(QuickRenFormB);
Add(FormC.QuickRenFormC);
end;
end;

En la línea de código marcada en rojo es en la cual tengo problemas, porque mi form C es nil, no está creado aún. Intenté varias cosas como crearlo antes del preview del composite pero solo me muestra el form C y luego cuando intenta hacer el preview me da error.
Nunca creo los formularios hasta que los necesito, y luego los destruyo, Sé cuál es el error pero no sé cómo solucionarlo y no sé cómo se suelen manejar uds en la creación de forms

Agradeceré muchísimo su ayuda!!! Espero que entiendan el resumido código que puse y sino no duden en preguntar!
Responder Con Cita
  #6  
Antiguo 24-11-2007
chavi chavi is offline
Miembro
 
Registrado: jun 2003
Ubicación: Santiago
Posts: 13
Poder: 0
chavi Va por buen camino
Unhappy Error

Estoy intentando el ejemplo de Lepe 1º y me da el error:

[Error] Polizas.pas(2712): Undeclared identifier: 'TCompositeReport'

Al declarar

Var
c:TCompositeReport;

Tengo que llamar alguna 'Uses'? Llamo a Printers y tampoco.
Uso QR 3.0.5

Saludos

Chavi
Responder Con Cita
  #7  
Antiguo 24-11-2007
chavi chavi is offline
Miembro
 
Registrado: jun 2003
Ubicación: Santiago
Posts: 13
Poder: 0
chavi Va por buen camino
Unhappy Error

Estoy intentando el ejemplo de Lepe 1º y me da el error:

[Error] Polizas.pas(2712): Undeclared identifier: 'TCompositeReport'

Al declarar

Var
c:TCompositeReport;

Tengo que llamar alguna 'Uses'? Llamo a Printers y tampoco.
Uso QR 3.0.5

Saludos

Chavi
Responder Con Cita
  #8  
Antiguo 24-11-2007
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Hola chavi, yo lo hago de la siguiente forma:
- Tengo un formulario para cada informe a incluir en el Composite.
- Tengo un formulario con el Composite. (en el uses deben estar los anteriores)
- Tengo un formulario principal con un botón, en el cual:
a) - Creo los forms a utilizar en el composite
b) - En cada formulario puse un procedimiento público, para que rellene el Dataset que le corresponda y lo llamo después de crear el form correspondiente
c) - Llamo al Composite para que genere el informe completo
d) - Cuando vuelve de imprimir, cierro los Dataset
e) - Elimino los forms

El composite, en su procedimiento solo tiene:
Código Delphi [-]

uses
  frmQReportTitulo,   { Form_QReportTitulo   }
  frmQReportExtremas, { Form_QReportExtremas }
  frmQReportPresion,  { Form_QReportPresion  }
  frmQReportNubes,    { Form_QReportNubes    }
  frmQReportCifrado;  { Form_QReportCifrado  }

{$R *.dfm}

procedure TForm_QReportDatos.QRCompositeReport_OnAddReports(
  Sender: TObject);
begin
{ añadir informes a la hoja }
  with QRCompositeReport do begin
       Reports.Add( Form_QReportTitulo.QuickRep_TITULO     );
       Reports.Add( Form_QReportExtremas.QuickRep_EXTREMAS );
       Reports.Add( Form_QReportPresion.QuickRep_PRESION   );
       Reports.Add( Form_QReportNubes.QuickRep_NUBES       );
       Reports.Add( Form_QReportCifrado.QuickRep_CIFRADO   );
  end;
end;
Y el evento OnClick del botón de form principal (es un poco largo, pero bueno)
Código Delphi [-]

procedure TForm_Impresion.Button__OnClick(Sender: TObject);
begin
{ impresion de los cuadernos }
  if( FormatDateTime('dd', FECHA_HOJA)='01' ) then begin
      MsgBox( 'IMPRESIÓN DE PORTADAS',
              'Se va a imprimir la portada del cuaderno'+OS_CRLF2+
              'Si desea utilizar una cartulina, pongala en la impresora.'+OS_CRLF2+
              'Pulse el botón para comenzar imprimir...',
               btnAccept, smbAtencion, btnAccept );
    { impresion de la portada del cuaderno }
      Application.CreateForm(TForm_QReportPortada, Form_QReportPortada);
      with Form_QReportPortada do begin
           RellenarPortada( DIR_MAIN+OS_Separador+USUARIO+OS_Separador, FECHA_HOJA );
           QuickRep__Portada.Preview;
           Free;
      end;
  end;
{ crear los forms que compondrán la página }
  Application.CreateForm(TForm_QReportTitulo, Form_QReportTitulo);
  with Form_QReportTitulo do begin
       PonerTituloAlInforme(       FECHA_PARTE, HAY_MYSQL,
                                   DIR_MAIN+OS_Separador+USUARIO+OS_Separador );
  end;
  Application.CreateForm(TForm_QReportExtremas, Form_QReportExtremas);
  with Form_QReportExtremas do begin
     { en el informe de EXTREMAS }
       AbrirDatasetExtremas( FECHA_HOJA, HAY_MYSQL,
                                   DIR_MAIN+OS_Separador+USUARIO+OS_Separador );
  end;
  Application.CreateForm(TForm_QReportPresion, Form_QReportPresion);
  with Form_QReportPresion  do begin
     { en el informe de PRESION  }
       AbrirDatasetPresion(  FECHA_HOJA, HAY_MYSQL,
                                   DIR_MAIN+OS_Separador+USUARIO+OS_Separador );
  end;
  Application.CreateForm(TForm_QReportNubes, Form_QReportNubes);
  with Form_QReportNubes do begin
     { en el informe de NUBES  }
       AbrirDatasetNubes(    FECHA_HOJA, HAY_MYSQL,
                                   DIR_MAIN+OS_Separador+USUARIO+OS_Separador );
  end;
  Application.CreateForm(TForm_QReportCifrado, Form_QReportCifrado);
  with Form_QReportCifrado do begin
     { en el informe de CIFRADO  }
       AbrirDatasetCifrado(  FECHA_HOJA, HAY_MYSQL,
                                   DIR_MAIN+OS_Separador+USUARIO+OS_Separador );
  end;
{ impresion de los datos de la hoja del cuaderno }
  Application.CreateForm(TForm_QReportDatos, Form_QReportDatos);
  with Form_QReportDatos do begin
       QRCompositeReport_.Preview;
       Free;
  end;
{ eliminar los forms que compondrán la página }
  with Form_QReportTitulo do begin
       Free;
  end;
  with Form_QReportExtremas do begin
       CerrarDatasetExtremas( HAY_MYSQL );
       Free;
  end;
  with Form_QReportPresion  do begin
       CerrarDatasetPresion(  HAY_MYSQL );
       Free;
  end;
  with Form_QReportNubes    do begin
       CerrarDatasetNubes(    HAY_MYSQL );
       Free;
  end;
  with Form_QReportCifrado  do begin
       CerrarDatasetCifrado(  HAY_MYSQL );
       Free;
  end;
end;
Espero que te sirva

Saludos
Salvica
Responder Con Cita
  #9  
Antiguo 25-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Además de crear el FormC, tendrás que abrir las consultas,
Código Delphi [-]
procedure TFormB.QRCompositeReportAddReports(Sender..);
begin
    with (QRCompositeReport.Reports) do begin

      Add(QuickRenFormB);

   if not Assigned(FormC) then
   begin
      FormC := TFormC.Create(self);
      FormC.ABrirConsultas;    
      Add(FormC.QuickRenFormC);
    end;
end;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #10  
Antiguo 25-11-2007
chavi chavi is offline
Miembro
 
Registrado: jun 2003
Ubicación: Santiago
Posts: 13
Poder: 0
chavi Va por buen camino
Cool Persiste el Error

Lo siento pero me sigue saliendo el error.
[Error] Prueba.pas(2742): Undeclared identifier: 'QRCompositeReport'

Este desarrollo lo tengo en D5, será que no soporta el CompositeReport?

Ya no se que pensar, pues cualquier alusión a él me da error.
Tendré que incluir alguna otra librería en Uses?

Gracias y saludos

Chavi
Responder Con Cita
  #11  
Antiguo 25-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Cuando tengas un error de ese tipo, busca en la ayuda de delphi (o de QuickReports en este caso) para saber donde está declarado.

O bien, añades un Form nuevo, dentro de éste añades el CompositeReport de la pestaña QReport, y te fijas en los "uses" nuevos que ha añadido.

En este caso te falta el uses QuickRpt.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #12  
Antiguo 25-11-2007
chavi chavi is offline
Miembro
 
Registrado: jun 2003
Ubicación: Santiago
Posts: 13
Poder: 0
chavi Va por buen camino
Red face Desde donde lo llamo

Perdona pero es la primera vez que utilizo este componente. A ver si me aclaro; yo tengo dos Reports, uno en cada formulario distinto, luego tengo otro form a parte desde el que tengo un boton de impresión, que llama a uno, otro o los dos reports juntos, por lo que quiero hacer esto. Estoy intentando hacer esto en el form del boton desde el que se hace la llamada.
var
c:TQRcompositeReport;
begin
c := TQRcompositereport.create(self);
c.Reports.Add(FrmListPoliza.QRPoliza);
c.Reports.Add(FrmCondicionesPoliza.QRListado); c.Preview;
end;
Tengo que incluir el componente TQRcompositeReport en cada uno de los form que contienen los Report que quiero unir?

Gracias y Saludos

Chavi
Responder Con Cita
  #13  
Antiguo 26-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
No. El compositeReport es un mecanismo para poder añadir 3, 4 o 20 QuickReports en 1 solo (Al igual que tienes 1 combobox, pero puedes tener 20 elementos en la lista desplegable).

Tienes 2 informes llamados A y B, cada uno en un form (no tienes por qué tener esos forms, en File -> new -> QReport, añades un QuickReport sin tener que añadir un form donde incrustarlo).

Ahora tienes el FormC donde añades el qrCompositeReport y ahí tendrás que hacer un uses de los otros dos, es decir:
Código Delphi [-]
Unit UnitC; //donde estará el qrCompsiteReport (1 solo en toda la aplicación,
//           para entendernos )

interface

uses UnitA, UnitB; //necesario para acceder a los otros 2 QuickReports, lógico.

....
var
c:TQRcompositeReport;
begin
  c := TQRcompositereport.create(self);
  c.Reports.Add(FrmListPoliza.QRPoliza);
  c.Reports.Add(FrmCondicionesPoliza.QRListado); 
  c.PreviewModal;
  FreeAndNil(c);
end;

Ahora estas creando el qrComposite por código, pero en la paleta QReport tienes el componente, lo pegas en tu Form y ya te olvidas de crear y/o liberar.

En tu carpeta de delphi\Demos debes tener ejemplos de QuickReport versión 2 y 3, (son algo complejos) pero seguro que te ayudan en algo.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #14  
Antiguo 26-11-2007
chavi chavi is offline
Miembro
 
Registrado: jun 2003
Ubicación: Santiago
Posts: 13
Poder: 0
chavi Va por buen camino
Thumbs up Lo voy a probar así

Muchísimas gracias por tu explicación.
Voy a probarlo y ya te comentaré.

Saludos

Chavi
Responder Con Cita
  #15  
Antiguo 26-11-2007
chavi chavi is offline
Miembro
 
Registrado: jun 2003
Ubicación: Santiago
Posts: 13
Poder: 0
chavi Va por buen camino
No se que hago mal

Esto es lo que hago al pulsar el botón de imprimir desde el Form que llamo a los que quiero unir. Saber que al imprimir uno a uno funciona correctamente desde aqui.
Puse el QrCompositeReport en este Form.

Veis algo que yo no vea?



procedure TFrmPolizas.TBtnImprimirClick(Sender: TObject);
var
Valores: tInifile;
ImprCGPolizas : String;
begin
Valores := TIniFile.Create('DatosGestion.ini');
ImprCGPolizas := Valores.ReadString('Polizas', 'Condiciones_Generales', '0');
Valores.Free;
// Procedimiento para cubrir valores
ImprimirPoliza;
QrCompositeReport.Reports.Clear;
QrCompositeReport.Reports.Add(FrmListPoliza.QRPoliza);
QrCompositeReport.Reports.Add(FrmCondicionesPoliza.QRListado);
QrCompositeReport.Preview;
end;


Gracias por todo

Chavi
Responder Con Cita
  #16  
Antiguo 26-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
El que ha hecho mal las cosas soy yo. Ya dije que no he usado nunca el Composite, y entendí mal el funcionamiento.

Al parecer tienes que hacerlo así:
Código Delphi [-]
procedure TFrmPolizas.TBtnImprimirClick(Sender: TObject);
var
  Valores: tInifile;
  ImprCGPolizas : String;
begin
  Valores := TIniFile.Create('DatosGestion.ini');
  ImprCGPolizas := Valores.ReadString('Polizas', 'Condiciones_Generales', '0');
  Valores.Free;
// Procedimiento para cubrir valores
  ImprimirPoliza;
  QrCompositeReport.Preview;
end;

// En tu compositeReport, inspector de objetos, evento OnAddReports, doble clic
procedure TFrmPolizas.QRComposite1AddReports(...);
begin
  QrCompositeReport.Reports.Clear;
  QrCompositeReport.Reports.Add(FrmListPoliza.QRPoliza);
  QrCompositeReport.Reports.Add(FrmCondicionesPoliza.QRListado);
end;
El evento OnAddReports salta cuando se va a realizar el OnPreview del Composite, y se le debe decir en ese evento los informes que debe añadir.

... La verdad no se parece a la forma de trabajar de Delphi, así que no resulta nada intuitivo .

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #17  
Antiguo 26-11-2007
chavi chavi is offline
Miembro
 
Registrado: jun 2003
Ubicación: Santiago
Posts: 13
Poder: 0
chavi Va por buen camino
Thumbs up Funcionó

Ahora si

Muchas gracias por todo

Saludos

Chavi
Responder Con Cita
Respuesta



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
Unir imagenes jpg alain Gráficos 6 09-04-2008 22:10:29
Unir dos informes - Crystal Reports TONIAM Impresión 2 04-07-2006 16:18:57
Unir dos DBgrids Nbull Conexión con bases de datos 2 02-02-2006 09:19:00
Unir tres qry alcides SQL 6 11-07-2005 17:34:33
Unir Columnas vtdeleon SQL 4 15-06-2005 00:34:49


La franja horaria es GMT +2. Ahora son las 22:23:28.


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