Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-12-2009
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Question CompositeReport con reportes anidados

Bueno, la cosa viene así.
Estoy haciendo un software para un campo de cria de vacas. Hay dos reportes diferentes Pesajes y Enfermedades.

Me están pidiendo que muestre un "informe completo" (pesajes + enfermedades) para toda la colección de animales.
Para que se entienda mejor, por cada animal debo mostrar el informe combinado. Por supuesto, para el propietario esto es un solo informe que ve en la vista previa e imprime.
Lo que hice fue poner un CompositeReport y a través de un for ir cambiando los valores de cada animal al momento del Add.

Un poco mas gráfico sería...

Código Delphi [-]
procedure TFrmBuscarPesajes.qrcrInformeMasivoAddReports(Sender: TObject);
begin
  With qrcrInformeMasivo.Reports, datamodule1, grillaBovinos1 do
  begin
    try
    //Iniciamos la iteración
      for i:= 1 to rowCount - 2 do
      begin
      //Con el pase de las variables globales, se evita el pase de las mismas
      //en cada informe por separado...
        globCodCaravana:=strToInt(cells[0, i]);
        Globcaravana:=cells[1, i];
        globMarca:=cells[2, i];
        globtatuaje:=cells[3, i];
        globcabana:=cells[4, i];
        globFcha_Nac:=cells[5, i];
        globtipo_bovino:=cells[6, i];
        globRaza:=cells[8, i];
        globFoto:=cells[7, i];
       //Agregamos una carátula por ser informe general
        Add(FrmInfGral.ReporteGral);
      //Informes comunes a todos...
        Add(FrmInPesajes.ReportePesajes);
        Add(FrmInfEnfermededes.ReporteEnfermedades);
     end; //del for...
    except
      raise;
    end;
  end; //del with
end;

Las variables "glob..." son las que ponen los diversos datos en los reportes.
Por ejemplo, en el caso de tener 10 vacas, me salen 10 hojas, pero los datos que pone en las 10 hojas corresponden a la última vaca de la lista.

La llamada al composite es de la siguiente manera:

Código Delphi [-]
procedure TFrmBuscarPesajes.btnInformeMasivoClick(Sender: TObject);
begin
  with GrillaBovinos1 do
  begin
    if RowCount > 2 then
    begin
      try
      //Hacemos la composición de informes...
        qrcrInformeMasivo.Preview;
      except
        on e:EMDOError do
      begin
        mErrores(e, 'Informe general no pudo completarse.', 'Informes');
      end;
      end;
    end
    else
    begin
      MessageBox(handle,'La grilla está vacía', 'Informe general masivo.',
        MB_OK + MB_ICONERROR);
    end;
  end;
end;
__________________
Uno es responsable de lo que hace y de lo que omite hacer.

Última edición por santiago14 fecha: 08-12-2009 a las 01:41:44. Razón: Errores en código
Responder Con Cita
  #2  
Antiguo 08-12-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Y que problemas tienes?
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #3  
Antiguo 08-12-2009
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Cita:
Empezado por rgstuamigo Ver Mensaje
Y que problemas tienes?
Saludos...
El problema está en que cuando muestro el informe (composite.preview) me salen todas las hojas con los datos del último animal de la lista.
Si tengo 10 animales, la composición del informe da por resultado 10 hojas, pero en todas me salen los datos de la última vaca.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #4  
Antiguo 09-12-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por santiago14 Ver Mensaje
El problema está en que cuando muestro el informe (composite.preview) me salen todas las hojas con los datos del último animal de la lista.
Si tengo 10 animales, la composición del informe da por resultado 10 hojas, pero en todas me salen los datos de la última vaca.
Lo que pasa es la última vaca quiere adueñarse de todo, es decir llamar la atencion de que solo ella existe y nadie mas.......No mentira es una broma..
Talves estas haciendo algo incorrecto en alguna parte de tu codigo, de tal manera que solo estas adicionando solo el reporte de la ultima Vaca o repitiendo la misma adicion.
En todo caso siempre es bueno antes de previsualizar llamar al método Prepare de tu CompositeReport para preparar el reporte.
Código Delphi [-]
...
qrcrInformeMasivo.Prepare;//Preparamos el reporte con anticipacion
qrcrInformeMasivo.Preview;...
Si con eso no se soluciona, pues deberias revisar bien código en que parte esta fallando.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #5  
Antiguo 09-12-2009
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Me parece a mí que eso está mal diseñado, aunque puedo equivocarme.

Digamos tú tienes un dataset bovinos, los 2 informes hacen uso de él, ahora en el evento AddReport del composite es donde tienes que agregar los informes (¡¡pero no los datos !!). Cuando haces el preview, entonces es cuando se recorre el dataset bovinos y para cada registro aparece el composite, es decir, los 2 quickreports en la misma página.

Creo tu error está en suponer que en el evento OnAddReports realmente se construye el informe con los datos. No, ahí no se contruye nada, solo se monta el esquema del informe. Los datos se unen al informe al llamar al Preview del composite.

La forma en que funciona ahora mismo es la correcta. Es decir, muestra los datos de 1 sólo registro porque el dataset está apuntando al penúltimo registro y te muestra 10 folios porque has añadido un monton de informes al composite.

Creo no me he explicado, el evento OnAddReports debe ser:
Código Delphi [-]
procedure TFrmBuscarPesajes.qrcrInformeMasivoAddReports(Sender: TObject);
begin
  With qrcrInformeMasivo.Reports, datamodule1, grillaBovinos1 do
  begin
       //Agregamos una carátula por ser informe general
        Add(FrmInfGral.ReporteGral);
      //Informes comunes a todos...
        Add(FrmInPesajes.ReportePesajes);
        Add(FrmInfEnfermededes.ReporteEnfermedades);

  end; //del with
end

Ese evento no es para iterar sobre los datos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 09-12-2009
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje
Me parece a mí que eso está mal diseñado, aunque puedo equivocarme.

Digamos tú tienes un dataset bovinos, los 2 informes hacen uso de él, ahora en el evento AddReport del composite es donde tienes que agregar los informes (¡¡pero no los datos !!). Cuando haces el preview, entonces es cuando se recorre el dataset bovinos y para cada registro aparece el composite, es decir, los 2 quickreports en la misma página.

Creo tu error está en suponer que en el evento OnAddReports realmente se construye el informe con los datos. No, ahí no se contruye nada, solo se monta el esquema del informe. Los datos se unen al informe al llamar al Preview del composite.

La forma en que funciona ahora mismo es la correcta. Es decir, muestra los datos de 1 sólo registro porque el dataset está apuntando al penúltimo registro y te muestra 10 folios porque has añadido un monton de informes al composite.

Ese evento no es para iterar sobre los datos.
Puedes tener razón y que realmente esté mal diseñada la cosa. Ahora, si no puedo agregar los datos en el AddReports. ¿Cómo hago para mostrar los datos de los animales en el reporte?

Saludos.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
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
Select anidados jaimeh SQL 13 08-12-2009 20:34:13
Datasets anidados Gong Conexión con bases de datos 2 20-07-2007 16:05:41
Clientdatasets anidados con ADO Johnny Q Conexión con bases de datos 4 03-11-2005 02:53:25
Filtros anidados.... Phacko Conexión con bases de datos 2 19-03-2005 19:41:31
Select anidados Ignacio SQL 5 23-02-2004 16:33:30


La franja horaria es GMT +2. Ahora son las 20:38:54.


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