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 30-07-2007
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
QuickReport me recalcula campos al imprimir

Buenas a tod@s los forer@s

Tengo un problema que me ha dejado pillado.

Tengo un Informe con QuickReport y Delphi7 donde varios de los datos los saco de querys y donde tengo etiquetas que se calculan en el evento onPrint.

Cuando previsualizo el informe todos los datos me cuadran pero sin embargo, cuando lo imprimo hay ciertos datos que se "multiplican por 2" (se suman consigo mismo) y me imprime el resultado de esta operación.

Por ejemplo, en la etiqueta donde pongo el subtotal:
Código:
procedure TForm3.QRTotPrint(sender: TObject; var Value: String);
var
  totalAux: double;
begin
  totalAux := subtotal + incrementoTotal - descuentoTotal + ivaTotal;
  Value := Format('%0.2f',[totalAux]);
end;
me pone 215 como su valor al previsualizar el informe y me pone 430 al imprimirlo.

¿Alguien me puede decir por qué?

Gracias de antemano
Responder Con Cita
  #2  
Antiguo 30-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Porque, al hacer el Preview calcula el valor que necesitas, pero al mandarlo a imprimir no inicializas las variables globales y ellas siguen con valores, los cuales toma en cuenta para seguir calculando, te sugiero que inicialices todas esas variables globales en el BeforePrint del TQuckReport, por ejemplo:

Código Delphi [-]
 
subtotal        := 0; 
incrementoTotal := 0; 
descuentoTotal  := 0; 
ivaTotal        := 0;
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 30-07-2007
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
Sigue sin funcionar correctamente

en el beforePrint del TQuickReport ya lo hice, algo del estilo:

Código:
procedure TForm3.QuickRep1BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
    subtotal        := 0;
    ivaAux          := 0;
    validezAux      := 0;
    descuentoAux    := 0;
    incrementoAux   := 0;
    descuentoTotal  := 0;
    incrementoTotal := 0;
    ivaTotal        := 0;
end;
Sin embargo, ahora, en el preview, no me calcula los valores de dichas etiquetas y tampoco cuando lo imprime.

Todas esas variables las tengo definidas en la parte pública del formulario y las calculo en el onPrint de las etiquetas que toca, supongo que esto no tendrá nada que ver.

Sigo pillado en una estupidez.

Si necesitáis que ponga el fuente completo, os lo paso.

Salu2 y gracias
Responder Con Cita
  #4  
Antiguo 30-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por jymy788
y las calculo en el onPrint de las etiquetas que toca
Que tal si calculas eso en el BeforePrint de la banda?
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 30-07-2007
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
voy a probar y te cuento
Responder Con Cita
  #6  
Antiguo 30-07-2007
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
buenas de nuevo.

Supongo que será porque estoy colapsado pero no puedo hacerlo en el BeforePrint de la banda a menos que haya ido haciendo lo propio en las bandas anteriores y no lo puedo hacer así porque las bandas anteriores tienen TQRDBText de los que no se obtener el valor.

Te pongo el código fuente a ver si se te ocurre qué le está pasando o si tengo que rehacerlo y por qué

Código:
unit impresion;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, jpeg, ExtCtrls, DB, DBTables, QuickRpt,
  QRCtrls;
