Forçar o QR a não deixar informação dividida em 2 páginas

Delphi

16/02/2004

Olá fórum,

Eu tava aqui tentando fazer uma coisa que ainda não vi jeito.
Num relatório, eu tenho uma banda Detail, uma ChildBand e aí vem os subdetails.
O lance é que um cliente não quer que fique metade de uma informação em uma página e a outra metade na página seguinte. Então, o que eu precisava era que ficassem na mesma página a Detail, a Child e todos os subdetails. Claro que quando são mtos subdetails, ele acaba colocando alguns em uma página e outros em outra. E é justamente isso que eu queria evitar! Precisava encontrar uma forma de fazer o Quick Report prever quando não vai caber na página, e assim, jogar tudo para a outra página. Será que existe uma forma de fazer isso?
Uma ´solução´ que eu encontrei foi limitar o número de details por página... vou contando, e quando der X, forço a passar pra outra página. Mas o problema é que fixar seria muito ruim já que nem todas as details tem o mesmo tanto de subdetails.

Eh isso.
Existe alguma forma de fazer o QR fazer essa previsão?

Obrigada.


Moonlight

Moonlight

Curtidas 0

Respostas

Gabriel Hilbig

Gabriel Hilbig

16/02/2004

Some X + SubDetail.DataSet.RecordCount
em BeforePrint;
Se Exceder o Tamanho da Página use Método
ForceNewPage.


GOSTEI 0
Moonlight

Moonlight

16/02/2004

Ploft! a dica valeu demais, brigada.

Ficou assim:

procedure TSAP33X50.QRB_DETAILBeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
var TamanhoAtual: Integer;
begin
  TamanhoAtual:= QRB_DETAIL.Height + ChildBand2.Height + GroupFooterBand1.Height
                 + (QRSubDetail1.Height * QRSubDetail1.Dataset.RecordCount);

  if ((PaginaAnterior <> 0) and  (PaginaAnterior=QR_SAP33X50.PageNumber)) then
  begin
    if (TamanhoAtual + TamanhoTotal > 660) then
      QR_SAP33X50.NewPage;
  end;

  if ((PaginaAnterior<>QR_SAP33X50.PageNumber) and (PaginaAnterior <> 0))
  then TamanhoTotal:=0
  else TamanhoTotal := TamanhoTotal + TamanhoAtual;

  PaginaAnterior:= QR_SAP33X50.PageNumber;
end;


onde TamanhoTotal e PaginaAnterior são variaveis globais que são zeradas imediatamente antes do relatório começar a ser gerado... e 660 é um valor que acabei descobrindo no chute. Na verdade, 670 dava, mas por segurança...

Brigada!


GOSTEI 0
Wmcaetani

Wmcaetani

16/02/2004

:( O problema de todo o cliente é querer q o programador resolva tudo, as vezes é mais fácil colocar uma outra impressora ou mexer no HardWare invés de adaptar o Soft ou tentar ficar fazendo malabarismos de programação para resolver o problema. :roll:


GOSTEI 0
POSTAR