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

Numerar Páginas No Relatório


Aghata

Pergunta

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

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

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

Link para o comentário
Compartilhar em outros 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!!!

:(

Link para o comentário
Compartilhar em outros 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!

Link para o comentário
Compartilhar em outros 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.

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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...