Crystal Reports - Básico e Revisitado


Estou tratando aqui da versão 4.6 do Crystal Reports . Esta versão vinha junto com o VB4 , VB5 e VB6. No VB6 a instalação não era feita junta com a instalação do VB e você tem que procurar no CD do VB e fazer uma instalação a parte.

O crystal Reports facilita muito a vida de quem precisa gerar relatórios mas tem os seus percalços como o problema dos arquivos de registro e dos arquivos de distribuição. Cansei de receber emails sobre problemas relacionadas com estes problemas.

Portanto se você quer usar Crystal Reports (a partir daqui apenas CR , tá bom) tem que ter ele instalado corretamente e com as dll´s e arquivos de dependência atualizados , senão...

Não é preciso ser um especialista para usar o CR para gerar relatórios basta saber algumas das suas propriedades principais e ter uma noção de normalização de dados.

Abaixo seguem as principais propriedades do CR que eu publico aqui mais uma vez...


ACTION
CR.Action = 1


Na verdade, essa não é uma propriedade, mas um método. Essa linha irá imprimir seu Relatório


DATAFILES(0)
CR.DataFiles(0) = App.Path & "\relatorio.mdb"


Indica o caminho do banco de dados usado no relatório.


COPIESTOPRINTER
CR.CopiesToPrinter = 3


Se o destino do relatório for a Impressora, serão impressas 3 cópias do seu relatório.


DESTINATION
CR.Destination = x

Especifica para onde deve ser enviado o relatório, conforme a tabela abaixo:
0 - Tela: Relatório será exibido somente em sua tela.
1 - Impressora: Seu relatório será impresso na impressora especificada pelo sistema.
2 - Arquivo: Seu relatório será gravado em um arquivo.


PRINTFILENAME
CR.PrintFileName = App.Path & "\Report\CNTR.TXT "

Especifica que se o destino do relatório for um arquivo, ele deve gravar o relatório em um arquivo chamado CNTR.TXT, localizado no subdiretório "Report", que por sua vez está dentro do diretório onde foi instalado o programa.


REPORTFILENAME
CR.ReportFileName = App.Path & "\Report\OPEN.RPT "

Indica com qual relatório o controle deve trabalhar.


SELECTIONFORMULA
CR.SelectionFormula = "{Tabela.Campo} = 'Valor'"


Esta propriedade, juntamente com a propriedade "Formula", é uma das mais importantes ao se trabalhar com o CR. A Selection Fomula irá especificar quais registros deverão ser impressos. É mais ou menos como uma consulta SQL, mas com uma sintaxe um pouco diferente. Você poderá inclusive criar uma SelectionFormula padrão de dentro do seu Crystal Reports, enquanto estiver criando seu relatório.

Se seu relatório possuir uma SelectionFormula padrão, aí toda a sintaxe que você inserir na propriedade SelectionFormula do CR irá somar-se à SelectionFormula padrão do relatório. A única forma de alterar ou apagar essa fórmula padrão é de dentro do seu Crystal Reports. Assim como em SQL, você poderá unir vários critérios através do operador lógico "AND", ou definir uma ou mais condições que não precisem acontecer juntas, através do operador lógico "OR".

Não vou explicar aqui como se escrevem SelectionFormulas, vou apenas dar uma pequena dica, a de como definir datas, já que não é como em SQL, em que as datas são definidas assim: #29/12/1997#, aqui você terá de utilizar uma função interna do CRW para datas, que tem a sintaxe:

Date(Ano,Mês,Dia)

Por exemplo, para imprimir somente os registros onde a Data da venda for igual ou posterior a 29/12/1997, a sintaxe fica assim:

CR.SelectionFormula = "{Vendas.DataDaVenda} >= Date(1997,12,29)"

O exemplo abaixo mostra como trabalhar com intervalo de datas no Crystal Reports:

Dim DataInicio, DataFinal As String

If txtDataInicio = "" Then MsgBox "Informe a data incial no formato mm/dd/yy "
      txtDataInicio.SetFocus
      Exit Sub
End If

If txtDataFinal = "" Then MsgBox "Informe a data final no formato mm/dd/yy "
       txtDataFinal.SetFocus
       Exit Sub
End If

        Screen.MousePointer = vbHourglass
       
        DataInicio = Format(txtDataInicio, "yyyy,mm,dd")
        DataFinal = Format(txtDataFinal, "yyyy,mm,dd")
        
        Dim rptData As String
        'formula a ser usada
        rptData = "{Pedidos.Datas}"
        
        Dim rptSelecao As String
        rptSelecao = rptData & " in Date(" & DataInicio & ") to Date (" & DataFinal & ")"
   
   
'Imprime o relatorio
    Report1.ReportFileName = App.Path & "\Vendas.rpt"
    Report1.Connect = ";PWD=pwd;"
    Report1.DataFiles(0) = App.Path & "\Vendas.mdb"
    Report1.WindowTitle = "Vendas por datas"
    Report1.SelectionFormula = rptSelect
    Report1.WindowState = crptMaximized
    Report1.Action = 1
      
    Screen.MousePointer = vbDefault


FORMULA
CR.Formula(x) = "Nome da Fórmula = Nova sintaxe da Fórmula"

Essa propriedade, juntamente com a SelectionFormula, é imprescindível. Vamos supor que seu banco de dados contenha várias tabelas, cada uma de uma empresa diferente, mas que tenham nomes de Campos comuns. Ou então que você deseje imprimir alguma coisa diferente a cada vez que o relatório é impresso.

Quando você cria seu relatório, você insere vários campos de fórmulas. Também não vou ensinar aqui como se escrevem fórmulas, vou apenas ensinar a modificá-las a partir do seu CR.

