none
dificuldade em montar relat. em crystal RRS feed

  • Pergunta

  •  

    Boa Tarde!!!

     

    Entao to tentando fazer um relatorio mas to tendo dificuldade na hora de montar o codigo em vb pra exibir os dados desejados

    eu tenhu 5 tabelas

    Contrato(Id_Contrato , Id_Estab, Id_Emp, Id_Cartao,...)

    Estabelecimento(Id_estab, Nome_estab,...)

    Empresa(Id_Emp, Nome_Emp,....)

    Cartao(Id_Cartao, Nome_Carta,...)

    Remessa(Id_Remessa, IdContrato,Dt_Remessa, Vlr_liq, Vlr_Brt, Vlr_Diverg)

     

    assim preciso de um relatorio q eu selecione a data inicial da remessa e data final e seja possivel selecionar por empressa por estabelecimento e cartao

     

    se alguem poder me dar uma mao

     

    agradeço desde jah

     

    sexta-feira, 3 de outubro de 2008 16:52

Respostas

  • Maykonctrl,

     

    Para fazer um filtro com data utilizando o banco de dados eu faço assim:

     

    Exemplo com banco de dados ACCESS + Relatório no Crystal Reports

     

    Referências do form:

     

    Code Snippet

    Option Explicit On

    Option Strict On

    'provider do banco de dados ACCESS

    Imports System.Data.OleDb

    Imports System.Data

    'crystal reports

    Imports CrystalDecisions.CrystalReports.Engine

    Imports CrystalDecisions.Shared

    'outros

    Imports System.Text 'StringBuilder

    Imports System.Configuration 'ConnectionStrings

    Imports System.IO 'Path.Combine

     

     

    Adicionar no Form Load

     

    Code Snippet

    PreviewRelClientes(CarregarListaClientes(DateSerial(2008, 1, 1), DateSerial(2008, 12, 31)))

     

     

    Sub responsável pela visualização do relatório

     

    Code Snippet

    Private Sub PreviewRelClientes(ByVal oTable As DataTable)

    '

    'visualizar o relat¢rio "rptCustomer.rpt" utilizando a fun‡Æo CarregarListaClientes()

    '

    Try

    '1 passo: definindo o relat¢rio a ser visualizado (ReportPath)

    'rptCustomer: nome do relat¢rio do crystal reports

    '

    Dim crReportDocument As New rptCustomer

    '2 passo: definindo o DataSource do relat¢rio

    crReportDocument.SetDataSource(oTable)

    '3 passo: visualizando o relat¢rio...

    '

    'crPreview: nome do controle CrystalReportViewe

    crPreview.DisplayGroupTree = False

    crPreview.ReportSource = crReportDocument

    Catch ex As Exception

    MsgBox(ex.Message)

    End Try

    End Sub

     

     

    Função responsável pela pesquisa dos dados no banco de dados Access (com filtro por data para resolver a sua dúvida)

     

    Code Snippet

    Private Function CarregarListaClientes(ByVal datInicial As Date, _

    ByVal datFinal As Date) As DataTable

    'definindo a string de conexÆo do banco de dados

    Dim strConexao As String = ""

    'caso o banco de dados esteja no mesmo diret¢rio da aplica‡Æo

    'strConexao = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\AWorksLite.mdb;Persist Security Info=True"

    strConexao = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\Novos\Access\AWorks\AWorksLite.mdb;Persist Security Info=True"

    Dim oConn As New OleDbConnection(strConexao)

    Dim strSQL As New StringBuilder

    Dim oTable As New DataTable()

    Dim oCmd As OleDbCommand = Nothing

    Try

    'abrindo conexÆo com o banco de dados.

    oConn.Open()

    'definindo o SQL

    strSQL.Append(" Select CustomerID ")

    strSQL.Append(" ,CustomerName")

    strSQL.Append(" ,Phone")

    strSQL.Append(" ,EmailAddress")

    strSQL.Append(" ,AddressLine")

    strSQL.Append(" ,City")

    strSQL.Append(" ,StateProvinceName")

    strSQL.Append(" ,PostalCode")

    strSQL.Append(" ,CountryName")

    strSQL.Append(" ,LastUpdate ")

    strSQL.Append(" FROM Customer inner join Country ")

    strSQL.Append(" on Customer.CountryID = Country.CountryID ")

    strSQL.Append(" Where LastUpdate between @DatInicial and @DataFinal ")

    strSQL.Append(" Order by CustomerName ")

    'definindo os parƒmetros do SqlCommand

    oCmd = New OleDbCommand(strSQL.ToString, oConn)

    oCmd.CommandType = CommandType.Text

    oCmd.Parameters.Add(New _

    OleDbParameter("@DatInicial", SqlDbType.DateTime)).Value = datInicial

    oCmd.Parameters.Add(New _

    OleDbParameter("@DataFinal", SqlDbType.DateTime)).Value = datFinal

    'carregando os dados do banco de dados

    Dim oDataReader As OleDbDataReader = _

    oCmd.ExecuteReader(CommandBehavior.CloseConnection)

    'carregar o DataTable com base no DataReader

    oTable.Load(oDataReader)

    Catch ex As Exception

    MsgBox(ex.Message)

    Finally

    'liberando os objetos

    oConn.Dispose()

    oConn = Nothing

    End Try

    Return oTable

    End Function

     

     

    Espero ter ajudado!

    quinta-feira, 16 de outubro de 2008 13:21
    Moderador