type
  TForm3 = class(TForm)
    PrintDialog1: TPrintDialog;
    QUtil: TQuery;
    qClientes: TQuery;
    QuickRep1: TQuickRep;
    qDecoracion: TQuery;
    QRBand1: TQRBand;
    QRSubDetail1: TQRSubDetail;
    QRDBText1: TQRDBText;
    QRDireccion1: TQRLabel;
    QRNombre: TQRLabel;
    QRDireccion2: TQRLabel;
    QRImage2: TQRImage;
    QRDBText2: TQRDBText;
    QRDBText3: TQRDBText;
    QRDBText4: TQRDBText;
    QRLabel7: TQRLabel;
    QRGroup1: TQRGroup;
    QRLabel1: TQRLabel;
    QRLabel3: TQRLabel;
    QRLabel4: TQRLabel;
    QRLabel5: TQRLabel;
    QRLabel6: TQRLabel;
    QRTitle1: TQRLabel;
    QRRef: TQRLabel;
    QRArticulo: TQRLabel;
    QRPrecio1: TQRLabel;
    QRLabel2: TQRLabel;
    qAccesorios: TQuery;
    QRGroup2: TQRGroup;
    QRLabel8: TQRLabel;
    QRSubDetail2: TQRSubDetail;
    QRDBText5: TQRDBText;
    QRDBText6: TQRDBText;
    QRLabel9: TQRLabel;
    QRLabel10: TQRLabel;
    QRLabel11: TQRLabel;
    QRLabel12: TQRLabel;
    QRDBText7: TQRDBText;
    QRBand3: TQRBand;
    QRLabel23: TQRLabel;
    QRLabel28: TQRLabel;
    QRVal: TQRLabel;
    QRLabel29: TQRLabel;
    QRFecha: TQRLabel;
    QRShape3: TQRShape;
    QRShape4: TQRShape;
    QRShape5: TQRShape;
    QRLabel30: TQRLabel;
    QRLabel31: TQRLabel;
    QRLabel32: TQRLabel;
    QRLabel34: TQRLabel;
    QRLabel35: TQRLabel;
    QRNumero: TQRLabel;
    QRBand2: TQRBand;
    QRShape1: TQRShape;
    QRSub: TQRLabel;
    QRLabel13: TQRLabel;
    QRLabel14: TQRLabel;
    QRPrecioMonjate: TQRLabel;
    QRLabel16: TQRLabel;
    QRMontaje: TQRLabel;
    QRDesp: TQRLabel;
    QRLabel17: TQRLabel;
    QRLabel15: TQRLabel;
    QRPrecioD: TQRLabel;
    QRLabel19: TQRLabel;
    QRLabelIva: TQRLabel;
    QRLabel21: TQRLabel;
    QRIncrem: TQRLabel;
    QRLabel22: TQRLabel;
    QRLabel18: TQRLabel;
    QRInc: TQRLabel;
    QRLabel24: TQRLabel;
    Descuento: TQRLabel;
    QRDesc: TQRLabel;
    QRLabel25: TQRLabel;
    QRDescuento: TQRLabel;
    QRLabel27: TQRLabel;
    QRShape2: TQRShape;
    QRLabel20: TQRLabel;
    QRLabel26: TQRLabel;
    QRShape6: TQRShape;
    QRSubto: TQRLabel;
    QRIva: TQRLabel;
    QRTot: TQRLabel;
    procedure FormShow(Sender: TObject);
    procedure rellenarDatosCliente();
    procedure rellenarDatosPresupuesto(refArticulo, desArticulo, tipoAcc,
      decoracion, trabajos, articulo, desplazamiento: string;
      precio1, precio2, precio3, precio4, precio5: double; iva: integer; descuento,
      incremento: double; validez: integer; fecha: string; numPres: integer);
    procedure QRDBText7Print(sender: TObject; var Value: String);
    procedure QRDBText4Print(sender: TObject; var Value: String);
    procedure QRDBText6Print(sender: TObject; var Value: String);
    procedure QRPrecio1Print(sender: TObject; var Value: String);
    procedure QRPrecioMonjatePrint(sender: TObject; var Value: String);
    procedure QRPrecioDPrint(sender: TObject; var Value: String);
    procedure QRIncremPrint(sender: TObject; var Value: String);
    procedure QRDescuentoPrint(sender: TObject; var Value: String);
    procedure QRSubtoPrint(sender: TObject; var Value: String);
    procedure QRIvaPrint(sender: TObject; var Value: String);
    procedure QRTotPrint(sender: TObject; var Value: String);
    procedure QuickRep1BeforePrint(Sender: TCustomQuickRep;
      var PrintReport: Boolean);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);

  private
    { Private declarations }
  public
    { Public declarations }
    subtotal: double;
    ivaAux, validezAux: integer;
    descuentoAux, incrementoAux: double;
    descuentoTotal, incrementoTotal, ivaTotal: double;
  end;
var
  Form3: TForm3;
  subtotal: double;
    ivaAux, validezAux: integer;
    descuentoAux, incrementoAux: double;
    descuentoTotal, incrementoTotal, ivaTotal: double;
