Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   problemas en un informe con QuickReport (https://www.clubdelphi.com/foros/showthread.php?t=36012)

Goyo 28-09-2006 22:35:31

problemas en un informe con QuickReport
 
quiero imprimir un informe con quickreport, tengo dos tablas: Vehiculos (NumeroVehiculo, Placas, Marca, Tipo, Modelo, Serie, Cilindros, ResguardoA) y BitacoraVehiculos (Clave, NumeroVehiculo, FechadeServicio, ConceptoReparacion, DiasComision,LitrosGasolina, Importe, ImporteTotal).

La tabla maestra (podriamos llamarla así es la de Vehiculos, que es mi catalogo de vehiculos) y la tabla de detalle es BitacoraVehiculos (donde llevo todos los gastos por gasolina o reparaciones que genera un vehiculo en un año), como pueden ver en ambas tablas tengo la clave NumeroVehiculo este es un campo Alfanumerico de 3 ('017', '020', '099', '100',... etc) que como enlazo los datos de tabla vehiculo y grabo unicamente el numero del vehiculo en la tabla de Bitacora Vehiculos.

Bueno aqui les explico en problema...

Tengo un formato de informe que en la parte superior llevará todos los datos del vehiculo: Placas _______, Numero Vehiculo _________, Marca _________, Tipo _________, Modelo ___________, Serie __________, Cilindros ___________, Resguardo a _________, posteriormente, llevará un encabezado: de la siguiente manera: | Fecha | Concepto Reparaciones | Dias Comision | Litros Gasolina | Importe | Importe Acumulado |
donde debajo de cada encabezado llevará todos los detalles de los gastos de los vehiculos, donde voy a imprimir los campos: Fecha, ConceptoReparaciones, DiasComision, LitrosGasolina, Importe, ImporteAcumulado

como hacerlo para que en la parte superior del reporte me de el titulo principal de mi compañia, posteriormente los datos del vehiculo, enseguida en encabezado los detalles y posteriormente los detalles del vehiculo. Osea que si quiero imprimir el vehiculo '050' me de el reporte del vehiculo con todos sus detalles, pero solo los de ese vehiculo.

Caral 28-09-2006 22:55:12

Hola Goyo
Que sentencia sql usas para llamar al qrepor?
Lo llamas desde un from o que?
Es dificil atender a una pregunta si no hay por lo menos un pedazo de codigo en el que digas por ejemplo:
Aqui:// llamo al reporte
Aqui:// Hago esto
Aqui:// Ect. Etc. Etc.
Podria imaginar un codigo que hicira esto de muchas formas, pero sin datos. Creo si mas no recuerdo trabajas con IB , bueno esto ya es un comienzo, como quieres que alguien mas te ayude si no te explicas lo mas completo posible. para mi es con codigo.
Saludos

Goyo 29-09-2006 16:13:03

aqui esta el codigo desde donde lo llamo... (las tablas son de Paradox)
Código Delphi [-]
procedure TFrmImprimirVehiculo.SpeedButton1Click(Sender: TObject);
Var Filtro : String;
    consulta : string;
begin
  If (DBNumeroVehiculo.Text <> 'Todos')  then
    Begin
    try
     FrmReporte1:=TFrmReporte1.Create(self);
    consulta:='SELECT NumeroVehiculo FROM BitacoraVehiculos RIGHT JOIN Vehiculos ON BitacoraVehiculos.NumeroVehiculo = Vehiculos.NumeroVehiculo WHERE Vehiculos.NumeroVehiculo ='+chr(39)+DBNumeroVehiculo.Text+chr(39);
  FrmReporte1.Query1.SQL.Add(consulta);
  FrmReporte1.query1.Active:=False;
  FrmReporte1.query1.Active:=True;
  If RadioGroup1.ItemIndex = 0 then FrmReporte1.QuickRep1.Print
      else FrmReporte1.QuickRep1.Preview
           finally
           FrmReporte1.QuickRep1.Free;
        end;
   end;
end;

en mi formato reporte tengo un Query, en el quickreport tengo los siguientes componentes: Query1 en su propiedad DataBaseName tengo: Datos

QuickRep1 en su propiedad DataSet tengo el Query1

QRBand1 en su propiedad BandType = rbPageHeader "aqui tengo definidos el nombre y logotipo de la compañia donde laboro" y aqui imprimo los datos del vehiculo (de la tabla Vehiculos): Placas _______, Numero Vehiculo _________, Marca _________, Tipo _________, Modelo ___________, Serie __________, Cilindros ___________, Resguardo a _________.

QRBand2 en su propiedad BandType = rbColumnHeader "aqui tengo solo los tipos de los detalles (encabezado de los detalles)
| Fecha | Concepto Reparaciones | Dias Comision | Litros Gasolina | Importe | Importe Acumulado |

QRBand3 en su propiedad BandType = rbDetail "aqui imprimo los campos de detalles de cada vehiculo" de la tabla Bitacora:
Fecha, ConceptoReparaciones, DiasComision, LitrosGasolina, Importe, ImporteAcumulado

.... espero que ahora si me entiendas mejor...

Caral 29-09-2006 17:52:48

Hola Goyo
Bueno empecemos con esto:
Aqui voy a modificar algunas cosas que me parece sobran o no se necesitan,
por ejemplo la variable Filtro no la usas en ninun momento y la variable consulta no se necesita.
Ademas de implementar el uso del nombre de la empresa y fecha en el reporte, recuerda a los 45 ya casi ni se ve tenme paciencia.
Esto va a llamar al reporte:
Código Delphi [-]
procedure TFrmImprimirVehiculo.SpeedButton1Click(Sender: TObject);
begin
  If (DBNumeroVehiculo.Text <> 'Todos')  then
    Begin
    try
     FrmReporte1:=TFrmReporte1.Create(self);
    FrmReporte1.Query1.SQL.Add('SELECT NumeroVehiculo');
    FrmReporte1.Query1.SQL.Add('FROM BitacoraVehiculos RIGHT JOIN Vehiculos ON BitacoraVehiculos.NumeroVehiculo = Vehiculos.NumeroVehiculo ');
    FrmReporte1.Query1.SQL.Add('WHERE Vehiculos.NumeroVehiculo ='+chr(39)+DBNumeroVehiculo.Text+chr(39)'');
// esto es por si en el reporte quieres ver la fecha en que se hizo
// Se hace poniendo en el from dos DateTimePiker para escoger la fecha
// en que se quiere el reporte, en este caso el componente lo llamo DPT1 y 2
// Los QRLbl Los pones en el reporte
   FrmReporte1.QRLblDesde.Caption := DateToStr(DTP1.Date);
   FrmReporte1.QRLblHasta.Caption := DateToStr(DTP2.Date); 
// Con otro QRLbl Pones el nombre de la empresa
   FrmReporte1.QRLblNombreEmpresa.Caption := 'Empresa Nombre';
// El Numero del vehiculo
   FrmReporte1.QRLblNumeroV.Caption :=''+chr(39)+DBNumeroVehiculo.Text+chr(39)'';
// Posteriormente envias a imprimir
  If RadioGroup1.ItemIndex = 0 then FrmReporte1.QuickRep1.Print
      else FrmReporte1.QuickRep1.Preview
           finally
           FrmReporte1.QuickRep1.Free;
        end;
   end;
end;
El uso para mi de tanto ADD es porque el codigo se lee mejor.
En el QReport pones un QRband al principio y en su interior pones los QRLbl que te indica el codigo anterior, con los nombres de estos.
Bueno con esto ya tienes para pensar, Creo que esto seria, si tienes otra duda dime.
Saludos


La franja horaria es GMT +2. Ahora son las 20:35:31.

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