Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Caulfield

[Resolvido] Crystal Report

Recommended Posts

E ae galera, beleza?

Bom... é o seguinte... estou criando uma aplicação que vai inserir dados relacionados em 5 tabelas do SQL Server.

Meu problema é para exibir os dados no relatório no CrystalReport.

 

Eu até consigo exibir os dados que eu quero e tudo, mas acontece que eu quero exibir em grupos... ou seja, cada tabela no seu grupo. Parece bem simples (e talvez seja mesmo e eu não sei), mas por exemplo na Tabela principal, que gera a ordem de serviço tem o campo OrderId e eu só posso incluir uma OS com esse número... até ai beleza. Só que na tabela Produtos, pode haver um só ou mais itens... e isso também vale para a tabela de cartão e cores.

 

Ou seja... alguém ai sabe se tem como exibir cada tabela no seu grupo?

 

Eu estava tentando fazer com o código abaixo:

 

Public Sub CarrRelTabOrdemServico()

       Dim Sql As String
       Dim myConnection = New SqlConnection("Data Source=PREPRESS;Initial Catalog=MyDB;User Id=sa;Password=Drupa2000;")
       Dim SelTabOrdemServico, SelItensOS As SqlDataAdapter
       Dim DS = New DataSet

       myConnection.Open()

       Sql = "SELECT * FROM TabOrdemServico WHERE OrderId = '" & OSSelecionada & "'"
       SelTabOrdemServico = New SqlDataAdapter(Sql, myConnection)
       DS = New DataSet
       SelTabOrdemServico.Fill(DS, "TabOrdemServico")

       Sql = "SELECT * FROM TabItensOS WHERE OrderId = '" & OSSelecionada & "'"
       SelItensOS = New SqlDataAdapter(Sql, myConnection)
       SelItensOS.Fill(DS, "TabItensOS")

       Dim rpt As New Relatorio
       rpt.SetDataSource(DS)
       CrystalReportViewer1.ReportSource = rpt

       myConnection.Close()
       myConnection.Dispose()
       myConnection = Nothing
       SelTabOrdemServico.Dispose()
       SelItensOS.Dispose()
       DS.Dispose()

   End Sub

 

Ele funciona bem... só que...

 

Valeu.

 

Galera se tiver como fazer isso de outro jeito, qualquer coisa...

 

Eu tô tentando fazer com o ReportViewer também... mas quando por exemplo eu tenho 3 itens para uma ordem de serviço, aparece as informações da Tabela Ordem de serviço 3 vezes... e eu queria que aparecesse somente uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui o que eu queria com o MicrosoftReportViewer.

Era só criar as tabelas necessárias dentro do Report dentro do list.

Vi uns vídeos no Youtube que me ajudaram.

 

Valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera eu achei que tinha conseguido mas não deu certo.

 

Então fiz uma imagem de como eu quero gerar o relatório

 

http://img713.imageshack.us/img713/1541/relatorio.jpg

 

Cada um dos DataGridView é uma tabela e os campos OrderId e Cliente é outra.

Com eu já havia dito os dados de produtos e acabamentos podem variar.

Quando eu faço pelo ReportViewer ele coloca o cada acabamento para cada produto e isso tá errado.

Os acabamentos fazer parte da OS como um todo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver com o ReportViewer e SubReports

Segue o código...

 

PS: Se algum moderador puder mudar o nome do tópico seria bom.

 

 

Imports System.Data.SqlClient
Imports Microsoft.Reporting.WinForms


Public Class Form1

   Dim OsSelecionada As String
   Dim connString As String = "Data Source=PREPRESS;Initial Catalog=Testes;User Id=sa;Password=Drupa2000;"

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

       OsSelecionada = InputBox("Digite Os")

       Try
           With Me.ReportViewer1.LocalReport
               ' Caminho para o relatório 
               .ReportPath = Application.StartupPath & "\..\..\Report1.rdlc"
               .DataSources.Clear()
           End With
           ' ---------------------------------------------------- 
           ' Datasource para o relatório principal
           ' ---------------------------------------------------- 
           Dim SQL As String = "SELECT * FROM TabItensOs WHERE OrderId = '" & OsSelecionada & "'"
           Using da As New SqlDataAdapter(SQL, connString)
               Using ds As New DataSet
                   da.Fill(ds, "TabItensOs")
                   ' É preciso usar o mesmo nome como foi de definido  
                   Dim rptDataSource As New ReportDataSource("dsReport_TabItensOS", ds.Tables("TabItensOs"))
                   Me.ReportViewer1.LocalReport.DataSources.Add(rptDataSource)

               End Using
           End Using
       Catch ex As Exception
           MessageBox.Show(ex.Message)
       End Try

       Me.ReportViewer1.RefreshReport()

       AddHandler ReportViewer1.LocalReport.SubreportProcessing, AddressOf SubReportTabOrdemServico
       AddHandler ReportViewer1.LocalReport.SubreportProcessing, AddressOf SubReportTabAcabamento

   End Sub
   Sub SubReportTabOrdemServico(ByVal sender As Object, ByVal e As SubreportProcessingEventArgs)

       Try
           Dim SQL As String = "SELECT * FROM TabOrdemServico WHERE OrderId = '" & OsSelecionada & "'"
           Using da As New SqlDataAdapter(SQL, connString)
               Using ds As New DataSet
                   da.Fill(ds, "TabOrdemServico")
                   Dim rptDataSource As New ReportDataSource("dsReport_TabOrdemServico", ds.Tables("TabOrdemServico"))
                   e.DataSources.Add(rptDataSource)
               End Using
           End Using

       Catch ex As Exception
           MessageBox.Show(ex.Message)
       End Try

   End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.