Todas as Respostas

  • E ai Maykonctrl,

     

    Criei um tópico fixo no fórum MSDN com algumas dicas  sobre a construção de relatórios com Crystal Reports e ReportView (incluindo 2 vídeos com vários exemplos de como construir relatórios com os componentes, licença, distribuição, service packs, etc.):

     

     

    http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=3761576&SiteID=21

     

     

    Valeu!

     

     

    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

     

    sexta-feira, 3 de outubro de 2008 18:07
    Moderador
  •  

    Então Laercio

     eu jah vi os videos mas na hora de montar a parte do codigo no vb pra exibir os dados nao to conseguindo a parte de montar o relatorio e o dataset eu vi no video e consegui montar mas a parte do codigo to tendo dificuldades

     

     

    fiz um form nele coloquei 2 datetimepicker (para data inicial e data final) e 3 combo pra listar as empresas e outro para lista os estabelecimentos e outro p/ cartao

     

    Vc poderia me ajudar no codigo q nao to conseguindo montar

    sexta-feira, 3 de outubro de 2008 18:30
  •  

    Maykonctrl,

     

    Sem problemas, vamos resolver!

     

    Pode postar o código para eu dar uma olhada?

     

    Valeu!

    sexta-feira, 3 de outubro de 2008 18:48
    Moderador
  •  

    entao eu tentei montar mas eh essa parte q nao to nem chegando perto eu precisava de uma base pra min ver e tentar entender pra min poder montar o meu aki  pq na hora de popular as combos eu jah nao to conseguindo

     

    se vc poder ir me ajudando aos poukos pra min poder aprender a fazer essa parte ai agradeço

    sábado, 4 de outubro de 2008 14:33
  •  

    Opa Entao eu tentei dar uma simplificada 1º fazer por data ai depois tentar selecionar por empresa e estabelecimento

     

    so que ta me dando um erro q nao entendi ainda

    Sintaxe incorreta próxima à palavra-chave 'inner'.

    como eu nao conheco muito ainda nao vi o erro mas parece ser simples neh

     

     

    Dim daremessa As New SqlDataAdapter("Select * from remessa r " + _

    "WHERE dt_remessa >= " + Dt_inicio.Text + " " + _

    "AND dt_remessa <= " + Dt_Fim.Text + " inner join contrato c on r.cod_Contrato = c.cod_contrato ", conn)

    daremessa.SelectCommand.Parameters.Add("@dt_remessa", SqlDbType.VarChar).Value = Dt_inicio.Text

    Dim dsRelatorio As New dspordia()

    conn.Open()

    daremessa.Fill(dsRelatorio.DataTable1)

    conn.Close()

    Dim relatorio As New rptpordia()

    relatorio.SetDataSource(dsRelatorio)

    Dim f As New formpordia(relatorio)

    f.Show()

     

     

    Valew pela ajuda

    terça-feira, 7 de outubro de 2008 03:53
  •  

    no select eu invert o inner join com where

    Dim daremessa As New SqlDataAdapter(" SET DATEFORMAT DMY Select * from remessa as r inner join contrato as c on r.cod_Contrato = c.cod_contrato WHERE dt_remessa >= " + Dt_inicio.Value + " and dt_remessa <= " + Dt_Fim.Value + " ", conn)

     

    paro de dar o erro mas nao aparece nada

    se eu tirar o where aparece todos os dados mas com o filtro aparece em branco :?

     

    eu testei no sql e o select da certinhu axu q eu to pegando os dados da data errado (dt_inicio.value mesmo?)

     

    se alguem poder me ajudar

     

    valew

    quinta-feira, 9 de outubro de 2008 05:24
  •  

    o pessoal sera q alguem pode me ajudar

    realmente ainda nao axei o q esta errado se eu tirar o where aparece os dados ai entao axu q o erro ta no select so q se eu fazer o mesmo select no sql da certo entao axu q o erro ta na parte de pegar a data do datetimepicker

    so q nao consegui ainda

     

     

    valew
    segunda-feira, 13 de outubro de 2008 16:13
  •  

     

     

    pessoal esse select da certo no sql

    SET DATEFORMAT DMY Select r.cod_remessa, c.cod_contrato, r.dt_remessa, c.cod_emp, c.cod_estab, c.cod_cartao, r.vl_liq, r.vl_bruto, r.vl_diverg from remessa as r inner join contrato as c on r.cod_Contrato = c.cod_contrato WHERE dt_remessa BETWEEN '02/10/2008' and '09/10/2008'

     

    quando eu paso pro vb aparece em brando

    Dim daremessa As New SqlDataAdapter("SET DATEFORMAT DMY Select r.cod_remessa, c.cod_contrato, r.dt_remessa, c.cod_emp, c.cod_estab, c.cod_cartao, r.vl_liq, r.vl_bruto, r.vl_diverg from remessa as r inner join contrato as c on r.cod_Contrato = c.cod_contrato WHERE r.dt_remessa BETWEEN " + Dt_inicio.text + " and " + Dt_Fim.Text + " ", conn)

    Dim dsRelatorio As New dspordia()

    conn.Open()

    daremessa.Fill(dsRelatorio.DataTable1)

    conn.Close()

    Dim relatorio As New rptpordia()

    relatorio.SetDataSource(dsRelatorio)

    Dim f As New formpordia(relatorio)

    f.Show()

     

    mas se eu deixar assim

     

    Dim daremessa As New SqlDataAdapter("SET DATEFORMAT DMY Select r.cod_remessa, c.cod_contrato, r.dt_remessa, c.cod_emp, c.cod_estab, c.cod_cartao, r.vl_liq, r.vl_bruto, r.vl_diverg from remessa as r inner join contrato as c on r.cod_Contrato = c.cod_contrato ", conn)

    aparece todos os dados q eu kero so nao aparece no intervalo de datas

     

     

    eu ainda to aprendendo a mexer com vb e crystal e nao to conseguindo axar qq tem de errado (tb nao sei se estoufazendo totalmente de um jeito errado)

     

    se alguem tive uma ideia do q possa ser ai pra me ajudar agradeço muito

     

    abraz t+++

    terça-feira, 14 de outubro de 2008 04:38
  • Maykonctrl,

     

    Para fazer um filtro com data utilizando o banco de dados eu faço assim:

     

    Exemplo com banco de dados ACCESS + Relatório no Crystal Reports

     

    Referências do form:

     

    Code Snippet

    Option Explicit On

    Option Strict On

    'provider do banco de dados ACCESS

    Imports System.Data.OleDb

    Imports System.Data

    'crystal reports

    Imports CrystalDecisions.CrystalReports.Engine

    Imports CrystalDecisions.Shared

    'outros

    Imports System.Text 'StringBuilder

    Imports System.Configuration 'ConnectionStrings

    Imports System.IO 'Path.Combine

     

     

    Adicionar no Form Load

     

    Code Snippet

    PreviewRelClientes(CarregarListaClientes(DateSerial(2008, 1, 1), DateSerial(2008, 12, 31)))

     

     

    Sub responsável pela visualização do relatório

     

    Code Snippet

    Private Sub PreviewRelClientes(ByVal oTable As DataTable)

    '

    'visualizar o relat¢rio "rptCustomer.rpt" utilizando a fun‡Æo CarregarListaClientes()

    '

    Try

    '1 passo: definindo o relat¢rio a ser visualizado (ReportPath)

    'rptCustomer: nome do relat¢rio do crystal reports

    '

    Dim crReportDocument As New rptCustomer

    '2 passo: definindo o DataSource do relat¢rio

    crReportDocument.SetDataSource(oTable)

    '3 passo: visualizando o relat¢rio...

    '

    'crPreview: nome do controle CrystalReportViewe

    crPreview.DisplayGroupTree = False

    crPreview.ReportSource = crReportDocument

    Catch ex As Exception

    MsgBox(ex.Message)

    End Try

    End Sub

     

     

    Função responsável pela pesquisa dos dados no banco de dados Access (com filtro por data para resolver a sua dúvida)

     

    Code Snippet

    Private Function CarregarListaClientes(ByVal datInicial As Date, _

    ByVal datFinal As Date) As DataTable

    'definindo a string de conexÆo do banco de dados

    Dim strConexao As String = ""

    'caso o banco de dados esteja no mesmo diret¢rio da aplica‡Æo

    'strConexao = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\AWorksLite.mdb;Persist Security Info=True"

    strConexao = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\Novos\Access\AWorks\AWorksLite.mdb;Persist Security Info=True"

    Dim oConn As New OleDbConnection(strConexao)

    Dim strSQL As New StringBuilder

    Dim oTable As New DataTable()

    Dim oCmd As OleDbCommand = Nothing

    Try

    'abrindo conexÆo com o banco de dados.

    oConn.Open()

    'definindo o SQL

    strSQL.Append(" Select CustomerID ")

    strSQL.Append(" ,CustomerName")

    strSQL.Append(" ,Phone")

    strSQL.Append(" ,EmailAddress")

    strSQL.Append(" ,AddressLine")

    strSQL.Append(" ,City")

    strSQL.Append(" ,StateProvinceName")

    strSQL.Append(" ,PostalCode")

    strSQL.Append(" ,CountryName")

    strSQL.Append(" ,LastUpdate ")

    strSQL.Append(" FROM Customer inner join Country ")

    strSQL.Append(" on Customer.CountryID = Country.CountryID ")

    strSQL.Append(" Where LastUpdate between @DatInicial and @DataFinal ")

    strSQL.Append(" Order by CustomerName ")

    'definindo os parƒmetros do SqlCommand

    oCmd = New OleDbCommand(strSQL.ToString, oConn)

    oCmd.CommandType = CommandType.Text

    oCmd.Parameters.Add(New _

    OleDbParameter("@DatInicial", SqlDbType.DateTime)).Value = datInicial

    oCmd.Parameters.Add(New _

    OleDbParameter("@DataFinal", SqlDbType.DateTime)).Value = datFinal

    'carregando os dados do banco de dados

    Dim oDataReader As OleDbDataReader = _

    oCmd.ExecuteReader(CommandBehavior.CloseConnection)

    'carregar o DataTable com base no DataReader

    oTable.Load(oDataReader)

    Catch ex As Exception

    MsgBox(ex.Message)

    Finally

    'liberando os objetos

    oConn.Dispose()

    oConn = Nothing

    End Try

    Return oTable

    End Function

     

     

    Espero ter ajudado!

    quinta-feira, 16 de outubro de 2008 13:21
    Moderador
  • opa voltando pra fala q consegui fazer laercio valew pela ajuda acabei nao fazendo = ao exemplo q vc me deu mas ele jah deu uma ajuda pra min conseguir fazer  

     

    valew abraz t+

     

     

    Dim Conexao As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Contick.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

    Dim sql As New System.Text.StringBuilder

    Dim conn As New SqlConnection(Conexao)

    conn.Open()

    sql.Append(" Select Contrato.Cod_Contrato ")

    sql.Append(" ,Empresa.Nome_Emp")

    sql.Append(" ,Estabelecimento.Nome_Estab")

    sql.Append(" ,Tipo_Cartao.Nome_cartao")

    sql.Append(" ,Remessa.Cod_Remessa")

    sql.Append(" ,Remessa.Dt_Remessa")

    sql.Append(" ,Remessa.Vl_Liq")

    sql.Append(" , Remessa.Vl_Bruto")

    sql.Append(" , Remessa.Vl_Diverg")

    sql.Append(" FROM Contrato inner join empresa ")

    sql.Append(" ON Contrato.Cod_Emp = Empresa.Cod_Emp INNER JOIN Estabelecimento")

    sql.Append(" ON Contrato.Cod_Estab = Estabelecimento.Cod_Estab INNER JOIN Remessa ON Contrato.Cod_Contrato = Remessa.Cod_Contrato INNER JOIN Tipo_Cartao ON Contrato.Cod_Cartao = Tipo_Cartao.Cod_Cartao ")

    sql.Append(" Where Remessa.Dt_Remessa between '" + Convert.ToDateTime(datetimeinicial.Text).ToString("yyyy/MM/dd") + "'and '" + Convert.ToDateTime(datetimefinal.Text).ToString("yyyy/MM/dd") + "' and estabelecimento.nome_estab = '" + cbestab.Text + "'")

    Dim daremessa As New SqlDataAdapter(sql.ToString, conn)

    dsRelatorio As New DataSet1()

    daremessa.Fill(dsRelatorio.DataTable1)

    conn.Close()

    Dim relatorio As New CrystalReport1()

    relatorio.SetDataSource(dsRelatorio)

    Dim f As New Form2(relatorio)

    f.Show()

    terça-feira, 21 de outubro de 2008 15:18