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

Problema Com O Quickreport


Aghata

Pergunta

Olá Pessoal!!!

Estou com 1 problema:

-Problema: Estou fazendo um relatório no QuickReport. Quando eu visualizo o relatório dando um Preview, ele aparece certinho,mas há um problema, se , por exemplo, o relatorio tem 2 folhas e aparece em duas folhas na visualização, no momento de imprimir ela imprime tudo em uma única folha apenas.

E isso pra mim se torna ruim, pois a páginas são numeradas da seguinte forma: 1/2, 2/2, etc. Vocês sabem o que pode ser isso.

Se puderem me ajudar ficarei muito grata.

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0
Quando eu visualizo o relatório dando um Preview, ele aparece certinho,mas há um problema, se , por exemplo, o relatorio tem 2 folhas e aparece em duas folhas na visualização, no momento de imprimir ela imprime tudo em uma única folha apenas.

E isso pra mim se torna ruim, pois a páginas são numeradas da seguinte forma: 1/2, 2/2, etc. Vocês sabem o que pode ser isso.

já que você está imprimindo a numeração de páginas num formano não convencional (lembro-me de seu post), você por acaso não estaria interferindo no processo normal de impressão do QuickReport? Controlando o evento OnNeedData (ou similar) ou, ainda, forçando quebras?

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Olá amigos!!!

Erso, brigadão pelo tutorial, mas eu li ele todo e não vi nada de errado no meu relatório.

Micheus, quanto a eu estar controlando o evento OnNeedData, isto eu não estou fazendo, pois eu nem utilizo este evento e, além disso, eu nem sei pra que ele serve. Agora você comentou que eu posso estar "forçando quebras", como assim?

Brigadão pela ajuda de vocês.

Um abraço!!!

Link para o comentário
Compartilhar em outros sites

  • 0
Micheus, quanto a eu estar controlando o evento OnNeedData, isto eu não estou fazendo, pois eu nem utilizo este evento e, além disso, eu nem sei pra que ele serve. Agora você comentou que eu posso estar "forçando quebras", como assim?
Se você estivesse manipulando o evento OnNeedData (responsável pelo avanço de linha no registro do dataset quando você controla a impressão - não quickreport), eventialmente você poderia estar utilizando o método TQuickRep.NewPage para forçar quebra de uma nova página.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá amigo!!!

Para fazer aparecer as informações que eu quero no relatório eu estou utilizando o componente QRRichText, mas eu estou jogando as informações nele no evento AfterScroll da query. Da seguinte forma:

QRRichText3.Lines.Clear;

QRRichText3.Lines.Add(form2.Query3DES_TAREFA.Value);

..........

Será que isso pode estar interferindo em alguma coisa?

Link para o comentário
Compartilhar em outros sites

  • 0
Olá amigo!!!

Para fazer aparecer as informações que eu quero no relatório eu estou utilizando o componente QRRichText, mas eu estou jogando as informações nele no evento AfterScroll da query. Da seguinte forma:

QRRichText3.Lines.Clear;

QRRichText3.Lines.Add(form2.Query3DES_TAREFA.Value);

..........

Será que isso pode estar interferindo em alguma coisa?

E por que é que você faz isso?

Não seria mais simples utilizar um TQRDBRichText e associar o campo DES_TAREFA da query3 a ele?

Link para o comentário
Compartilhar em outros sites

  • 0
Guest diegolambaum

Gente estou com um problemão

tenho um relatório de aviso de cobrança que precisa sair meia folha

mas de um modo que saia 2 avisos por folha e depois as folhas são cortadas no meio por uma guilhotina

o problema é que esses avisos são MASTER / DETAIL e os detalhes tem que ter sem o mesmo número pra dar certo o tamanho da folha.. mas até ai já esta mais ou menos resolvido =D

o problema é que eu uso onNeedData (tanto do QuickReport quanto do DetailBand) e o preview funciona certinho

mas quando eu mando imprimir não acontece nada.. e se eu antes de imprimir dou um first na query, a janela de progresso da impressão aparece e não acontece nenhum progresso.. dai eu tenho que finalizar pelo delphi.

