Crystal Reports - Manual de sobrevivência 


Embora já tenhamos abordado temas básicos relacionados ao Crystal Reports vamos agora procurar aprofundar nosso conhecimento sobre esta ferramenta tratando de questões que fazem parte da maioria das dúvidas que surgem quando vamos usar o Crystal Reports. Novamente iremos usar o sistema de perguntas e respostas . A versão abordada será a 4.6 do Crystal Reports , embora o a versão atual seja a 8.0 , pois assim estaremos atingindo um maior número de usuários.

Se você instalou o Crystal Reports na versão 5.0 do VB não terá que instalá-lo novamente quando migrar para a versão 6.0. Se você não instalou , o Crystal Reports não é instalado automaticamente com a versão 6.0 e você vai precisar instalá-lo separadamente. Para isto inicialize o arquivo de instalação Crystl32.exe presente no diretório \COMMON\TOOLS\VB\CRYSREPT no CD 1 do seu VB 6.0

1 - Como Criar Etiquetas no Crystal Reports ?

1- Inicie o Crystal Reports 

  1. no Menu File selecione a opção New. 
  2. A seguir selecione na janela - Create New Report - o Expert - Mail Label
  3. Na janela - Create Report Expert - clique sobre o ícone Data file , selecione o banco de dados com o qual deseja trabalhar e a seguir clique no botão Add e depois no botão Done.

2- Na aba Fields selecione os campos da tabela para a qual deseja gera as etiquetas

3- A seguir , na aba Label , você deve selecionar o tipo de etiquetas que pretende usar (opção Choose Mailing Label Type) , caso a etiqueta que você vai usar não apareça na relação você deverá criar uma indicando as medidas , selecionando a opção User Defined Label


4- No Frame  - Printing direction - você deve informar a ordem de impressão dos registros , pode ser "Across then Down" pois as etiquetas serão impressas na ordem horizontal.

5- No Frame - Number of Labels -  Após você selecionar a etiqueta ou informar as medidas aqui deverá aparecer o número de colunas que você tem em Across Page e quantas etiquetas tem em cada coluna. Se os valores não conferirem com o da sua página verifique as medidas .

6- No frame - Page Margins  - Você pode definir  as margens das páginas

7- No frame - Label size - Tome cuidado aqui se você for criar as suas próprias medidas. Informe em
Width = largura da etiqueta (em centímetros) e em Height = altura da etiqueta (em centímetros)

8- No frame - Gap between labels- Você informa o espaço entre uma etiqueta e outra nos sentidos horizontal e vertical.

9- Para visualizar o relatório clique no botão Preview Report . 

Obs - Voce deve configurar a impressora na opção Selecione Printer Setup do menu File indicando a impressora a ser utilizada, lembrando que na configuração da impressora deve estar selecionado o tamanho do papel a ser utilizado, pois o Crystal faz a leitura do setup da impressora para formatar o relatório.

10- No menu File selecione a opção File Set label layout e verifique se o número de etiquetas por página (number of labels) se está de acordo, pois quando você está definindo as medidas o Crystal não atualiza este campo. Se estiver ok, continue em frente senão altere as medidas até encontrar o número correto.
Volte para a tela padrão do relatório.

11- Ao visualizar o relatório você tem acesso somente à área esquerda do relatório (como se fosse uma etiqueta). Os campos devem estar na ordem que você quer que apareçam na etiqueta. Feito isto selecione preview e verifique se a página está aparecendo corretamente (porém lembre-se que WYSIWYG (What you see is what you get) não funciona no Crystal Reports). O que você está vendo pode não ser exatamente o que você terá.

Bem a esta altura só falta imprimir e verificar , ajustando quando necessário. Se você tiver problemas
vamos ver alguns pontos que devem ser verificados.

a) Se você estiver usando o driver Genérico/Texto , verifique se você colocou mas medidas corretas do papel e ainda se está configurado para com ou sem quebra de página.

b) O tipo de fonte utilizado também influi no resultado final (Usar a  fonte-padrão da impressora pode aumentar a velocidade)

c)Se puder, mande imprimir em impressora laser ou jato de tinta que o resultado deverá ser melhor.

d)Verifique ainda a versão que você está usando do Crystal Reports.

2 - Como imprimir por extenso no Crystal Reports ?

