André Alves de Lima

Talking about Software Development and more…

Dica rápida: Numerando páginas frente e verso no Crystal Reports

Hoje eu recebi uma dúvida de um inscrito sobre numeração de páginas frente e verso no Crystal Reports. Ao invés de simplesmente respondê-lo, resolvi escrever um post rápido detalhando a solução.

Veja a questão (editada para fins de publicação):

André bom dia,

Estou fazendo um relatório em Crystal Reports e o cliente quer que os números de páginas saiam da seguinte forma: “Pag. 1” e a próxima “Pag. 1 verso” e assim sucessivamente, pois ele vai imprimir o relatório em frente e verso, creio eu que um loop no crystal resolveria isto, mas não tenho muita intimidade com o Crystal e não sei como fazer este loop, se fosse no desenvolvimento eu faria tranquilamente.

Se puder me ajudar te agradecerei muito

Claro que eu posso ajudar. A maneira como eu pensei em solucionar essa questão foi utilizando uma simples fórmula. Com a página atual real (função “PageNumber” no Crystal Reports), podemos detectar se estamos em uma página ímpar (páginas “frente“) ou em uma página par (páginas “verso“). Dependendo do resultado se a página for par ou ímpar, utilizamos “Pag. X” ou “Pag. X verso“. Veja a tabela abaixo:

Note que a fórmula para descobrir o número final da página é diferente dependendo da página ser par ou ímpar. Para páginas ímpares (páginas “frente“), utilizamos a fórmula: (“Página Real” + 1) / 2. Para páginas pares (páginas “verso“), utilizamos a fórmula: “Página Real” / 2.

Na linguagem de fórmulas do Crystal Reports, para descobrirmos se um número é ímpar, basta utilizarmos o operador “mod” de 2. Esse operador retorna o resto da divisão de um número pelo outro (nesse caso o número “dois“). No caso do resto da divisão ser “1“, o número é ímpar. Caso contrário (resto zero), o número é par. Aí basta aplicar a fórmula para calcular o número final conforme vimos na tabela:

// Página ímpar
if (PageNumber mod 2) = 1 then
    "Página " + CStr((PageNumber + 1) / 2, 0)
// Página par
else
    "Página " + CStr(PageNumber / 2, 0) + " verso"

E com isso temos o resultado esperado. Na página 1, temos “Página 1”. Na página 2, temos “Página 1 verso”. E aí por diante.

É isso aí. Espero que essa dica ajude outras pessoas também. Como você pode perceber, eu costumo dar bastante atenção para os meus inscritos. Caso você também queira ficar por dentro das novidades do meu site, além de receber dicas que eu só compartilho por e-mail, assine a minha newsletter agora mesmo através desse link ou utilizando o formulário abaixo.

Até a próxima!

André Lima

Newsletter do André Lima

* indicates required



Powered by MailChimp

6 thoughts on “Dica rápida: Numerando páginas frente e verso no Crystal Reports

  • Edilson Barros disse:

    Meu amigo, muito, mais muito obrigado mesmo, vc não tem ideia do favor que me fez, como não tenho experiência com o Crystal se tornou muito difícil. Fica com Deus!!

  • Rodrigo disse:

    Olá André, muito legal da sua parte responder ao nosso colega.

    O Crystal reports é gratuito? qual a licença de uso dele?

  • Thyago Brasil disse:

    Boa tarde. É possível iniciar a numeração da pagina depois de uma determinada quantidade de páginas já impressas? Por ex: Vou passar por parametro a quantidade de páginas a serem enviadas. Se essa quantidade for igual ao numero da página eu inicio novamente.

    • andrealveslima disse:

      Olá Thyago!

      O Crystal Reports é flexível quanto ao “reset” do número de páginas.. Para implementar uma lógica específica para isso, basta você utilizar a fórmula do item “Reset page number after”, que se encontra dentro da tab “Paging” da seção onde você exibirá o número da página..

      Veja só (a screenshot está com o Crystal Reports em alemão, mas, acho que dá para você ter uma ideia de onde encontrar essa opção):

      Essa fórmula deve retornar “true” quando você quiser resetar o número da página.. Aí é só você colocar a lógica que você quiser dentro dessa fórmula e o reset da página deve funcionar.. Entendeu?

      Abraço!
      André Lima

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *