Ver Mensaje Individual
  #14  
Antiguo 17-09-2017
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Reputación: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Lo que hago yo con los reportes es tener un DataSet para ellos mismos.

Los componentes del Form (DBNavigator, DBGrid, DBEdit, etc.) tiran de un DataSource que a su vez tira de un DataSet.
Este DataSet se utiliza para hacer las inserciones, modificaciones y bajas.

Para los listados tengo otro DataSet que previo al listado se filtra según lo que se desee listar.
De esta manera, el DataSet de trabajo mantiene la posición y estado, mientras el DataSet de listado se va moviendo por los registros filtrados.

En tu caso, parece que el DataSet de trabajo es ADOQuery1.
Prueba crear un segundo DataSet ADOListado, en el que estén los registros que quieres listar.
El QuickReport y los componentes QRDBText deben tirar de ADOListado.
Utiliza QuickRep1BeforePrint para poner en visible/invisible el componente que corresponda a medida que va avanzando por los registros a listar.

Mirando en internet, he visto que también exite el método OnBeforePrint para la banda.
http://www.admind.info/help/system/i...ml?tqrband.htm

Supongo que es allí donde debes poner el código, ya que la banda es la que va pasando por cada registro y es en ese momento donde el valor de cession es el del regisro que se está imprimiendo.
Código Delphi [-]
procedure [Form_o_Datamodule].Listar;
begin
   // Filtrar ADOListado
   ADOListado.Close;
   ...
   ADOListado.Open;

   // Asignar DataSet
   FRMRELEVE.QuickRep1.DataSet:=ADOListado;

   FRMRELEVE.QRDBText1.DataSet:= ADOListado;
   FRMRELEVE.QRDBText1.DataField:='description' ;

   FRMRELEVE.QRDBText3.DataSet:= ADOListado;
   FRMRELEVE.QRDBText3.DataField:='notetotal';

   FRMRELEVE.QRDBText2.DataSet:= ADOListado;
   FRMRELEVE.QRDBText2.DataField:='notetotal';

   // MostrarListado
   FRMRELEVE.QuickRep1.Preview;
end;

// Metodo OnBeforePrint de la banda que muestra QRDBText 2 y 3.
procedure [Form_o_Datamodule].QRBand1BeforePrint(Sender: TObject; var PrintBand: Boolean);
begin
   // Si el registro que estoy imprimiendo es de cession II se muestra por QRDBText3
   if ADOListado.FieldValues['cession'] ='II' then
   begin
      FRMRELEVE.QRDBText3.Visible := True;
      FRMRELEVE.QRDBText2.Visible := False;
   end 
   else
   // Si el registro que estoy imprimiendo es de cession I se muestra por QRDBText2
   if ADOQuery1.FieldValues['cession'] ='I' then
   begin
      FRMRELEVE.QRDBText3.Visible := False;
      FRMRELEVE.QRDBText2.Visible := True;
   end;
end;
Responder Con Cita