A resposta a essa pergunta é dada pelo próprio pessoal da ETZ , a distribuidora do Crystal no Brasil. (Eu pessoalmente não testei.) 

"Já está disponível no Brasil a função que irá permitir os usuários Crystal Reports a imprimir valores por extenso em português, isto é possível através da CRXLATE.DLL (16 Bits) ou da CRXLAT32.DLL (32 Bits), para se fazer o extenso, basta copiar a DLL correspondente ao seu ambiente no lugar da DLL que têm o mesmo nome desta, ela deve estar localizado ou no \WINDOWS\SYSTEM ou no \WINDOWS\CRYSTAL.

Após feito isto, basta entrar no Crystal, criar uma fórmula e usar a função ToWords(número). Qualquer dúvida, contate o Suporte Crystal."

ExtPor16.exe   Download da versão 16 bits da DLL de extenso em português (CRXLATE.DLL)
ExtPor32.exe   Download da versão 32 bits da DLL de extenso em português (CRXLAT32.DLL)

3 - Considerações Sobre Uso de Impressoras com Crystal Reports

 É importante entender como Seagate Crystal Reports trata os ajustes de parâmetros de impressoras. Quando seu relatório estiver carregado, vá para o menu Arquivo (File) e escolha Configurar Impressora (Printer Setup).

Esta tela de diálogo é a que controla como e onde um relatório irá imprimir. É importante se levar em conta que algumas destas funcionalidades irão mudar como outro usuário (um cliente) imprime o mesmo relatório.

A primeira coisa a se verificar nesta janela é ONDE o relatório irá ser impresso, que impressora ele irá usar. Isto é controlado pela caixa "Nome da Impressora (Printer Name)".

