Dúvidas na elaboração de Relatório - QuickReport

Delphi

31/07/2006

Saudações,
estou utilizando delphi 5.0 Pro e Banco MySql 5.0. Criei um relatório com quickrep com o faturamento de escolas de diversos estados e agrupei por estados. Ficou nesse layout:

AL Janeiro Fevereiro
1 - Escola Tal 1.500,00 1.000,00

e assim por diante...coloquei no relatório um qrGroup (expression setado para a tabela.uf e Footer Band para o group footer), um detail, um Group Footer e um summary. O relatório está perfeito com exceção de uma coisa: a cada final de uf eu queria colocar os totais de pagos e pendentes por estado e não estou conseguindo (ele repete o resultado do primeiro estado para todos os outros) testei o sql dentro do gerenciador e todos os registros saíram corretamente. Acho que linkei algo errado. alguém pode ajudar?
Muito obrigado.


Zooropa

Zooropa

Curtidas 0

Respostas

Cabelo

Cabelo

31/07/2006

Em que momento exatamente vc está mostrando a soma...

qual o evento?????


GOSTEI 0
Zooropa

Zooropa

31/07/2006

Saudações amigo,
pra começar, eu executo uma query que carrega todos os movimentos de 2006 (com algumas regras). A query me retorna os dados sendo que cada mês de uma escola como sendo um registro. Para criar o formato de histórico (para cada registro 1 escola com 12 meses) eu criei um laço no FormCreate do Relatório e carrego uma outra tabela (tbFatura), sendo que aí eu faço o tratamento dos valores pagos e pendentes (já carrego tb duas variáveis com o somatório total de pagos e pendentes). O QRGroup está com expression setado para tbFatura.UF e está tudo ok. Como disse antes o meu problema é o GroupFooter (este está setado ao QRGoup porém eu coloquei QRDBText´s setados a uma query que fica no formulário - contendo apenas os somatórios de pagos e pendente por uf). Esta query tb está ok só que o GroupFooter repete o resultado de AL para todos os outros estados. Como resolvo isso?


GOSTEI 0
Zooropa

Zooropa

31/07/2006

Gente,
alguém pode mes ajudar nisso? :(


GOSTEI 0
Micheus

Micheus

31/07/2006

porém eu coloquei QRDBText´s setados a uma query que fica no formulário - contendo apenas os somatórios de pagos e pendente por uf).
Parece-me que esta query não está acompanhando a uf impressa no GroupHeader. Como vc está manipulando esta consulta? Ela está ligada a principal via datasource? Está passando a uf como parâmetro e abrindo ela a cada before print do GroupHeader?


GOSTEI 0
Zooropa

Zooropa

31/07/2006

Saudações Michel,
neste caso eu carrego no form create do relatório uma tabela temporária e o group header está setado ao uf desta tabela (tbFatura), enquanto que os valores do Group Footer estão setados para uma query que está no form. Não estou usando DataSource, estou linkando o dataset do QuickReport a TBFAtura assim que termino de carregar os dados. Realmente o Group Footer não acompanha a mudança de uf´s do Group Header, como soluciono isso?
Ah! já tentei o QRExpression e acontece a mesma coisa. Muito obrigado.


GOSTEI 0
Micheus

Micheus

31/07/2006

group header está setado ao uf desta tabela (tbFatura), enquanto que os valores do Group Footer estão setados para uma query que está no form.
[b:9c85479e8c]Zooropa[/b:9c85479e8c], essa query, ela é parametrizada? Acredito que uma vez que ela totaliza as informações ref. a tbFatura, a cada fatura impressa (GroupHeader) essa query deveria ser fechada, atualizados os parâmetros que farão o relacionamento com a fatura e novamente aberta. Isto pode ser feito no AfterPrint do GroupHeader.


GOSTEI 0
Zooropa

Zooropa

31/07/2006

Saudações Micheus,
cara, obrigado pela ajuda, realmente era a ausência de parâmetros. Fiz o seguinte como vc me orientou:
with qyTotUf do
  begin
    active := false;
    sql.clear;
    sql.add(´select uf, sum(janeiro_pg) as Jan_PG, sum(janeiro_pd) as Jan_PD, sum(fevereiro_pg) as Fev_PG, ´);
    sql.add(´sum(fevereiro_pd) as Fev_PD, sum(marco_pg) as Mar_PG, sum(marco_pd) as Mar_PD, ´);
    sql.add(´sum(abril_pg) as Abr_PG, sum(abril_pd) as Abr_PD, sum(maio_pg) as Mai_PG, sum(Maio_pd) as Mai_PD, ´);
    sql.add(´sum(junho_pg) as Jun_PG, sum(junho_pd) as Jun_PD, sum(julho_pg) as Jul_PG, sum(julho_pd) as Jul_PD ´);
    sql.add(´from tbrelfat where uf = :uf group by uf´);
    Parambyname(´uf´).asstring := DM.tbFatura.Fieldbyname(´uf´).asstring;
    active := true;
  end;

  Jan_Pg.caption := qyTotUf.Fieldbyname(´Jan_Pg´).asstring;
  Jan_Pd.caption := qyTotUf.Fieldbyname(´Jan_Pd´).asstring;

Esse código está no AfterPrint do QrGroup. Como faz bastante tempo que não faço relatórios com valores eu fiquei apanhando nestes subtotais. Obrigado cara.


GOSTEI 0
Micheus

Micheus

31/07/2006

[b:80033d5779]Zooropa[/b:80033d5779], só a título de otimização, acho que vc poderia:
1) no OnCreate do form do seu relatório adcionar esta parte do código:
with qyTotUf do
  begin
    sql.add(´select uf, sum(janeiro_pg) as Jan_PG, sum(janeiro_pd) as Jan_PD, sum(fevereiro_pg) as Fev_PG, ´);
    sql.add(´sum(fevereiro_pd) as Fev_PD, sum(marco_pg) as Mar_PG, sum(marco_pd) as Mar_PD, ´);
    sql.add(´sum(abril_pg) as Abr_PG, sum(abril_pd) as Abr_PD, sum(maio_pg) as Mai_PG, sum(Maio_pd) as Mai_PD, ´);
    sql.add(´sum(junho_pg) as Jun_PG, sum(junho_pd) as Jun_PD, sum(julho_pg) as Jul_PG, sum(julho_pd) as Jul_PD ´);
    sql.add(´from tbrelfat where uf = :uf group by uf´);
  end;
Essas linhas passam a ser executadas um única vez durante o processo de geração do seu relatório.

2) no AfterPrint do Group, apenas:
   qyTotUf.Close;
   qyTotUf.Parambyname(´uf´).asstring := DM.tbFatura.Fieldbyname(´uf´).asstring;
   qyTotUf.Open;

3) na GroupFooter, se for cabível, vc poderia colocar dois QRDBText ligados a sua query, assim não seria necessário fazer as atribuições aos QRLabel´s:
  Jan_Pg.caption := qyTotUf.Fieldbyname(´Jan_Pg´).asstring;
  Jan_Pd.caption := qyTotUf.Fieldbyname(´Jan_Pd´).asstring;

Como sua query está parametrizada e não é modificada em nenhum outro momento, com estas ações vc otimiza todo o processo de atribuições que está sendo feito repetidamente a cada impressão do GroupHeader.

[]s


GOSTEI 0
Zooropa

Zooropa

31/07/2006

Saudações cara,
valeu pela dica, já fiz a modificação na query. Quanto aos labels eu já tinha trocado mesmo.
Muito obrigado.


GOSTEI 0
POSTAR