You are on page 1of 11

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

a. no Menu File selecione a opção New.
b. A seguir selecione na janela - Create New Report - o Expert - Mail Label
c. 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

você deve informar a ordem de impressão dos . selecionando a opção User Defined Label 4. caso a etiqueta que você vai usar não apareça na relação você deverá criar uma indicando as medidas . você deve selecionar o tipo de etiquetas que pretende usar (opção Choose Mailing Label Type) .No Frame . na aba Label .A seguir .Printing direction .3.

Page Margins . Se os valores não conferirem com o da sua página verifique as medidas . 5. O que você está vendo pode não ser exatamente o que você terá.No frame . 9.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. 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).Gap between labels. . lembrando que na configuração da impressora deve estar selecionado o tamanho do papel a ser utilizado. Obs .Number of Labels .Label size .registros .Ao visualizar o relatório você tem acesso somente à área esquerda do relatório (como se fosse uma etiqueta). pois o Crystal faz a leitura do setup da impressora para formatar o relatório. continue em frente senão altere as medidas até encontrar o número correto. pois quando você está definindo as medidas o Crystal não atualiza este campo.No frame .No frame .Para visualizar o relatório clique no botão Preview Report . pode ser "Across then Down" pois as etiquetas serão impressas na ordem horizontal. 6.Tome cuidado aqui se você for criar as suas próprias medidas.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 estiver ok.Você informa o espaço entre uma etiqueta e outra nos sentidos horizontal e vertical.Voce deve configurar a impressora na opção Selecione Printer Setup do menu File indicando a impressora a ser utilizada. 10.No Frame . Volte para a tela padrão do relatório.Você pode definir as margens das páginas 7. Os campos devem estar na ordem que você quer que apareçam na etiqueta. Informe em Width = largura da etiqueta (em centímetros) e em Height = altura da etiqueta (em centímetros) 8. 11.

Como imprimir por extenso no Crystal Reports ? A resposta a essa pergunta é dada pelo próprio pessoal da ETZ . Se você tiver problemas vamos ver alguns pontos que devem ser verificados. basta entrar no Crystal.Bem a esta altura só falta imprimir e verificar . verifique se você colocou mas medidas corretas do papel e ainda se está configurado para com ou sem quebra de página. Isto é controlado pela caixa "Nome da Impressora (Printer Name)"." Download da versão 16 bits da DLL de extenso em português ExtPor16. mande imprimir em impressora laser ou jato de tinta que o resultado deverá ser melhor. vá para o menu Arquivo (File) e escolha Configurar Impressora (Printer Setup). para se fazer o extenso. Qualquer dúvida. que impressora ele irá usar.DLL (16 Bits) ou da CRXLAT32. d)Verifique ainda a versão que você está usando do Crystal Reports. Esta tela de diálogo é a que controla como e onde um relatório irá imprimir. contate o Suporte Crystal. Se o projetista do relatório escolher a Impressora Padrão do Sistema (System's Default Printer). É importante se levar em conta que algumas destas funcionalidades irão mudar como outro usuário (um cliente) imprime o mesmo relatório. 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.exe (CRXLATE.) "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. a) Se você estiver usando o driver Genérico/Texto .DLL) Download da versão 32 bits da DLL de extenso em português ExtPor32. ela deve estar localizado ou no \WINDOWS\SYSTEM ou no \WINDOWS\CRYSTAL. basta copiar a DLL correspondente ao seu ambiente no lugar da DLL que têm o mesmo nome desta. ajustando quando necessário. evidenciada pela linha dizendo Impressora Padrão Pronta ("Default .exe (CRXLAT32.DLL) 3 . Após feito isto. 2 . (Eu pessoalmente não testei.Considerações Sobre Uso de Impressoras com Crystal Reports É importante entender como Seagate Crystal Reports trata os ajustes de parâmetros de impressoras. A primeira coisa a se verificar nesta janela é ONDE o relatório irá ser impresso. criar uma fórmula e usar a função ToWords(número). isto é possível através da CRXLATE.DLL (32 Bits). Quando seu relatório estiver carregado. a distribuidora do Crystal no Brasiil.

orientação de página).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. então SEMPRE DEIXE NÃO CHECADA a caixa Propriedades Padrão. com o cursor sobre o campo que se queira justificar (campo Memo. se esta impressora não for achada. fonte de papel.Como fazer a Justificação de textos no Crystal A opção de justificar texto não está disponível na Barra de Ferramentas. então ele é considerado um relatório de Impressora Específica (Specific Printer). Se.Inserindo somente uma vez o controle CrystalReports no seu projeto ? . A melhor regra a seguir é: Se você estiver querendo forçar o tipo de papel. 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. o relatório será impresso de maneira similar à da impressora do desenvolvedor.Printer Ready"). por exemplo). Se o relatório não for designado para a Impressora Padrão. Uma vez que a impressora do cliente suporte TODAS as configurações. 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. fonte de papel (bandejas) ou orientação de página na impressora do cliente. o relatório irá usar as Propriedades Padrão da impressora do cliente. ou Center (Centrado) / Left (Esquerdo) / Right (Direito). 5. o relatório irá tentar forçar as configurações que você tenha especificado (tipo de papel. Dentro desta opção deve haver uma sessão chamada Alignment (Alinhamento). Ajuste então para Default (Padrão). fonte de papel. 4. A Segunda seleção mais importante nesta tela é o checkbox "Propriedades Padrão (Default Properties). fórmulas. no entanto. o relatório irá ser impresso na Impressora Padrão do Cliente. orientação de página). mas ela existe. tabelas usados no relatório. Então. e então escolher a opção Format Field (Formatar Campo). alguma destas configurações não for suportada pela impressora do cliente. 6. na impressora do cliente. O Crystal Reports fornece um relatório completo da montagem do relatório. Basta clicar com o botão direito do mouse. então o relatório irá tentar imprimir na impressora padrão do cliente (se ele tiver alguma selecionada). Se esta opção estiver NÃO CHECADA. Se esta caixa estiver CHECADA.e tentará ser impresso na impressora do cliente com o MESMO NOME da impressora usada na máquina do projetista original.

