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

 
 
Herramientas Buscar en Tema Desplegado
  #8  
Antiguo 04-01-2004
fjcg01 fjcg01 is offline
Registrado
 
Registrado: jun 2003
Ubicación: Barakaldo
Posts: 4
Poder: 0
fjcg01 Va por buen camino
Hola a todos,
fusilando por ahí fusilando por allá, he tomado de base este hilo para hacer una nueva versión de un generador de reportes que tenía hecho en Ace report y que el Delphi 7 no funciona - o yo por lo menos no he conseguido instalar los componentes ACE -.

Adjunto el código de llamada al form, que lo genera y prepara las propiedades de los objetos, que son los siguientes:
- Query que quieres imprimir
- DBGrid idem
- Titulo, empresa y condiciones son strings que se escriben el la cabecera.
- VisualizarTotales es un string con los nombres de los campos separados con comas - o sin separa, para que nos vamos a engañar - que queremos totalizar
- GrupoTotales es un string con los nombres de los campos que si cambia alguno de ellos se imprime la banda de totales.

Mi problema se plantea cuando ejecuto el informe. A veces se imprime OK, pero otras veces, en la banda de los totales no aparecen los mismos.

Como podeis ver, hay cuatro bandas, Cabecera de reporte, cabecera de grupo, detalle, pie de grupo y pie de reporte.

Si alguien me puede ayudar, pues lo agradecería mucho, ya que estoy pegándome un poquito con ello y ya me sale humo de la cabeza.


-------------------------------------------------------------