Se o projetista do relatório escolher a Impressora Padrão do Sistema (System's Default Printer), evidenciada pela linha dizendo Impressora Padrão Pronta ("Default Printer Ready"), então o relatório irá tentar imprimir na impressora padrão do cliente (se ele tiver alguma selecionada).

Se o relatório não for designado para a Impressora Padrão, então ele é considerado um relatório de Impressora Específica (Specific Printer),e tentará ser impresso na impressora do cliente com o MESMO NOME da impressora usada na máquina do projetista original. Então, se esta impressora não for achada, o relatório irá ser impresso na Impressora Padrão do Cliente.

A Segunda seleção mais importante nesta tela é o checkbox "Propriedades Padrão (Default Properties). Se esta caixa estiver CHECADA, então o relatório será impresso usando as Propriedades da Impressora Padrão do Cliente, NÃO as propriedades que você tenha especificado nesta tela (tipo de papel, fonte de papel, orientação de página). Se esta opção estiver NÃO CHECADA, o relatório irá tentar forçar as configurações que você tenha especificado (tipo de papel, fonte de papel, orientação de página), na impressora do cliente.

Uma vez que a impressora do cliente suporte TODAS as configurações, o relatório será impresso de maneira similar à da impressora do desenvolvedor. Se, no entanto, alguma destas configurações não for suportada pela impressora do cliente, o relatório irá usar as Propriedades Padrão da impressora do cliente.

A melhor regra a seguir é: Se você estiver querendo forçar o tipo de papel, fonte de papel (bandejas) ou orientação de página na impressora do cliente, então SEMPRE DEIXE NÃO CHECADA a caixa Propriedades Padrão.

4- Como fazer a Justificação de textos no Crystal

A opção de justificar texto não está disponível na Barra de Ferramentas, mas ela existe. Basta clicar com o botão direito do mouse, com o cursor sobre o campo que se queira justificar (campo Memo, por exemplo), e então escolher a opção Format Field (Formatar Campo).

Dentro desta opção deve haver uma sessão chamada Alignment (Alinhamento). Ajuste então para Default (Padrão), ou Center (Centrado) / Left (Esquerdo) / Right (Direito).

5- Como eu posso saber as definições usadas em um determinado relatório ?

Várias vezes nos deparamos com a necessidade de saber exatamente quais os campos, fórmulas, tabelas usados no relatório. O Crystal Reports fornece um relatório completo da montagem do relatório, através de:

1-clique na função de menu Exportar Relatórios

2-escolha Report Definition

3-por fim escolha entre imprimir ou gravar em arquivo.

6- Inserindo  somente uma vez o controle CrystalReports  no seu projeto ?

Você  pode , e deve , incluir somente uma única vez o controle CrystalReports em seu projeto. Para usar o controle nos formulários do projeto basta fazer referência ao controle indicando a localização do controle. Assim se você inseriu o controle CR1 no formulário form1 e quer usar o controle no formulário form2 basta usar a sintaxe: 

Form1.CR1. ReportFileName = "Relatório.RPT"

Fazendo assim você usa somente um único nome para o seu controle Crystal em todo o projeto.

7-Usando as funções de conversões de dados no Crystal .

O Crystal fornece algumas funções para conversão de dados. Vejamos as mais usadas.(Para ver todas leia o Help )

  1. ToNumber(x) : Converte um texto informado no argumento x em um número.

Você geralmente usa esta função quando quer converter um campo definido como texto para um formato numérico. Por exemplo:

ToNumber("45.21")  retornará  o número 45,21

ToNumber("123.45") = 123.45

ToNumber({file.AcctNo}/2) = 22144          para {file.AcctNo} = 44288

ToNumber({file.ZIP}) < 33333 = TRUE      para  {file.ZIP} = 21385

  1. ToText(x) Converte o número x para o formato texto

ToText(12345) retornará "12345"  e   ToText(45.21) retornará "45"

  1. ToText(x,n) : Converte o número x para o formato texto usando n casas decimais. Assim temos:

ToText(12345.6789,2) retornará "12345,68"     e   ToText(12345.6789,0) retornará "12346"    

A função arrendonda o número conforme o numero de casas decimais definido.

  1. ToWords(x): Converte um número informado no argumento x num texto por extenso ( em inglês  :-(  )

ToWords(12345) retornará  twelve thousand three hundred fortyfive and

  1. ToWords(x,n): Converte um número informado no argumento x usando n casas decimais num texto por extenso.

ToWords(12345.5000,0) retornará  twelve thousand three hundred forty six ( observe o arredondamento)

  1. NumericText(x):  Verifica se o conteúdo do argumento x , um texto ,  é um número. Se o conteúdo for  um número a expressão retornada será YES caso contrário será NO. Assim:

NumericText({file.Reference}) = NO              para {file.Reference} = "ABCDEFG"

NumericText({file.IDNUM}) = YES                para {file.IDNUM} = "12345"

NumericText ({file.IDNUM} [1 to 5]) = YES  para {file.IDNUM} = "12345443"

NumericText({file.IDNUM}) = NO                 para {file.IDNUM} = "12345T"

8 - Como selecionar uma impressora que não a padrão no Crystal ?

Basta acrescentar as seguintes linhas de código no seu código para imprimir o arquivo. 

With CrystalReport1
  .ReportFileName = "X:\caminho\relatorio.rpt"
  .PrinterDriver = "Epson24.drv"
  .PrinterPort = "LPT1"
  .PrinterName = "Epson - Matricial"
  .Action = 1
End With

9 - Como enviar relatórios do Crystal pela Internet ?

With CrystalReport1
  .Destination = crptMail

  .EMailMessage= " Aqui você coloca a sua mensagem ou relatorio"

  .EMailSubject="Assunto"

  .EMailToList ="macoratti@riopreto.com.br"   
  .Action = 1
End With

10 - Como horas no formato correto no Crystal Reports ?

Você vai ter que configurar o Crystal para fazer isto. 

Agora as datas do seu relatório serão transformadas em strings no formato "YYYY/MM/DD hh:mm:ss"

E daí ( você deve estar se perguntando !!! ) . Bem agora basta você extrair a hora usando a função de substring do Crystal: Assim:

{Tabela.hora}[12 to 16] - Isto irá extrair os dados a partir da posição 12 até a 16 . Justamente a hora no formato hh:mm.

11 - Extraindo subcadeias de strings/campos no Crystal Reports ?

O crystal Reports possui o operador subscript que permite a extração de subcadeias de strings da mesma forma que a função Mid$.  Sua sintaxe é a seguinte:  

x[n]         onde:  x é a string ou campo e n é o número da posição na string que desejamos extrair

Assim:      "Visual Basic"[1]     obtém a primeira letra da cadeia Visual Basic , ou seja , a letra V

               "Visual Basic"[8]     retorna a letra

O operador admite também a seguinte sintaxe:

 x[n to m]   onde extraimos uma subcadeia de x iniciada em n e terminada em m

Ex:   "Visual Basic"[1 to 7]  => irá retornar  a cadeia Visual

O operador pode ser utilizado para extrair partes dos campos das tabelas de um banco de dados . Assim para uma tabela chamada clientes onde temos o campo nome armazenando o nome do cliente podemos fazer:

{Clientes.Nome}[1 to 20]   => isto extrairá os 20 primeiros caracteres do nome do cliente armazenado

Se quisermos imprimir somente os clientes cujo nome iniciem com a letra A , podemos fazer:

if {Clientes.Nome}[1]="A" then

     {Clientes.Nome}

else

...

12 - Como formatar campos no Crystal Reports ?

Este é um velho e (des) conhecido problema para quem usa o crystal reports (pelo menos nas versões mais antigas). Como posso exibir o camo cep, telefone, cgc, cpf , etc.. formatado no meu relatório no crystal reports ?

A resposta é simples : Utilize as fórmulas do Crystal.  Como ?   Vamos mostrar a seguir: 

Vamos supor que você quer exibir o campo telefone que esta armazenado no seu banco de dados sem formatação ( geralmente armazenamos os campos sem formatação). Se você inserir o campo diretamente no Crystal ele irá exibir o campo do jeito que você armazenou  :-( . 

Para contornar o problema vamos utilizar uma fórmula para formatar o campo  no padrão de exibição desejado.

Você tem a tabela clientes com os campos : codigo, nome , telefone.

O campo telefone armazena o código de área da cidade e o número do telefone da seguinte forma: 

CCNNNNNNNN  -  onde CC é o código de área da cidade e NNNNNNNN o número do telefone . Você tem os seguinte valores armazenados para este campo:   1196701212  e 1702245521.

Você quer exibir o telefone no relatório no seguinte formato: 11-9670-1212  e  17-0224-5521.

Se você usar o campo diretamente no Crystal irá obter o seguinte:

Vamos usar uma fórmula para exibir o campo no relatório no formato desejado. 

{socios.TELEFONE}[1 to 2] + "-" + {socios.TELEFONE}[3 to 6] + "-" + {socios.TELEFONE}[7 to 10]

Dependendo do seu campo a fórmula será diferente mas a maneira é sempre a mesma. (Eu estou usando a versão 4.6 do Crystal Reports)

13 - Imprimindo em outras impressoras que não a padrão .

Para imprimir em uma impressora que não seja a padrão você pode usar propriedade PrinterName em conjunto com as propriedades PrinterDriver e PrinterPort.  Se você definir estas três propriedades corretamente o Crystal imprime na impressora definida caso contrário ele usa a padrão. 

Sintaxe:  PrinterName

[form.]Report.PrinterName[= PrinterName$]       Ex:    Report1.PrinterName= "Epson LQ850"

Define a impressora Epson LQ850

Sintaxe: PrinterDriver
[form.]Report.PrinterDriver[= DriverName$]       Ex:   Report1.PrinterDriver = "Epson24.drv"

Define o driver da impressora para Epson24.drv

Sintaxe:PrinterPort

[form.]Report.PrinterPort[= PortName$]              Ex:  Report1.PrinterPort= "LPT1"

Define a porta LPT1

Veja um exemplo de código para fazer este serviço :

CrystalReport1.PrinterPort = "LPT1"

CrystalReport1.PrinterDriver = "Epson24.drv"

CrystalReport1.PrinterDriver = "Epson LQ850"

CrystalReport1.action = 1

 

Aguarde mais artigos tratando da impressão de relatórios na plataforma .net.

 

Romanos 7:7 Que diremos pois? É a lei pecado? De modo nenhum. Contudo, eu não conheci o pecado senão pela lei; porque eu não conheceria a concupiscência, se a lei não dissesse: Não cobiçarás.

Romanos 7:8 Mas o pecado, tomando ocasião, pelo mandamento operou em mim toda espécie de concupiscência; porquanto onde não há lei está morto o pecado.

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Veja os Destaques e novidades do SUPER DVD Visual Basic  (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C#  com exclusivo material de suporte e vídeo aulas com curso básico sobre C#.

Veja também os Cursos com vídeo aulas e projetos exemplos:

Referências:


José Carlos Macoratti