PDA

Ver la Versión Completa : Qreport??


fmonte
05-01-2005, 14:07:12
Hola gente tengo una duda, no se come obtener el total de paginas en un qrepor, yo logre el numero de pagina actual, q es con TQRSysData y poniendo en "Data" a qrsPageNumber, pero no se como obtener el total de paginas, porque quiero imprimir en el reporte, por ejemplo Pagina 1 de N, ese N es q quiero obtener, como hago???
Muchas gracias
Pancho

marcoszorrilla
05-01-2005, 14:37:30
Aquí tienes un ejemplo:

procedure TfrConVentas.SpeedButton4Click(Sender: TObject);
var
Bm:TbookMark;

begin
nOpcion:=0;
nPages:=0;
BM:=DmVil.Fact.GetBookMark;
DmVil.Fact.DisableControls;

DmVil.fact.Filter:='Numero ='+QuotedStr(DmVil.Factnumero.value);
DmVil.fact.Filtered:=True;

Application.CreateForm(TfrLptFactura,frLptFactura);
frlptFactura.LptFactura.Prepare;

nPages:=frlptFactura.LptFactura.QRPrinter.PageCount;
noPcion:=0;
frLptFactura.LptFactura.PreviewModal;
frLptFactura.Close;

DmVil.Fact.GotoBookmark(Bm);
DmVil.Fact.EnableControls;
DmVil.Fact.FreeBookMark(Bm);
end;


procedure TfrLptFactura.LptFacturaBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin

lbPaginas.caption:='/ '+IntToStr(nPages);
...

Como verás es preciso hacer un Prepare antes para saber el número de páginas que va a tener el informe.

Muevo el tema al foro de impresión desde varios.

Un Saludo.

fmonte
05-01-2005, 20:42:14
procedure TfrConVentas.SpeedButton4Click(Sender: TObject);
var
Bm:TbookMark;

begin
nOpcion:=0;
nPages:=0;
BM:=DmVil.Fact.GetBookMark;
DmVil.Fact.DisableControls;

DmVil.fact.Filter:='Numero ='+QuotedStr(DmVil.Factnumero.value);
DmVil.fact.Filtered:=True;

Application.CreateForm(TfrLptFactura,frLptFactura);
frlptFactura.LptFactura.Prepare;

nPages:=frlptFactura.LptFactura.QRPrinter.PageCount;
noPcion:=0;
frLptFactura.LptFactura.PreviewModal;
frLptFactura.Close;

DmVil.Fact.GotoBookmark(Bm);
DmVil.Fact.EnableControls;
DmVil.Fact.FreeBookMark(Bm);
end;


procedure TfrLptFactura.LptFacturaBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin

lbPaginas.caption:='/ '+IntToStr(nPages);


Hola no entiendo el codigo, primero no se que es el componente "DmVil" y me parece que tiene q ser mas sensillo, mira yo me base en los ejemplos que viene con delphi 6 y creo q la cantidad de Paginas es "Qrep1.QRPrinter.PageCount", pero no se yo lo segui y no se en donde ponerlo a este codigo, porque al principio es 1 y en algun momento se vuelve el total y ahi en donde yo puse el codigo para que muestre pero no me lo cambia. Te paso algo de codigo:

////////////////////////////////////////////////////////////////////////////////////
//En este formulario tengo el TQuictReport//
procedure TProdVend.QRep1Preview(Sender: TObject);
begin
with Form3 do
begin
QRPrev.QRPrinter := TQRPrinter(Sender); //Mostrar el texto correspondiente
sePage.Value := QRPrev.QRPrinter.PageNumber; //Inicializar valores
QRPrev.PageNumber:=sePage.Value;
sePage.Value := 1;
sePage.MinValue := 1;
sePage.MaxValue := QRPrev.QRPrinter.PageCount;
QRPrev.Zoom := 100;
ZoomTo100.Down := True;
spZoom.Value := 100;
form3.Caption:= 'MOVIMIENTOS DIARIOS';
form3.StBar.Panels[2].Text := 'Nombre : ' + 'MOVIMIENTOS DIARIOS';
Show;
Qrep1.QRPrinter.PageCount;
end;
end;
////////////////////////////////////////////////////////////////////////////////
//En este formulario tengo el TQRPreview//
procedure TForm3.QRPrevPageAvailable(Sender: TObject; PageNum: Integer);
begin
sePage.MaxValue := PageNum; //Ajustar el contador y la
StBar.Panels[0].Text := 'Pag. 1/' + IntToStr(PageNum); //barra de tareas
MaxPag := PageNum;
end;
///////////////////////////////////////////////////////////////////
procedure TForm3.sePageChange(Sender: TObject);
begin
QRPrev.PageNumber := sePage.Value;
StBar.Panels[0].Text := 'Pag. ' + IntToStr(sePage.Value) + '/' + IntToStr(MaxPag);
end;
////////////////////////////////////////////////////////
procedure TForm3.sbFirstPageClick(Sender: TObject);
begin
sePage.Value := 1;
end;
//////////////////////////////////////////////////////////
procedure TForm3.sbNextPageClick(Sender: TObject);
begin
if sePage.Value < QRPrev.QRPrinter.PageCount then
sePage.Value := sePage.Value + 1;
end;
///////////////////////////////////////////////////////////
procedure TForm3.sbPreviousPageClick(Sender: TObject);
begin
if sePage.Value > 1 then
sePage.Value := sePage.Value - 1;
end;
//////////////////////////////////////////////////////////////////////////
procedure TForm3.sbLastPageClick(Sender: TObject);
begin
sePage.Value := QRPrev.QRPrinter.PageCount;
end;
//////////////////////////////////////////////////
procedure TForm3.PrintSetupClick(Sender: TObject);
begin
with ProdVend.QRep1 do
begin
tag := -1;
PrinterSetup;
if tag = 0 then
print;
end;
end;
////////////////////////////////////////////////////////////////////
procedure TForm3.PrintClick(Sender: TObject);
begin
QRPrev.qrprinter.Print;
end;
///////////////////////////////////////////////////////////////

marcoszorrilla
05-01-2005, 21:52:29
Pues DmVil es la referencia al DataModulo en donde se hallan las tablas, te he pegado todo el código de la llamada, aunque lo único que interesa es como se hace el prepare como se guarda el número de páginas en una variable y como se muestra luego en QuickReport.

Un Saludo.

darkerbyte
16-10-2010, 02:19:52
Hola.

Yo tambien estoy viendo como obtener el numero de paginas del reporte. Sin embargo la solución aqui presentada tiene una deficiencia. Primero tienes que llamar al procedimiento prepare() para luego obtener el numero de paginas.
Eso no es el problema el punto es q al hacer el previewmodal() Quick report automaticamente prepara el informe antes de presentar la previsualizacion. Por lo que tenemos un proceso repetido en la preparación del informe. En un reporte de muchas paginas afecta

rfernandez
25-10-2010, 14:22:26
Llevo muchos años con Quickreport, desde delphi 3.0, y os diré que, si no estoy equivocado, la única manera de conseguir el número de pàginas es haciendo el .Prepare tal y como antes os han comentado.

Es una de las deficiencias que tiene QuickReport vs otras herramientas de impresión.

Saludos,