Pesquise no Blog

 

terça-feira, 16 de dezembro de 2008

Relatórios com quebras/grupos usando Quick Report

Vamos criar um relatório agrupando por data e no processo ver algumas dicas.

Em uma nova aplicação defina o Name do Form principal para 
wMain e coloque um botão Name btnRelat. Salve o Form como uMain.pas.

Crie um novo Form com name wRelat, salve como uRelat.pas.
No Form wRelat coloque um componente TQuickRep e um TADOQuery.

Defina o name da Query para qryDados.
Faça conexão da Query com a ba
se que quiser e da forma que quiser, para esse exemplo basta saber que a tabela que usei tem 3 campos: Data(date), Nome(char), Valor(decimal).
Defina a SQL para "select ( year(data) * 100 ) + month(data) as anomes , * from dados order by data".

No QuickRep1 defina a DataSet para qryDados.


Atenção para o campo "anomes" que criamos no Select e no Order, isso é parte importante para o grupo do relatório funcionar.

No QuickRep1 coloque um TQRGroup e defina a Expression para "anomes".

No TQRGroup coloque 2 TQRLabel. Um TQRLabel defina Caption para "Ano / Mês:", o outro defina o Name para lblData.


Coloque no QuickRep1 um TQRBand com Name bandDetail e BandType rbDetail.

No bandDetail coloque:
TQRDBText DataSet qryDados e DataField Data.
TQRDBText DataSet qryDados e DataField Nome.
TQRDBText DataSet qryDados e DataField Valor.


Coloque outro TQRBand Name bandFooter e BandType rbGroupFooter.

No bandFooter coloque um TQRExpr e defina o a Expression para "sum(valor)" e ResetAfterPrint para True.
Esse será o totalizador de valor por grupo.


No TQRGroup defina a FooterBand para bandFooter e no evento BeforePrint:

begin
  lblData.Caption:= FormatDateTime( 'yyyy/mm' , qryDados.FieldByName( 'data' ).AsDateTime );
end;

No Form wMain adicione na Uses uRelat e no evento Click do btnRelat:

begin
  wRelat.qryDados.Open;
  wRelat.QuickRep1.Preview;
end;


Execute e clique no botão para ver o resultado.