6789.21) retornará "45" 3. 4. Por exemplo: ToNumber("45.21 ToNumber("123.0) retornará "12346" A função arrendonda o número conforme o numero de casas decimais definido.n) : Converte o número x para o formato texto usando n casas decimais. O Crystal fornece algumas funções para conversão de dados. incluir somente uma única vez o controle CrystalReports em seu projeto. ToWords(12345.AcctNo} = 44288 ToNumber({file.6789.ZIP} = 21385 2. Assim temos: ToText(12345.AcctNo}/2) = 22144 para {file.5000.Você pode .2) retornará "12345. 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 5.21") retornará o número 45.45 ToNumber({file.ZIP}) < 33333 = TRUE para {file. 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. ReportFileName = "Relatório. 7-Usando as funções de conversões de dados no Crystal .45") = 123.RPT" Fazendo assim você usa somente um único nome para o seu controle Crystal em todo o projeto.n): Converte um número informado no argumento x usando n casas decimais num texto por extenso.68" e ToText(12345. Para usar o controle nos formulários do projeto basta fazer referência ao controle indicando a localização do controle. Vejamos as mais usadas. Você geralmente usa esta função quando quer converter um campo definido como texto para um formato numérico.0) retornará twelve thousand three hundred forty six ( observe o arredondamento) . ToNumber(x) : Converte um texto informado no argumento x em um número. ToText(x) : Converte o número x para o formato texto ToText(12345) retornará "12345" e ToText(45. (Para ver todas leia o Help ) 1.CR1. ToWords(x. ToText(x. e deve .

Reference} = "ABCDEFG" NumericText({file.EMailToList ="macoratti@riopreto.envia o relatório para outra pessoa na rede via MAPI Email. With CrystalReport1 . O relatório é anexado.PrinterPort = "LPT1" .br" . é um número. NumericText(x): Verifica se o conteúdo do argumento x .rpt" .Reference}) = NO para {file.envia o relatório para um arquivo em disco 4.drv" . EMail (via VIM ) . Printer .nvia o relatório para outra pessoa na rede via MAPI Email (cc:Mail) • EMailMessage . Assim: NumericText({file.Define o texto da mensagem que vai aparecer no corpo do EMail .envia o relatório para uma janela 2.EMailMessage= " Aqui você coloca a sua mensagem ou relatorio" .EMailSubject="Assunto" . um texto .Destination = crptMail .por assumir os seguintes valores: 1.IDNUM} = "12345T" 8 . Se o conteúdo for um número a expressão retornada será YES caso contrário será NO.IDNUM} = "12345443" NumericText({file. 6. EMail (via MAPI) .Matricial" . 9 .envia o relatório para a impressora 3.PrinterDriver = "Epson24.IDNUM}) = YES para {file. 5.Action = 1 End With • Destination .IDNUM}) = NO para {file.IDNUM} [1 to 5]) = YES para {file.Action = 1 End With • ReportFileName .ReportFileName = "X:\caminho\relatorio.O nome do driver da impressora para qual deseja imprimir • PrinterPort = A porta para impressão • PrinterName = O nome da impressora • Action = dispara exibição do o relatório.PrinterName = "Epson . File .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.localização e nome do relatório que deseja imprimir • PrinterDriver .Como enviar relatórios do Crystal pela Internet ? With CrystalReport1 . Window .IDNUM} = "12345" NumericText ({file.com.

ou seja .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$.Define a linha do subject • EMailToList .File | Report Options . podemos fazer: . (Para mais de um destinatário você deve usar virgulas para separar.desmarque a opção . Bem agora basta você extrair a hora usando a função de substring do Crystal: Assim: {Tabela. • No menu .Define o nome na lista para quem você quer enviar o relatório.Como horas no formato correto no Crystal Reports ? Você vai ter que configurar o Crystal para fazer isto.Isto irá extrair os dados a partir da posição 12 até a 16 ."Convert Date- Time to Date".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 . a letra V "Visual Basic"[8] retorna a letra B 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. 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 .hora}[12 to 16] . 11 . • EMailSubject .) 10 . Justamente a hora no formato hh:mm. Pronto !!! 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 pergurtando !!! ) .

Você tem a tabela clientes com os campos : codigo. formatado no meu relatório no crystal reports ? A resposta é simples : Utilize as formúlas do Crystal. Você quer exibir o telefone no relatório no seguinte formato: 11-9670-1212 e 17-0224-5521. 12 . A fórmula fica assim: {socios. 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.TELEFONE}[1 to 2] + "-" + {socios. nome . telefone.if {Clientes...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).onde CC é o código de área da cidade e NNNNNNNN o número do telefone . cgc.TELEFONE}[7 to 10] .TELEFONE}[3 to 6] + "-" + {socios.Nome}[1]="A" then {Clientes. O campo telefone armazena o código de área da cidade e o número do telefone da seguinte forma: CCNNNNNNNN .. etc.Nome} else . Se você inserir o campo diretamente no Crystal ele irá exibir o campo do jeito que você armazenou :-( . Você tem os seguinte valores armazenados para este campo: 1196701212 e 1702245521. 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). Como posso exibir o camo cep. cpf . Para contornar o problema vamos utilizar uma fórmula para formatar o campo no padrão de exibição desejado. telefone. • Carregue o relatório no Crystal e no Menu Insert selecione Formula Field • Informe o nome para a fórmula e clique em OK • Agora usando o operador subscript vamos separar as subcadeias desejadas e montar a cadeia no formato desejado.

• Clique no botão Accept e insira a fórmula no local desejado. Veja o resultado final: Dependendo do seu campo a fórmula será diferente mas a maneira é sempre a mesma.]Report.drv Sintaxe:PrinterPort . (Eu estou usando a versão 4.6 do Crystal Reports) 13 . Sintaxe: PrinterName [form. 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.drv" Define o driver da impressora para Epson24.PrinterName[= PrinterName$] Ex: Report1.PrinterName= "Epson LQ850" Define a impressora Epson LQ850 Sintaxe: PrinterDriver [form.PrinterDriver = "Epson24.Imprimindo em outras impressoras que não a padrão . Se você definir estas três propriedades corretamente o Crystal imprime na impressora definida caso contrário ele usa a padrão.]Report.PrinterDriver[= DriverName$] Ex: Report1.

PrinterDriver = "Epson LQ850" CrystalReport1. .PrinterPort = "LPT1" CrystalReport1.[form.]Report.PrinterDriver = "Epson24.PrinterPort= "LPT1" Define a porta LPT1 Veja um exemplo de código para fazer este serviço : CrystalReport1.drv" CrystalReport1.action = 1 14 - vai continuar.PrinterPort[= PortName$] Ex: Report1.-) ...