E o outro problema é que estou usando qrComposite de modo que meu quick tem o tamanho de meia folha e o composite A4

dai eu adiciono o quick nele pra fica 2 avisos por folha.. mas agora que estou usando onNeedData, quando eu dou o preview no qrComposite aparece a tela de visualização mais não aparece o relatório em si!! se eu seto as query e paro de usar onNeedData o preview pelo qrComposite funciona perfeitamente =S

HEELP!!

Link para o comentário
Compartilhar em outros sites

  • 0
o problema é que eu uso onNeedData (tanto do QuickReport quanto do DetailBand) e o preview funciona certinho

mas quando eu mando imprimir não acontece nada.. e se eu antes de imprimir dou um first na query, a janela de progresso da impressão aparece e não acontece nenhum progresso..

diegolambaum, acho que no destaque, você quiz se referir a banda SubDetailBand, certo?!

este: "e se eu antes de imprimir", pressupõe que você normalmente não estaria fazendo isto. Entretanto, você sempre deverá posicionar o dataset no seu início (via evento BeforePrint) quando você utilizar o evento OnNeedData, porque nestas condições você não liga um dataset à respectiva propriedade do QuickRep ou SubDetail.

E o outro problema é que estou usando qrComposite de modo que meu quick tem o tamanho de meia folha e o composite A4

dai eu adiciono o quick nele pra fica 2 avisos por folha.. mas agora que estou usando onNeedData, quando eu dou o preview no qrComposite aparece a tela de visualização mais não aparece o relatório em si!! se eu seto as query e paro de usar onNeedData o preview pelo qrComposite funciona perfeitamente =S

Há algum problema com seu relatório, sem dúvidas, mas fica difícil avaliar sem saber o que você está fazendo na inicialização deles e nos eventos.

Abraços

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

  • 0
Guest diegolambaum

Bom dia Micheus

Eu realmente fiz bobeira tentando usar um qrComposite pois não era necessário

e estou usando 1 qrGroup, 1 qrSubDetail (me desculpe por informar errado) e 1 GroupFooter

agora só tenho mais um problema:

caso os detalhes sejam maiores que 10 eu não posso dar um next na master

(pois esse cliente tera duas vias).. mas se eu não dou o next, parece que o processo fica preso no onNeedData

procedure TfrmRelAvCob.QuickRep1NeedData(Sender: TObject;

var MoreData: Boolean);

begin

MoreData := not qryRelHonor.Eof;

if bNext and (not bPrior) then --> bPrior me indica que tem mais de 10 detalhes, com isso ele continua no mesmo registro

qryRelHonor.Next;

bNext := true; --> serve apenas para o next não ser executado na primeira vez

end;

se eu dou um prior de um outro lugar (ex: beforePrint do qrGroup), depois o onNeedData pula 1 registro

ex:

MASTER IMPRESSÃO

1 Diego 1 Diego

2 Maria 2 Maria --> a Maria tem 2 folhas

3 Joao 4 Camila

4 Camila 5 Jose

5 Jose 6 Daniela --> a Daniela tem 3 folhas (2 priors)

6 Daniela 9 Cassio

7 Mario

8 Natália

9 Cassio

gostaria de saber como no onNeedData eu faço pra ele continuar imprindo o mesmo registro determinadas vezes

muito obrigado e desculpa se a minha dúvida for meio boba

Link para o comentário
Compartilhar em outros sites

  • 0
Guest diegolambaum

MASTER______________________IMPRESSÃO

1 Diego______________________1 Diego

2 Maria_______________________2 Maria --> a Maria tem 2 folhas

3 Joao_______________________4 Camila

4 Camila_____________________5 Jose

5 Jose_______________________6 Daniela --> a Daniela tem 3 folhas (2 priors)

6 Daniela_____________________9 Cassio

7 Mario

8 Natália

9 Cassio

desculpa de novo, do outro jeito num dava pra entender nada ^^

Link para o comentário
Compartilhar em outros sites

  • 0
agora só tenho mais um problema:

caso os detalhes sejam maiores que 10 eu não posso dar um next na master

(pois esse cliente tera duas vias).. mas se eu não dou o next, parece que o processo fica preso no onNeedData

procedure TfrmRelAvCob.QuickRep1NeedData(Sender: TObject;
  var MoreData: Boolean);
begin
  MoreData := not qryRelHonor.Eof;       
  if bNext and (not bPrior) then        --> bPrior me indica que tem mais de 10 detalhes, com isso ele continua no mesmo registro
    qryRelHonor.Next;
  bNext := true;           --> serve apenas para o next não ser executado na primeira vez
end;

diegolambaum, ainda não entendi direito a sua intenção, mas vamos ver no que dá para ajudar...

Esta parte sobre quando há mais que 10 itens no detalhe, não está muito clara. Voce verificar se haverão mais de 10 itens do detalhe e se houver, não poderá avançar... Mas, imprimirá até os 10 primeiros? Quando chegar ao 10º, fará o que? Estas coisas não ficam claras, quando você diz que "não pode da um next na master".

Estes controles, bNext e bPrior, estão sendo manipulados onde e como? Não dá para dizer que a lógica está certa ou errada, sem saber como você manipula eles.

se eu dou um prior de um outro lugar (ex: beforePrint do qrGroup), depois o onNeedData pula 1 registro
Não há sentido em usar o Prior. Voce tem que ajustar sua lógica de modo a apenas avançar, assim, você não incorrerá em erro, pois pode ocorre de você nunca avaliar o EOF. O avanço no dataset, normalmente se dá logo após sua utilização, o que pode ser entendido como sendo no evento AfterPrint da banda detalhe.

Dê uma olhada neste post, na parte do OnNeedData e veja se lhe dá uma idéia de como você deve controlar as informações neste evento.

gostaria de saber como no onNeedData eu faço pra ele continuar imprindo o mesmo registro determinadas vezes
e isto será feito neste mesmo relatório? Que parte dele você quer repetir, já que você tem banda detail e sub-detail? É todo o relatório ou apenas a parte que está na sub-detail? Pergunto, porque há dois eventos OnNeedData e gerenciar esta repetição no QuickRep, resulta em repetição de todo o relatório, porém, se for na sub-detail, apenas ela será repetida.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Guest diegolambaum

Olá Micheus

Minha tabela master são os Clientes

caso um certo cliente tenha até 10 Detalhes, só é impresso um aviso de cobrança

mas caso ele tenha mais de 10.. eu tenho que imprimir 2 ou mais avisos pra ele (cada aviso cabe 10 detalhes)

no beforePrint do qrGroup eu verifico se tem mais de 10 detalhes (bPrior := true) e faço um filtro pra pegar apenas os 10 registros que preciso

fiz um teste em um projeto novo com apenas uma banda Detalhe e o onNeedData funciou certinho

mas no meu projeto que tem MASTER / DETAIL ele trava ali e num sai mais

to ficanu doido já =X

abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Minha tabela master são os Clientes

caso um certo cliente tenha até 10 Detalhes, só é impresso um aviso de cobrança

mas caso ele tenha mais de 10.. eu tenho que imprimir 2 ou mais avisos pra ele (cada aviso cabe 10 detalhes)

no beforePrint do qrGroup eu verifico se tem mais de 10 detalhes (bPrior := true) e faço um filtro pra pegar apenas os 10 registros que preciso

diegolambaum, acho que agora está mais claro e quem sabe o que eu vou citar possa lhe ajudar.

Como você deverá regular o andamento do relatório, ou seja, a banda rbDetail poderá ser reimpressa mais vezes e não apenas uma única vez, no caso do quickreport, o mais apropriado é que você use o evento OnNeedData do QuickRep.

De modo similar, como a banda qrSubDetail deverá ser manipulada no sentido de não imprimir mais que 10 vezes por página, você deverá usar também o evento OnNeedData dela para fazer este controle.

Sabemos que após impressa a banda detail, a banda sub-detail é processada e impressa. A pós cada impressão desta banda, devemos avançar o dataset ligado a ela (AfterPrint). Ao chegar ao 10º registro impresso no sub-detail e houverem mais a serem impressos (não for fim do dataset ligado a esta banda), precisamos avançar de página mas não devemos avançar o dataset principal. Só faremos isto, quando o dataset "ligado" a sub-detail atingir seu fim.