:: Funcion de generar listados a partir de un Grid automáticamente ::
:: Forma de llamarlo ::
:: GenerarListado( Query que queremos imprimir ADO ::
:: Grid asociado a la query ::
:: Titulo del Listado ::
:: empresa del listado ::
:: Condiciones del listado ( literal) ::
:: Campos que queremos sumar separados por comas ::
:: Campos que cuando cambian se imprimen los totales::
:: separados por comas ::
:: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
unit mdrpt;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
QuickRpt, Qrctrls, Db, DBTables, ExtCtrls,Grids, DBGrids,ADODB,printers;

type
TFrmQuick = class(TForm)
QuickRep1: TQuickRep;
PageHeaderBand1: TQRBand;
QRLTitulo: TQRLabel;
QRLEmpresa: TQRLabel;
QRLCondiciones: TQRLabel;
QRSysData1: TQRSysData;
QRShape1: TQRShape;
QRGroup1: TQRGroup;
DetailBand1: TQRSubDetail;
GroupFooterBand1: TQRBand;
QRBand1: TQRBand;
QRLabelP: TQRLabel;
QRSysData3: TQRSysData;
QRShape2: TQRShape;
QRLabel1: TQRLabel;
QRLabel2: TQRLabel;
QRShape3: TQRShape;
procedure QuickRep1AfterPrint(Sender: TObject);
private
{ Private declarations }
procedure PrepararListado(Query:TADOQuery; DBGRid: TDBGrid; VisualizarTotales,GrupoTotales:string);
public
{ Public declarations }
Titulos: array of TQrLabel;
Campos: array of TQRDBText;
Totales: array of TQrExpr;
function GenerarListado( Query:TADOQuery; DBGrid: TDBGrid; Titulo,empresa,Condiciones,VisualizarTotales,GrupoTotales: string): boolean;
end;
var
FrmQuick: TFrmQuick;
implementation

{$R *.dfm}

function TFrmQuick.GenerarListado( Query:TADOQuery; DBGrid: TDBGrid; Titulo,empresa,Condiciones,VisualizarTotales,GrupoTotales: string): boolean;
var Mibookmark: string ;
begin
Try
Application.CreateForm(TFrmQuick, FrmQuick);
with FrmQuick do
begin
QRLEmpresa.Caption:= Empresa;
QRLCondiciones.Caption:=condiciones;
QRLTitulo.Caption:=Titulo;
MiBookmark:=Query.Bookmark;
QuickRep1.Dataset:= Query; DetailBand1.Dataset:= Query;
PrepararListado (Query,DBGrid,VisualizarTotales,GrupoTotales);
QuickRep1.PreviewModal;
Query.Bookmark:= MiBookMark;
end;
finally
FrmQuick.Free;
end;
GenerarListado:=True
end;
procedure TFrmQuick.PrepararListado(Query:TADOQuery;DBGRid: TDBGrid; VisualizarTotales,GrupoTotales:string);
const Sep=2;
var n, px:integer;
begin
px:=Sep;
// definir tamaño del array
SetLength(Titulos, DBGrid.Columns.Count);
SetLength(Campos, DBGrid.Columns.Count);
SetLength(Totales, DBGrid.Columns.Count);
QRGroup1.Height:= 0; // para que no se visualice
if VisualizarTotales='' then GroupFooterBand1.Height:= 0;
for n:= 0 to DBGrid.Columns.count-1 do
begin
// titulos
Titulos[n]:= TQRLabel.Create(PageHeaderBand1);
with Titulos[n] do
begin
parent:= PageHeaderBand1; Top:= PageHeaderBand1.Height-25; Left:= px;
AutoSize:= False; Width:= DBGrid.Columns.Items[n].Width;
Alignment:=DBGrid.Columns.Items[n].Alignment;
Caption:= DBGrid.Columns.Items[n].Title.Caption;
Font.Size:= DBGrid.Font.Size; // Font.Style:=[fsBold];
end;
// Grupo de ruptura para los totales
if pos( DBGrid.Columns.Items[n].Title.Caption, GrupoTotales) > 0 then
begin
if QRGroup1.Expression='' then
QRGroup1.Expression:=DBGrid.Columns.Items[n].fieldname
else
QRGroup1.Expression:=DBGrid.Columns.Items[n].fieldname;
end;
// Campos para visualizar Totales
if pos( DBGrid.Columns.Items[n].Title.Caption, VisualizarTotales) > 0 then
begin
totales[n]:=TQRExpr.Create(GroupFooterBand1);
with Totales[n] do
begin
parent:= GroupFooterBand1; Top:= 5; Left:= px;
AutoSize:= False; Width:= DBGrid.Columns.Items[n].Width;
Alignment:=DBGrid.Columns.Items[n].Alignment;
Master:= DetailBand1; Mask:= '#,###,###';
Expression:= 'SUM('+DBGrid.Columns.Items[n].fieldname+')';
Font.Size:= DBGrid.Font.Size;ResetAfterPrint:= True;
end;
end;
// Campos
Campos[n]:= TQRDBText.Create(DetailBand1);
with Campos[n] do
begin
parent:= DetailBand1; Top:= 0; Left:= px;
AutoSize:= False; Width:= DBGrid.Columns.Items[n].Width;
Alignment:=DBGrid.Columns.Items[n].Alignment;
Dataset:= Query; Datafield:= DBGrid.Columns.Items[n].FieldName;
WordWrap:= True; Autostretch:= True;
Font.Size:= DBGrid.Font.Size;
end;
px:= px +DBGrid.Columns.Items[n].Width + sep;
end;
// Orientacion de la page dependiendo de los campos
if px >= 695 then
begin
QuickRep1.Page.Orientation:= poLandscape; // apaisado
QRShape1.Width:= 1027; QRShape2.Width:= 1027; QRShape3.Width:= 1027;
QRLTitulo.Width:= 1027;
QRSysData1.Left:= 1027 - QRSysData1.Width;
QRLabelP.Left:= 450; QRSysData3.Left:= 500;
end
else
QuickRep1.Page.Orientation:= poPortrait;
end;

procedure TFrmQuick.QuickRep1AfterPrint(Sender: TObject);
var n:integer;
begin
for n:= sizeof(Titulos) downto 0 do Titulos[n].Free;
for n:= sizeof(Campos) downto 0 do Campos[n].Free;
for n:= sizeof(Campos) downto 0 do totales[n].Free;
end;

end.
Responder Con Cita
 



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


La franja horaria es GMT +2. Ahora son las 00:25:57.


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