Na sintaxe, X é um número que representa sua fórmula dentro do array das fórmulas. Na verdade, você pode especificar qualquer número, desde que siga a ordem: 0 para a primeira fórmula alterada, 1 para a segunda, 2 para a terceira e assim vai... O nome da fórmula não está amarrado a nenhum tipo de matriz de controle. Você deve tomar cuidado apenas de escrever uma nova sintaxe correta. O simbolo @ não deve ser usado ao especificar o nome da fórmula.

As fórmulas não são alteradas fisicamente, após a impressão todas voltam a normal. Se quiser imprimir novamente com fórmulas diferentes, você terá de especificar novamente as novas sintaxes. Não é possível criar novas fórmulas com essa propriedade, apenas modificar as já existentes.


CONNECT

CR.Connect = ";PWD=senha_do_banco_de_dados;"

Usado para trabalhar com banco de dados com senha.

Ex:

CR.ReportFileName = App.path & "relatorio.rpt"
CR.Connect = ";PWD=senha;"
CR.DataFiles(0) = App.Path & "\relatorio.mdb"


Salvando Dados com seu relatório

Um problema muito comum encontrado por que esta usando o Crystal Reports é a opção - Save Data With Report.

Este recurso armazena os dados extraídos na última execução do relatório com o relatório de maneira que quando o relatório é aberto ele já mostra os dados.

Quando os dados não mudam tudo bem , esta opção é aconselhável , mas , quando os dados são alterados com frequência se você usar esta opção o usuário vai visualizar no relatório sempre os dados da última execução. Para contornar este problema , se você não quer usar realmente esta opção , faça o seguinte:

1- No menu File clique na opção Options...

2- A seguir verifique se a opção Save Data With Report esta marcada , se estiver , desmarque-a. Pronto !!!


Calculando idades

Calcular a idade de uma pessoa pode ser um problema. Geralmente você vai ser basear em uma data, a data de nascimento, armazenada em um banco de dados. (Se você esta pensando em armazenar a idade no seu banco de dados esqueça,  fazer isto vai contra todas as regras de um bom modelo de banco de dados)

Vamos supor que você possui uma tabela chamada Clientes e que nesta tabela há o campo nascimento onde você armazena a data de nascimento do cliente.

Então com base nisto , podemos :

Exibir a data de nascimento no ano atual usando a função date:

  Date (Year (today), Month (Clientes.Nascimento), Day (Clientes.Nascimento))

Mas e se a pessoa nasceu no dia 29 de fevereiro e o ano atual não é bissexto ?

Neste caso vamos criar uma formula chamada Nascimento . Para criar uma fórmula no menu o Crystal clique em Insert e a seguir em Formula Field e na caixa Formula Name informe o nome da fórmula e clique em OK.

Agora digite o código abaixo e clique no botão - Accept.

If month({Clientes.Nascimento}) = 2 and day({Clientes.Nascimento})=29

Then Date(Year(Today),3,1) –1 else

Else Date(year(Today),month({Clientes.Nascimento}), day({Clientes.Nascimento})

Criamos esta fórmula chamada @Nascimento para verificar se a  data de nascimento cai em 29 de fevereiro e o ano não é bissexto.

Se a condição for verdadeira então basta avançar um dia , ou seja, ir para o dia primeiro de março.

Agora para calcular a idade em anos vamos usar a fórmula acima no código abaixo:

If {@Nascimento} < Today Then Year(Today) - year({Clientes.Nascimento})

Else Year(Today) - year({Clientes.Nascimento}) - 1

Salve esta fórmula com o nome de Idade.

 

Temos acima portanto duas fórmulas : @Nascimento e outra chamada @Idade. A fórmula @idade usa a fórmula @Nascimento para calcular a idade em anos.


Nota 1 :

Se você esta usando a versão 4.6 e pretende acessar banco de dados do Access 2000 vai obter a seguinte mensagem de erro:

Error messages 20535 and 20534
Error detected by database DLL
Database DLL is corrupt
Incorrect session parameters

Você deve atualizar a versão do CR para a versão 7 release 1 ou superior. Você pode também atualizar os drivers
P2bdao.dll, P2irdao.dll and P2ctdao.dll. para esta versão .

Ou então você pode tentar a seguinte solução:

  1. Acesse o siste www.crystaldecisions.com
  2. Clique em 'Crystal Care Support'
  3. Clique em 'Download Files and Update'
  4. Digite access2000drivers.zip na caixa de texto 'Or, enter file name here' e clique em Go
  5. Clique em 'File Title' para efetuar o download
  6. Descompacte e a seguir instale os novos drivers
  7. Boa sorte !!! (você vai precisar... )

Nota 2 :

Como instalar o CR para usar com o VB6 ?

Como a partir da versão 6.0 do VB a Microsoft incluiu um gerador de relatórios : Microsoft Data Report Designer .(gerador de dor de cabeça também...) no VB o CR não faz mais parte da instalação padrão do Visual Studio. Então você tem que instalar o CR depois da instalação do VB.

Para instalar o CR faça o seguinte :

1 - Localize o arquivo Crystl32.exe nos CD´s do VB , geralmente ele esta no seguinte caminho: \Common\Tools\VB\CrysRept\Crystl32.exe

2- Em qual CD ele está ? Abaixo um mapa para você tentar achar:

Versão                                    Disco
-----------------------------------
Visual Basic Professional     1
Visual Basic Enterprise         1
Visual Studio Professional    2
Visual Studio Enterprise        3


3- Depois que você localizou o arquivo basta executá-lo e você vai instalar a versão 4.6 do CR.

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

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti