• 0
Sign in to follow this  
Aghata

Numerar Páginas No Relatório

Question

Olá Amigos !!!

Eu tenho que imprimir vários registros no QuickReport, cada um vai ficar em uma folha Dessa forma a numeração tradicional "pag1,pag2,pag3' funcionaria, mas existem registros que ocupam mais de uma página, então eu teria que fazer o seguinte:

registro 1 -------------pag1

registro 2 -------------pag1/3 (registro 2 tem 3 páginas)

registro 2 -------------pag2/3

registro 2 -------------pag3/3

registro 3 -------------pag1

registro 4 -------------pag1/2 (registro 4 tem 2 páginas)

registro 4 -------------pag2/2

e assim por diante. Dessa forma eu numero as páginas de cada registro e não todas as páginas dos registros em geral.

O que devo fazer!!!

:o

Share this post


Link to post
Share on other sites

7 answers to this question

Recommended Posts

  • 0

Oi.

Parece que o problema é de conceito... na verdade você não quer numeração de páginas... você quer numeração de registros...

Assim, você não usará a paginação do QuickReport (pois terá uma numeração de páginas sequencial, que não interessa a você)...

Então, a solução é preparar previamente a numeração que você precisa (que não é de páginas)... colocando, em um outro campo da própria tabela (ou uma tabela temporária) a numeração que deve sair em cada folha...

Ok?

Share this post


Link to post
Share on other sites
  • 0

Oi Amigo!!!

Obrigado por estar me ajudando.

Eu fiz isso:

*******************************************************

var x,PagFinal:integer;

begin

table1.First;

Repeat // repeat para mudar de registro

QuickRep3.Prepare;

PagFinal:=QuickRep3.QRPrinter.PageCount;

For x:=1 to PagFinal do // For para mudar numerar as páginas do registro posicionado

begin

QRLabel21.Caption := (inttostr(x)+'/'+inttostr(PagFinal));

//este qrlabel21 é usado pra exibir as páginas individuais (por registro), por exemplo 1/2, 2/2.

end;

table1.Next;

until(table1.Eof);

QuickRep3.Preview;

*******************************************************

mas parece que não adiantou, ele continua numerando geral e não por registro.

-----------------------------

Se não tiver outra forma e eu tiver que fazer tabela temporária, como eu faço pra criar esta tabela.

Não sei o que fazer!!!

