Crystal Report – Parâmetros entre duas datas


O primeiro relatório que consegui conectar a um banco de dados foi através do site http://www.macoratti.net , que aliás é onde tiro muitas duvidas.

Mas me deparei com uma situação que não encontrava solução em minhas pesquisas, que é passar parâmetro entre duas datas para a geração do relatório no Crystal Report. Então comecei reparar nas propriedades de parâmetros do namespaces do Crystal, e acabei fazendo adaptações e descobrindo um caminho.

Apesar de ser o meu primeiro tutorial, vou tentar explicar detalhadamente. Primeiro vou falar da base de dados que usarei que é Access. Uma tabela simples só para fins didáticos como vemos a estrutura a seguir:

Estrutura da Tabela

Utilizando o Visual Studio 2008, insira um novo formulário no seu projeto e adicione o componente CrystalReportView, o seu formulário ficará assim:

Visualização do Form com o componente CrystalReportView

Adicione um Módulo para declarar as variáveis data_Inicial e data_Final que usaremos como parâmetro do relatório desta maneira.

Public data_Inicial, data_Final As DateTime
No Formulário que exibirá o relatório insira o código abaixo:
Imports System
Imports System.Drawing
Imports System.Drawing.Printing
Imports System.IO
Imports System.Windows.Forms
Imports System.Data.OleDb
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
‘Variaveis da conexão com banco de dados

Dim oCon As OleDbConnection
Dim dt1 As OleDbDataAdapter
Dim ds As DataSet
Dim con As String
Dim sql As String

con = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source =E:\Hora.mdb; Persist Security Info=True;Jet OLEDB:Database Password=123456”
oCon = New OleDbConnection(con)
oCon.Open()

sql = “Select * from Apontamento”
dt1 = New OleDbDataAdapter(sql, con)
ds = New DataSet
dt1.Fill(ds, “Apontamento”)

Dim rpt As New Apontamento
rpt.SetDataSource(ds)
‘Senha para acessar o banco de dados
rpt.SetDatabaseLogon(“Administrador”, “123456”)
oCon.Close()
dt1.Dispose()
ds.Dispose()

‘ atribui os parametros entre datas
Dim crParameterRangeValue As ParameterRangeValue
Dim crParameterFieldDefinitions2 As ParameterFieldDefinitions
Dim crParameterFieldLocation2 As ParameterFieldDefinition
Dim crParameterValues2 As ParameterValues
crParameterFieldDefinitions2 = rpt.DataDefinition.ParameterFields

‘Nome do parametro criado no relatório
crParameterFieldLocation2 = crParameterFieldDefinitions2.Item(“ParamentroData”)
crParameterValues2 = crParameterFieldLocation2.CurrentValues
crParameterRangeValue = New CrystalDecisions.Shared.ParameterRangeValue
‘Recebe o valor da variavel data inicial
crParameterRangeValue.StartValue = data_Inicial
‘Recebe o valor da variavel data inicial
crParameterRangeValue.EndValue = data_Final
crParameterValues2.Add(crParameterRangeValue)
crParameterFieldLocation2.ApplyCurrentValues(crParameterValues2)
‘ Define a fonte do controle Crystal Report Viewer como sendo o relatorio definido acima
CrystalReportViewer1.ReportSource = rpt

End Sub
End Class

Agora crie o relatório e a conexão com o banco de dados conforme as imagens abaixo:

No Visual Studio 2008 clique com o botão direito no seu projeto e adicione um relatório do Crystal Report e renomeie, irá aparecer o assistente para a criação do relatório.

   Deixe tudo como está e clique em OK.

Selecione o item marcado.

 

 Localize o banco de dados clique em Segure Logon e digite a senha do banco de dados (afinal é bom ter uma senha no banco) e clique em Finish.

Selecione a tabela clicando no botão “>” em seguida clique em Next.

 Selecione os campos da tabela desejados e clique em Next.

 O agrupamento neste caso é opcional, mas vamos clicar em Finish para visualizar como ficou. Para não perder o trabalho clique em Ctrl+S para salvar.

Criando os Parametros no Relatório

Já no relatório, clique com o botão direito do rato em New Parameter.

  Na tela que se abrirá, Digite o nome do parâmetro, que no nosso caso é “ParameterData” e selecione o tipo de dado que será o nosso parâmetro(DateTime). Selecione Range Values(s), porque no nosso caso são dois valores que serão passados. Clique em “Default Values…” para selecionar o campo que será comparado na instrução SQL interna do Crystal conforme a figura abaixo .

 Selecione o campo da tabela que contém as informações a serem filtradas e Ok.

 Clique em “Select Expert” como mostra a figura.

Selecione novamente o campo a ser filtrado e clique em Ok.

 Selecione na lista conforme na figura e clique em Ok. A formatação fica por sua conta, mas o mecanismo do negócio já está pronto. Agora vamos à tela para selecionar as datas.
Crie um Formulário conforme a figura abaixo, Dois DateTimePicker e um Botão:

Formulário para captação do parametro.

No evento Click do Botão insira o seguinte código:
‘Verifica se a data final é posterior à data inicial
If DateTimePicker1.Value > DateTimePicker2.Value Then
MessageBox.Show(“A data inicial deve ser anterior à final!”, “Parametro incorreto”, MessageBoxButtons.OK, MessageBoxIcon.Warning)
Exit Sub
Else
‘Passa as datas para as variaveis dos parametros
data_Inicial = FormatDateTime(DateTimePicker1.Value, DateFormat.ShortDate)
data_Final = FormatDateTime(DateTimePicker2.Value, DateFormat.ShortDate)
Form1.Show()
Me.Close()
End If

Pronto, agora é só executar e ver o resultado.

Para fazer o download do projeto clique aqui  

Anúncios

5 ideias sobre “Crystal Report – Parâmetros entre duas datas

  1. Raquel Aguiar

    Muito bem… gostei das dicas

    Mas tenho uma necessidade enão sei como resolver: preciso desse parâmetro de intervalo de datas para gerar meu relatório mas quero colocar um valor default na data inicial com o primeiro dia do mês anterior e na data final com o último dia do mês anterior.

    Como faço isso?

    Resposta
    1. jcperin Autor do post

      Bom Dia Raquel,
      Não sei qual tipo de Banco de dados você está usando, pois, por exemplo, se for Mysql, terá que alternar a data para yyyy/mm/dd. Segue o código e espero ter ajudado:
      ‘Coloque o código no evento load do formulário ou no click do botão.

      Dim UltimoDia As Integer
      Dim Mes As Integer
      Dim Ano As Integer

      Mes = Month(Date.Now)
      If Mes = 1 Then
      Mes = 12
      Else
      Mes = Mes – 1
      End If
      Ano = Year(Date.Now)

      Select Case Mes
      Case 1, 3, 5, 7, 8, 10, 12
      UltimoDia = 31
      Case 4, 6, 9, 11
      UltimoDia = 30
      Case Else ‘Mes 2
      If Ano Mod 4 = 0 Then
      UltimoDia = 29
      Else
      UltimoDia = 28
      End If
      End Select

      Label1.Text = “01/” & Mes & “/” & Ano
      Label2.Text = UltimoDia & “/” & Mes & “/” & Ano

      Resposta
    2. Raquel Aguiar

      Bom dia JCperin

      Eu realmente não fui clara em minha necessidade.

      Estou usando um sistema belga que não tem todos os relatórios que preciso.

      Estou criando esses relatórios usando o Crystal e consigo colocar no sistema a chamada a esse relatório mas sem trabalhar o código para essa chamada.

      Portanto, todas as minhas necessidades precisam ser definidas no Crystal.
      Existe uma forma do Crystal inicializar o parâmetro data com o primeiro e último dia do mês anterior?

      Resposta

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s