implementation
{$R *.dfm}
procedure TForm3.FormShow(Sender: TObject);
begin
  subtotal        := 0;
  ivaAux          := 0;
  validezAux      := 0;
  descuentoAux    := 0;
  incrementoAux   := 0;
  descuentoTotal  := 0;
  incrementoTotal := 0;
  ivaTotal        := 0;
  QuickRep1.Refresh;
  rellenarDatosCliente();
end;
procedure TForm3.rellenarDatosCliente();
var
  nombre, apellido1, apellido2, direccion, codpostal, provincia, localidad,
  telefono1, telefono2, observaciones: string;
begin
  nombre        := qClientes.fieldbyname('nombre').asstring;
  apellido1     := qClientes.fieldbyname('apellido1').asstring;
  apellido2     := qClientes.fieldbyname('apellido2').asstring;
  direccion     := qClientes.fieldbyname('direccion').asstring;
  codpostal     := qClientes.fieldbyname('cp').asstring;
  provincia     := qClientes.fieldbyname('provincia').asstring;
  localidad     := qClientes.fieldbyname('localidad').asstring;
  telefono1     := qClientes.fieldbyname('telefono1').asstring;
  telefono2     := qClientes.fieldbyname('telefono2').asstring;
  observaciones := qClientes.fieldbyname('observaciones').asstring;

  QRNombre.Caption := nombre+' '+apellido1+' '+apellido2;
  QRDireccion1.Caption := direccion;
  QRDireccion2.Caption := codpostal+', '+localidad+' ('+provincia+')';
end;
procedure TForm3.rellenarDatosPresupuesto(refArticulo, desArticulo, tipoAcc,
  decoracion, trabajos, articulo, desplazamiento: string;
  precio1, precio2, precio3, precio4, precio5: double; iva: integer; descuento,
  incremento: double; validez: integer; fecha: string; numPres: integer);
var
  iva2, total : double;
  temp:Real;
begin
  QRRef.Caption        := refArticulo;
  QRArticulo.Caption   := desArticulo;
  QRPrecio1.Caption    := Format('%0.2f',[precio1]);
  QRMontaje.Caption := trabajos;
  QRPrecioMonjate.Caption := Format('%0.2f',[precio4]);
  QRDesp.Caption       :=   desplazamiento;
  QRPrecioD.Caption    := Format('%0.2f',[precio5]);
  QRLabelIva.Caption   := 'IVA ('+intToStr(iva)+' %)';
  ivaAux := iva;
  descuentoAux := descuento;
  incrementoAux := incremento;
  validezAux := validez;
  QRInc.Caption := floatToStr(incremento);
  QRDesc.Caption := floatToStr(descuento);
  QRVal.Caption := intToStr(validez);
  QRFecha.Caption := fecha;
  QRNumero.Caption := intToStr(numPres);
end;

procedure TForm3.QRDBText7Print(sender: TObject; var Value: String);
begin
  if (QAccesorios.FieldByName('accesorio').AsString = 'rbAcc1') then
  begin
    Value := 'Solera Suelo';
  end;
  if (QAccesorios.FieldByName('accesorio').AsString = 'rbAcc2') then
  begin
    Value := 'Rodapies';
  end;
  if (QAccesorios.FieldByName('accesorio').AsString = 'rbAcc3') then
  begin
    Value := 'Zócalo';
  end;
  if (QAccesorios.FieldByName('accesorio').AsString = 'rbAcc4') then
  begin
    Value := 'Solera';
  end;
  if (QAccesorios.FieldByName('accesorio').AsString = 'rbAcc5') then
  begin
    Value := 'Supl. Macizos';
  end;
  if (QAccesorios.FieldByName('accesorio').AsString = 'rbAcc6') then
  begin
    Value := 'Cajón';
  end;
  if (QAccesorios.FieldByName('accesorio').AsString = 'rbAcc7') then
  begin
    Value := 'Tapas Cajón';
  end;
  if (QAccesorios.FieldByName('accesorio').AsString = 'rbAcc8') then
  begin
    Value := 'Tabicas';
  end;
  if (QAccesorios.FieldByName('accesorio').AsString = 'rbAcc9') then
  begin
    Value := 'Lápidas';
  end;
end;
procedure TForm3.QRDBText4Print(sender: TObject; var Value: String);
begin
  subtotal := subtotal + strToFloat(Value);
  Value := Format('%0.2f',[strToFloat(Value)]);
