10 02 2015
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
Salvando imagens no banco de dados utilizando C# Aprenda a utilizar (de verdade) os breakpoints do Visual Studio
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!!
Olá Edilson, obrigado pelo comentário! Fico feliz que tenha conseguido resolver a sua dúvida!
Abraço!
André Lima
Olá André, muito legal da sua parte responder ao nosso colega.
O Crystal reports é gratuito? qual a licença de uso dele?
Olá Rodrigo, obrigado pelo comentário!
O Crystal é gratuito para uso direto de dentro do Visual Studio professional ou superior.. Porém, existem edições mais potentes do Crystal disponíveis para venda (445 dólares no momento).. Confira a tabela comparativa aqui:
http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/60df293e-41e8-2e10-9293-fa4beeb40a99?QuickLink=index&overridelayout=true&52772263221521
Abraço!
André Lima
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.
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