:(

Share this post


Link to post
Share on other sites
  • 0

Vejamos...

Segue um exemplo...

Digamos que eu tenha uma lista de grupos de animais perigosos e que tenha uma lista com varios elementos

dentro desses grupos...

Os arquivos foram criados no DbExplorer, e as tabelas são dbf (Visual dBase7), em um alias temporario, com o nome "temp".

// ************************************* Criando a tabela dos grupos:

create table 'animais_perigosos_grupo.dbf'
(
grupo char(3),
titulo char(20)
)

Inserindo os dados:

insert into 'animais_perigosos_grupo.dbf'
(grupo, titulo)
values
('001','Escorpiao')

insert into 'animais_perigosos_grupo.dbf'
(grupo, titulo)
values
('002','Cobra')

insert into 'animais_perigosos_grupo.dbf'
(grupo, titulo)
values
('003','Jacare')

insert into 'animais_perigosos_grupo.dbf'
(grupo, titulo)
values
('004','Tubarao')

Verificando os dados inseridos:

select * from 'animais_perigosos_grupo.dbf'


// ************************************* Criando a tabela com os detalhes sobre os bichos:

create table 'animais_perigosos_detalhe.dbf'
(
gr char(3),
codigo char(6),
descricao char(20),
informacao char(80)
)

Inserindo as informações detalhadas:

Insert into 'animais_perigosos_detalhes.dbf'
(gr, codigo ,descricao, informacao)
values
('001', '001001', 'EscorpiaoRei',     'Escorpiao que vive no deserto, muito venenoso')

Insert into 'animais_perigosos_detalhes.dbf'
(gr, codigo ,descricao, informacao)
values
('001', '001002', 'EscorpiaoEremita', 'Escorpiao que vive sozinho e é pouco venenoso')

Insert into 'animais_perigosos_detalhes.dbf'
(gr, codigo ,descricao, informacao)
values
('001', '001003', 'EscorpiaoPraiano', 'Escorpiao que vive nas areias das praias do Espirito Santo e é muito venenoso...')

Insert into 'animais_perigosos_detalhes.dbf'
(gr, codigo ,descricao, informacao)
values
('001', '002001', 'Cascavel',         'Cobra barulhenta, muito comum aqui perto de Juiz de Fora... etc... etc...')

Insert into 'animais_perigosos_detalhes.dbf'
(gr, codigo ,descricao, informacao)
values
('001', '002002', 'Coral',            'Cobra terrível, muito bonita, e das cores do Flamengo...')

Insert into 'animais_perigosos_detalhes.dbf'
(gr, codigo ,descricao, informacao)
values
('001', '002003', 'CoralFalsa',       'Cobra inofensiva e que não devia estar nesta lista...')

Insert into 'animais_perigosos_detalhes.dbf'
(gr, codigo ,descricao, informacao)
values
('001', '002004', 'UrutuCruzeiro',    'Cobra que tem uma cruz na cabeça... ela dá o bote mortal e já encomenda a alma...')

Insert into 'animais_perigosos_detalhes.dbf'
(gr, codigo ,descricao, informacao)
values
('001', '003001', 'JacaredoPantanal', 'Jacare pequeno, mas muito agressivo... adora comer patos e tuiuiussssssss ai...')

Insert into 'animais_perigosos_detalhes.dbf'
(gr, codigo ,descricao, informacao)
values
('001', '003002', 'JacaredoTchan',    'Jacare criado, que participa de programas de televisão... não é perigoso (acho)...')

Insert into 'animais_perigosos_detalhes.dbf'
(gr, codigo ,descricao, informacao)
values
('001', '003003', 'Jacareacanga',     'Jacare estampado em peças femininas (canga)... não devia estar nesta lista...')

Insert into 'animais_perigosos_detalhes.dbf'
(gr, codigo ,descricao, informacao)
values
('001', '004001', 'Tubaraomartelo',   'Tubarao muito agressivo.')

Insert into 'animais_perigosos_detalhes.dbf'
(gr, codigo ,descricao, informacao)
values
('001', '004002', 'Tubaraobranco',    'Tubarao que come, inclusive, peças de automoveis.')

// ************************************* Contando quantos itens existem em cada grupo.

Crie um arquivo texto, com extensão ".sql", com a query que "conta" quantos itens existem em cada grupo;
Por exemplo, salve essa "query" em c:\temp\Qgrupos.sql:

select count(gr) qpaginas, gr dogrupo
from 'animais_perigosos_detalhe.dbf'
group by gr

continua... Continuação...
// ************************************* Juntando a "contagem" com os dados dos bichos

select *
from 'animais_perigosos_grupo.dbf' grupos
  inner join 'animais_perigosos_detalhe.dbf' detalhe
  on (grupos.grupo=detalhe.gr)
  inner join 'c:\temp\Qgrupos.sql' Qgrupos
  on (grupos.grupo=Qgrupos.dogrupo)
order by grupo, descricao

// ************************************* 

Teremos uma lista ordenada, com os doze registros (portanto, doze folhas serão impressas); a quantidade
de registros de cada grupo vai estar na coluna (campo) qpaginas:

Se desejo o seguinte resultado:
Folha          Conteudo
 01            EscorpiaoEremita "Página 1/3"
 02            EscorpiaoPraiano "Página 2/3"
 03            EscorpiaoRei "Página 3/3"
 04            Cascavel "Página 1/4"
 05            Coral "Página 2/4"
 06            CoralFalsa "Página 3/4"
 07            UrutuCruzeiro "Página 4/4"
 08            Jacareacanga "Página 1/3"
 09            JacaredoTchan "Página 2/3"
 10            JacaredoPantanal "Página 3/3"
 11            Tubaraobranco "Página 1/2"
 12            Tubaraomartelo "Página 2/2"

Sendo:

Var
  sGrupoAtual: String
  iPaginaAtual: Integer,
  ftOutFile: TextFile;

// ******** Posso criar um arquivo-texto, com os dados desejados:

Begin
  Assign(ftOutFile,'c:\temp\lista.txt');
  ReWrite(ftOutFile);

  With query do Begin
    Open;
    First;
    sGrupoAtual  := FieldByName('gr').AsString;
    iPaginaAtual := 1;
    While not eof do Begin
      WriteLn(ftOutFile,'Pagina '+IntToStr(iPaginaAtual)+' de '+FieldByName('qpaginas').AsString);
      WriteLn(ftOutFile,'Grupo: '+FieldByName('grupo').AsString);
      WriteLn(ftOutFile,'Descricao: '+FieldByName('descricao').AsString);
      WriteLn(ftOutFile,'Destalhes sobre o bicho: '+FieldByName('informacao').AsString);
      Write(ftOutFile,chr(12));
      Next;
      If FieldByName('gr').AsString<>sGrupoAtual then
        Begin
          sGrupoAtual := FieldByName('gr').AsString;
          iPaginaAtual := 1;
        End;
      {EndIf FieldByName...}
    End;{While not eof}
  End;{With query}

  CloseFile(ftOutFile);

End;

Ok?

Espero ter ajudado!

Share this post


Link to post
Share on other sites
  • 0
Teremos uma lista ordenada, com os doze registros (portanto, doze folhas serão impressas); a quantidade de registros de cada grupo vai estar na coluna (campo) qpaginas
paulobergo, é uma solução bastante simples e eficiente - muito boa.

Quando lí o questionamento da colega Aghata, dias atrás, imaginei inicialmente(por falta de detalhes) que poderia ser uma situação em que existam campos do tipo memo, os quais, muitas vezes expandem a banda de modo que geram uma outra página.

Ainda estes dias, num outro forum, havia um questionamento similar. Pensando nisto estava tentando achar um modo de contornar esta deficiência do QuickRep. O problema é que só temos as informações sobre páginas apenas gerando o relatório. Isto é possível, através do Prepare, mas tem um preço: significa que da visualização até a impressão o relatório será gerado 3 vezes!!! Se houverem filtros que minimizem o número de registros listados até que poderia ser viável. Mas, se estivermos falando de muitos registros, o desemplenho pode ficar comprometido.

Neste link tem o projeto que implementei (QuickRep - Paginacao.zip) que basicamente faz uso do Prepare para popular uma TStringList com a informação sobre o número de páginas que o "campo" utilizará e, deste modo, no processo de visualização e impressão faz uso desta informação.

Se a Aghata quizer testar esta opção lembro que deve manter uma cópia de seu relatório original. Isto porque, com a base que montei e o artifício que utilizei para "stretchar" uma banda com texto, tive um efeito meio ilógico. Especificamente em um, dos quatro, grupos não há a contagem correta do número de páginas. Se alguém se interessar, fica aí um desafio: descobrir se fiz algo errado ou se a função Prepare está esquecendo de uma página. Eu já não consigo enxergar mais nada. :( (se encontrarem algo me avisem)

[]s

p.s. Tomei a liberdade de utilizar seus scripts para gerar a base de teste.

Share this post


Link to post
Share on other sites
  • 0

Vou dar uma espiada!

Share this post


Link to post
Share on other sites
  • 0
Guest Visitante

:angry: :huh: ?????não entendi que que é issso eu vo no google procura escorpião e me aparece isso ah te rala ne meu! :angry:

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this