end;
procedure TForm3.QRDBText6Print(sender: TObject; var Value: String);
begin
  subtotal := subtotal + strToFloat(Value);
  Value := Format('%0.2f',[strToFloat(Value)]);
end;
procedure TForm3.QRPrecio1Print(sender: TObject; var Value: String);
begin
  subtotal := subtotal + strToFloat(Value);
  Value := Format('%0.2f',[strToFloat(Value)]);
end;
procedure TForm3.QRPrecioMonjatePrint(sender: TObject; var Value: String);
begin
  subtotal := subtotal + strToFloat(Value);
  Value := Format('%0.2f',[strToFloat(Value)]);
end;
procedure TForm3.QRPrecioDPrint(sender: TObject; var Value: String);
begin
  subtotal := subtotal + strToFloat(Value);
end;
procedure TForm3.QRIncremPrint(sender: TObject; var Value: String);
var
  incremento2 : double;
begin
  incremento2 := (subtotal * incrementoAux) / 100;
  incrementoTotal := incremento2;
  Value := Format('%0.2f',[incremento2]);
end;
procedure TForm3.QRDescuentoPrint(sender: TObject; var Value: String);
var
  descuento2 : double;
begin
  descuento2 := (subtotal * descuentoAux) / 100;
  descuentoTotal := descuento2;
  Value := Format('%0.2f',[descuento2]);
end;
procedure TForm3.QRSubtoPrint(sender: TObject; var Value: String);
begin
  Value := Format('%0.2f',[subtotal]);
end;
procedure TForm3.QRIvaPrint(sender: TObject; var Value: String);
var
  iva2 : double;
begin
  iva2 := ((subtotal + incrementoTotal - descuentoTotal) * ivaAux) / 100;
  ivaTotal := iva2;
  Value := Format('%0.2f',[iva2]);
end;
procedure TForm3.QRTotPrint(sender: TObject; var Value: String);
var
  totalAux: double;
begin
  totalAux := subtotal + incrementoTotal - descuentoTotal + ivaTotal;
  Value := Format('%0.2f',[totalAux]);
end;
procedure TForm3.QuickRep1BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
{
  subtotal        := 0;
  ivaAux          := 0;
  validezAux      := 0;
  descuentoAux    := 0;
  incrementoAux   := 0;
  descuentoTotal  := 0;
  incrementoTotal := 0;
  ivaTotal        := 0;
}
end;
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Form3.Destroy;
end;
end.
Responder Con Cita
  #7  
Antiguo 30-07-2007
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
Además, si te fijas, el subtotal se va calculando a medida que se va haciendo el onPrint de todos los valores que sumados darán el subtotal y además, así de paso hago el formateo del valor asignándoselo al Value del QRDBText

Estoy pilladísimo y seguro que es una estupidez.
Responder Con Cita
  #8  
Antiguo 30-07-2007
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
Solucionado !!!!

Ya lo he solucionado, o eso creo. (la prueba de impresión funcionó correctamente, ahora haré más)

el subtotal lo calculo en una de las bandas subdetail de la siguiente forma:

Código:
procedure TForm3.QRSubDetail2BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin
  subtotal := subtotal + (QAccesorios.fieldbyname('precio').asFloat);
end;
y ahora, si solo inicializo en el BeforePrint del quickreport el valor subtotal, me lo calcula correctamente y me imprime lo que me visualiza en el preview.

Vamos, que me estaba haciendo un lío de tres pares de narices en una tontería.

Gracias por tu tiempo y perdona mi "estupidez"

Salu2
Responder Con Cita
  #9  
Antiguo 30-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Hombre¡¡¡, que bueno que se ha encontrado el problema y que además lo se ha sabido solucionar.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
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
imprimir pie de página, quickreport manolop Impresión 2 07-05-2013 19:43:02
Imprimir un Query en QuickReport luxus Impresión 6 14-10-2010 21:56:19
Imprimir en el Quickreport los campos del checkbox David Impresión 2 17-06-2006 10:41:03
Problemas al imprimir con QuickReport DarkSide Impresión 9 25-09-2003 21:24:34
Problema con el Quickreport al imprimir ALMERA Impresión 0 25-06-2003 13:29:59


La franja horaria es GMT +2. Ahora son las 15:28:18.


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