Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Problema com CompositeReport e band ColumnHeader


danielrgoes

Pergunta

Boa tarde.

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):

* Page Header

* Title

* Column Header

* Detail

* Summary

 

Obrigado.

Editado por danielrgoes
Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

exemplo:

Os 2 reports tem todas as bandas que voce mencionou

procedure TForm1.QRCompositeReport1AddReports(Sender: TObject);
begin
   ///  JUNTAR REPORTS 

   with QRCompositeReport1 do
     begin
         Add(QRClientes);
         Add(QRProf);
     end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   /// MOSTRAR REPORT INDIVIDUAL

   Cadcli_IB.Active := false;
   CDS_Cadcli.Active := false;
   Cadcli_IB.Active := true;
   CDS_Cadcli.Active := true;
   CDS_Cadcli.Refresh;

   try
     if QRClientes = Nil then
        QRClientes := TQRClientes.Create(self);
   except
        ShowMessage('Erro na criação do relatório!!');
        exit;
   end;
   QRClientes.Preview;


   /// MOSTRAR REPORT INDIVIDUAL

   CadProf_IB.Active := false;
   CDS_CadProf.Active := false;
   CadProf_IB.Active := true;
   CDS_CadProf.Active := true;
   CDS_CadProf.Refresh;

   try
       if QRProf = Nil then
       QRProf := TQRProf.Create(self);
   except
       ShowMessage('Erro na criação do relatório!!');
       exit;
   end;
   QRProf.preview;

   
   ///  MOSTRAR REPORTS JUNTOS
  
   QRCompositeReport1.Prepare;
   QRCompositeReport1.Preview;
end;

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);
begin
   QuickReport1.ForceNewPage;
end;

Lembrando: A estrutura desses reports são:

* Title

* Page Header

* Column Header

* Detail

* Summary

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

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:

* Curva

* 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.

image.png.320b8e3eade22fed6f3829868f52d757.png

image.png.70ea255b995d00ce141258fb23e3e974.png

 

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.

 

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

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.

abraço

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

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).

No aguardo.

Obrigado.

Editado por danielrgoes
Link para o comentário
Compartilhar em outros sites

  • 0

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 ? )

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 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.

abraço

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia, Jhonas.

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...).

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

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:

PageHeader
Title
ColumnHeader
Detail
Summary
PageFooter

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;

{$R *.dfm}

procedure TForm1.QRCompositeReport1AddReports(Sender: TObject);
begin
   ///  JUNTAR REPORTS

   with QRCompositeReport1.Reports do
     begin
         Add(QuickReport2);
         Add(QuickReport3);
         Add(QuickReport4);
     end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
   ///  MOSTRAR REPORTS JUNTOS

   QRCompositeReport1.Prepare;
   QRCompositeReport1.Preview;

end;

Execute o código , se o resultado for

PageHeader
Title
Detail
Summary

Title 1
Detail 1
Summary 1

Title 2
Detail 2
Summary 2

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.

abraço

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...