(Resolvido) Problema com CompositeReport e band ColumnHeader - Delphi, Kylix - Fórum Script Brasil
Asked by danielrgoes,
danielrgoes 0
Tenho um programa que tem vários Quick Report, sendo que um deles busca informações de uma tabela e as mostra com a QRBand do tipo Detail.
Quando eu imprimo apenas este Quick Report que busca essas informações da tabela, ele imprime corretamente.
Porém, necessito imprimir vários dos meus Quick Reports e utilizo o componente CompositeReport. Ao adicionar o que usa Details, se eu o adiciono no início de tudo dá certo, porém se eu o adiciono no meio ou no final dos Quick Reports, ele mostra a QRBand do tipo Column Header (que deveria ficar apenas acima da Detail) logo após a minha Page Header e também acima da Detail, ficando duplicada.
Alguém sabe dizer por que isso ocorre? E como eu soluciono sem ter que colocar esse Quick Report como primeiro?
Estrutura das QRBands do meu Quick Report (como deveria ficar):
Edited October 4, 2019 by danielrgoes
Os 2 reports tem todas as bandas que voce mencionou
///  JUNTAR REPORTS
Add(QRClientes);
Add(QRProf);
/// MOSTRAR REPORT INDIVIDUAL
Cadcli_IB.Active := false;
CDS_Cadcli.Active := false;
Cadcli_IB.Active := true;
CDS_Cadcli.Active := true;
CDS_Cadcli.Refresh;
if QRClientes = Nil then
QRClientes := TQRClientes.Create(self);
ShowMessage('Erro na criação do relatório!!');
QRClientes.Preview;
CadProf_IB.Active := false;
CDS_CadProf.Active := false;
CadProf_IB.Active := true;
CDS_CadProf.Active := true;
CDS_CadProf.Refresh;
if QRProf = Nil then
QRProf := TQRProf.Create(self);
QRProf.preview;
///  MOSTRAR REPORTS JUNTOS
OBS: o titulo do segundo report vai sair colocado ao final do primeiro.
Se voce quiser , na propriedade OnEndPage do primeiro report, voce coloca o codigo abaixo para o titulo do segundo reporte, sair em nova pagina quando ajuntar os 2. ( faça isso para os demais tambem )
// primeiro report
procedure TQuickReport1.QuickRepEndPage(Sender: TCustomQuickRep);
QuickReport1.ForceNewPage;
Lembrando: A estrutura desses reports são:
Boa tarde, Jhonas.
Obrigado pela resposta, porém não é exatamente este o problema que está acontecendo no meu programa.
Eu tenho os seguintes reports a serem impressos:
* Folha de Dados
* Vista Explodida (duas vezes)
O meu report de Vista Explodida tem a estrutura da Imagem 1, quando eu imprimo ele sozinho, ele mostra corretamente esta estrutura, porém quando utilizo o CompositeReport, com os outros Reports (com diferentes estruturas), ele aparece conforme a Imagem 2, duplicando a ColumnHeader antes da minha Title.
Quando eu dou o "AddReports", eu faço o SELECT no banco de dados dos itens que devem aparecer no primeiro report de Vista Explodida.
No "StartPage" do meu report de Vista Explodida, eu atribuo alguns valores de labels que estão na minha Title.
No "AfterPrint" da Band do tipo rbSummary, eu faço o SELECT no banco dos dados dos itens que devem aparecer no próximo report de Vista Explodida (já que é chamado duas vezes).
Tentei de tudo, mas o único jeito que encontrei de não acontecer a Imagem 2, foi colocando os meus reports de Vista Explodida antes dos demais, porém os usuários não querem esta ordem.
ok... esqueci de perguntar, qual é a versão do seu QuickReport ?
estou usando a versão 5.02 ... fiz um teste aqui com reports que tinham as mesmas bandas, e funcionou corretamente.
A única coisa que está diferente do seu, é que o meu report começa com a banda Title e depois as outras.
Bom dia, Jhonas.
Meu QuickReport é versão 4.
A ordem entre as bandas Title e PageHeader, eu não consigo mudar, ao alterar o tipo da QRBand, ele já deixa na ordem citada automaticamente.
Não entendi porque meu post ficou marcado como resolvido, se ainda continuo com o problema (removi a marcação ainda em busca de ajuda).
Edited October 2, 2019 by danielrgoes
Marquei seu post como resolvido, porque achei que voce não iria responder....( como acontece com tantos outros, onde eu repondo a dúvida e não tenho o retorno ou resposta ... isso indica para mim que a dúvida foi resolvida ... ok ? )
Não sei se é bug da sua versão, mas para contornar esse problema, voce deve tirar todas as bandas do quickreport, salva-lo sem as bandas e fecha-lo.
Depois voce deve abrir novamente o quickreport, e incluir as bandas novamente uma a uma, começando pelo Title.
Mas ai voce vai perguntar.... se eu fizer isso, nou vou perder todos os componentes que estão na banda.?
Sim... por isso voce deve criar uma cópia de cada report.
Abra o report Original ( que tem toda a codificação mas sem as bandas )
Depois inclua as bandas do report ( da cópia ) uma a uma, começando pelo Title
Refaça os links das procedures que forem necessários e depois salve o report.
OBS: Se voce tentar mudar a posição das bandas somente pelas proriedades do objeto, não vai dar muito certo.
Ah entendi, acabei demorando para responder o tópico, mas estou realmente com esse problema ainda... = [
Sobre a ordem das bandas Title e PageHeader, para mim está ok, não tem problema, só comentei porque você tinha citado que no seu exemplo estava igual exceto por isto.
Quanto ao problema de mostrar a ColumnHeader duplicada quando uso o CompositeReport, você tem mais alguma dica?
Porque aqui realmente não está funcionando a menos que eu coloque este QuickReport para imprimir antes dos outros (coisa que o usuário não quer...).
Voce pode fazer um teste simples no seu delphi com o quickreport
abra um novo aplicativo
coloque um botão e um QRCompositeReport no Form
crie 3 quickreports ( QuickReport2, QuickReport3 e QuickReport4
coloque em cada um deles as seguintes bands:
No QuickReport2:
e coloque um Label em cada uma das bands com os nomes de cada band
QRLabel1.Caption := PageHeader;
QRLabel2.Caption := Title;
QRLabel3.Caption := ColumnHeader;
QRLabel4.Caption := Detail;
QRLabel5.Caption := Summary;
QRLabel6.Caption := PageFooter;
Faça a mesma coisa nos demais, mudando somente o final de cada Label
No QuickReport3:
QRLabel1.Caption := PageHeader 1;
QRLabel2.Caption := Title 1;
QRLabel3.Caption := ColumnHeader 1;
QRLabel4.Caption := Detail 1;
QRLabel5.Caption := Summary 1;
QRLabel6.Caption := PageFooter 1;
No QuickReport4:
QRLabel1.Caption := PageHeader 2;
QRLabel2.Caption := Title 2;
QRLabel3.Caption := ColumnHeader 2;
QRLabel4.Caption := Detail 2;
QRLabel5.Caption := Summary 2;
QRLabel6.Caption := PageFooter 2;
No botão voce põe o codigo:
uses  Unit2, Unit3, Unit4;
Add(QuickReport2);
Add(QuickReport3);
Add(QuickReport4);
Execute o código , se o resultado for
PageFooter 2
OBS: veja que apareçe o PageHeader do QuickReport2 mas não o ColumnHeader dele, nem o PageHeader e o ColumnHeader do QuickReport3 e nem o PageHeader e o ColumnHeader do QuickReport4
Por fim aparece somente o PageFooter 2 que é do QuickReport4.
Ou voce muda a estrutura do QuickReport em relação as Bands ou cria uma rotina para imprimir todos os relatórios de uma só vez.
Seguindo suas dicas, fiz uma base de teste e adicionei os Reports conforme você falou e em seguida fui adicionando as funcionalidades que necessitava.