Mas só avançar a página não resolve nosso problema porque precisamos que os dados na banda detail sejam reimpressos na nova página. Vamos fazer isto usando de dois artifícios:

- a propriedade ForceNewPage (na banda detalhe) resultará em uma detail por página;

- marcar MoreData = False no evento OnNeedData da banda sub-detail quando houver mais itens a serem impressos, fará com que a banda detalhe seja impressa, porém não avançaremos o dataset principal (com isso, ela é impressa igualzinho a anterior)

Para a implementação:

- 01 QRBand do tipo rbDetail, com a propriedade ForceNewPage=True, onde vão os dados da tabela mestre;

- 01 QRSubDetail, onde vão os dados da tabela detalhe;

- 01 QRBand do tipo rbGroupFooter, que deverá ser definida como a GroupFooter da banda QRSubDetail;

- declarar uma variável do tipo Integer na sessão private para controle da qtd de linhas impressas (ex. QtdPrinted);

- As propriedades DataSet do QuickRep1 e QRSubDetail1 não deverão ser "setadas" (lembre, estamos usando o evento OnNeedData);

- Assumi que o dataset detail está vinculado ao master via propriedade DataSource (Isto é importante. Caso você não use deste modo, avise).

A título de exemplificação, vou chamar o dataset master de QryMaster e o detalhe de QryDetail

// BeforePrint do QuickRep
procedure TForm1.QuickRep1BeforePrint(Sender: TObject; var MoreData: Boolean);
begin
  QryMaster.First;  // antes de iniciarmos a impressão, posicionamos o dataset master no início
end;

// OnNeedData do QuickRep
procedure TForm1.QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
begin
  MoreData := not QryMaster.EOF;  // continua enquanto não chegar ao fim do dataset principal
end;

// AfterPrint da banda rbDetail
procedure TForm1.QRBand1AfterPrint(Sender: TQRCustomBand; BandPrinted: Boolean);
begin
  QtdPrinted := 0;  // inicializa contador de sub-detalhes impressas, após cada impressão da master
end;

// AfterPrint da banda sub-detail
procedure TForm1.QRSubDetail1AfterPrint(Sender: TQRCustomBand; BandPrinted: Boolean);
begin
  Inc(QtdPrinted);  // incrementamos após impresso cada registro de QryDetail
  QryDetail.Next;  // avançamos o dataset da banda sub-detail
end;

// AfterPrint da banda rbGroupFooter. Ele é gerado após conclusão da impressão de todas
// as "linhas" sub-detail. Isso ocorre, quando MoreData = False no OnNeedData da banda SubDetail
procedure TForm1.QRBand2AfterPrint(Sender: TQRCustomBand; BandPrinted: Boolean);
begin
 // só vamos avançar o dataset principal, quando realmente não houver mais detalhes a serem 
 // impressos. Caso não avançarmos, a banda detalhe ainda imprimirá os dados em que o dataset 
 // está posicionado, ou seja, serão impressos repetidos
  if QryDetail.EOF then
    QryMaster.Next;
end;

// OnNeedData da banda SubDetail
procedure TForm1.QRSubDetail1NeedData(Sender: TObject; var MoreData: Boolean);
begin
 // verificamos se a quantidade de itens impressos chegou a 10 e, caso o dataset QryDetail ainda não tenha
 // chegado ao seu fim, simulamos a conclusão da impressão da banda sub-detail. Isto resultará no processamento
 // da banda rbGroupFooter, dando início a nova sequência: detail/sub-detail/groupfooter
  if (QtdPrinted = 10) and (not QryDetail.EOF) then
  begin
    QtdPrinted := 0;
    MoreData := False;
  end else // do cotrário, seguimos com o procedimento usual
    MoreData := not QryDetail.EOF
end;

Teste e veja o resultado.

Abraços

p.s. Editei para inclusão do evento BeforePrint do quickrep

Editado por Micheus
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
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...