Jump to content

Recommended Posts

Posted (edited)

Olá a todos,

Este é meu primeiro tópico, e já venho com um probleminha para os amigos me ajudarem.

Estou usando o VS2010 no Win7.

Criei um relatório com dois sub-relatórios. Fiz todos os testes carregando cada um deles individualmente e funcionaram perfeitamente. Porém, quando carrego o relatório principal com os dois subs agregados, tenho essa mensagem de erro:

"The SubReport SubReport1 could not be found at the specified location Rpt_Bordero_Cred.rdlc.

Please verify that the subreport has been published and the name is correct."

Já tentei retirar a extensão .rdlc e também não funcionou.

No evento Load do form onde tenho o reportviewer tenho:

AddHandler RptViewer.LocalReport.SubreportProcessing, AddressOf Set_Bordero_Cred

e criei:

Public Sub Set_Bordero_Cred(ByVal sender As Object, ByVal e As SubreportProcessingEventArgs)
 Try
	 Dim ds_Subs As DataSet
	 Dim Busca As New Cls_Dados
ds_Subs = Busca.RetornarDataSet(str_Sub(0))
	 Dim rptDataSource As New ReportDataSource ("DS_Bordero_Cred", ds_Subs.Tables(0))
	 e.DataSources.Add(rptDataSource)	
Catch ex As Exception
	 MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
 End Try
End Sub

Acho que meu erro está justamente no código acima. Como saber a que subreport essa sub pertence?

Se alguém tiver alguma idéia de como posso resolver eu agradeço.

Um abraço,

Nelson

Edited by Caça
GeSHi

Um Abraço,

Nelson Sousa

Posted (edited)

Olá,

Sim, todos os meus reports estão na mesma pasta.

Quanto ao exemplo, foi exatamente ele que usei como base de raciocínio.

O evento SubReportProcessing não está ocorrendo, o que indica que o subreport não está sendo encontrado, estou certo?

AS propriedades de todos eles estão como EMBEDDED RESOURCE / DO NOT COPY, porém já tentei CONTENT / COPY ALWAYS e não obtive sucesso.

2uqhe0p.png

Edited by Nelson Sousa

Um Abraço,

Nelson Sousa

Posted

Ah sim,

Fiz referência ao subreport no campo [use this report as a subreport], na imagem que publiquei você pode conferir.

Inclusive testei colocando a extensão .rdlc, com ou sem a extensão o subreport não é localizado para ser carregado.

Um Abraço,

Nelson Sousa

Posted

Pois então,

A Build Action de todos eles está como Embedded Resource/Do not Copy, porém já testei como Content/Copy Always e também não funcionou.

No artigo que você me passou há uma função que extrai o relatório principal da aplicação, colocando numa stream que é usada mais tarde na carga do report, certo?

Todo este procedimento é feito de forma automática quando se trata dos subreports? Bastando para tanto referencia-lo nas propriedades do objeto subreport dentro do relatório principal?

Um Abraço,

Nelson Sousa

Posted

Se estiver definido como Embedded Resource então o relatório fica dentro do executável. Mas faz o seguinte, define o handler no final:

' definição dos ReportDataSource, etc

ReportViewer1.RefreshReport()

AddHandler ReportViewer1.LocalReport.SubreportProcessing, AddressOf SubreportProcessingEvent

Posted (edited)

Ainda não deu.

Private Sub Frm_VB_Report_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 Me.RptViewer.RefreshReport()
 AddHandler RptViewer.LocalReport.SubreportProcessing, AddressOf Set_Sub_Report
End Sub

O problema está muito estranho pois, pela mensagem de erro, o subreport não está sendo localizado.

Parece que o problema está no próprio ReportViewer pois, como você pode conferir na imagem acima, não há erro no nome dos subrelatórios. O evento de SubReportProcessing nem chega a ocorrer.

Edited by Caça
GeSHi

Um Abraço,

Nelson Sousa

Posted

Então,

Depois da carga do report principal, ou no seu evento load, faço o Add do handler. Só que, pelo que entendi, esse handler é executado no SubreportProcessing, será que estou certo?

Acontece que o problema está no fato de o subreport não ser encontrado e carregado para que o evento SubreportProcessing ocorra.

Meu problema está justamente aí, o subreport não é encontrado para que seja processado.

Inclusive criei um novo projeto aqui com apenas os 2 reports(principal e sub), coloquei apenas uma caixa de texto em cada um deles.

O principal é carregado normalmente e o subreport não é localizado.

Já tô começando a achar que o problema está na instalação do meu VS2010.

Um Abraço,

Nelson Sousa

Posted (edited)

Na verdade código pra carregar report só o do principal:

 Dim rptDataSource As ReportDataSource
 Dim Report_From As New Frm_VB_Report
 Dim Busca As New Cls_Dados
 Dim strSQL As String = ""
 Dim strSQL_Cred As String = ""
 Dim strSQL_Deb As String = ""
 Dim dsBordero As New DataSet
 Dim strFiltro As String = txtIDBordero.Text.Trim
 strSql = "SELECT Tbl_Bordero.*, Tbl_Entidades.Entidade" & _
 " FROM Tbl_Bordero INNER JOIN Tbl_Entidades ON Tbl_Bordero.IDEntidade = Tbl_Entidades.IDEntidade" & _
 " WHERE Tbl_Bordero.IDBordero=" & strFiltro & ";"
 dsBordero = Busca.RetornarDataSet(strSql)

 strSQL_Cred = "SELECT Tbl_Mov_Financeiros.[NotaFiscal] & '-' & Tbl_Mov_Financeiros.[Parcela] & '/' & Tbl_Mov_Financeiros.[TP] AS Titulo," & _
		 " Tbl_Bordero_Det.DataVencimento, Tbl_Bordero_Det.ValorTitulo," & _
		 " Tbl_Bordero_Det.Titular,Tbl_Bordero_Det.NumCheque" & _
		 " FROM Tbl_Bordero_Det INNER JOIN Tbl_Mov_Financeiros" & _
		 " ON Tbl_Bordero_Det.IDTitulo = Tbl_Mov_Financeiros.IDMovFinanceiro" & _
		 " WHERE (((Tbl_Bordero_Det.IDBordero)=" & strFiltro & ")" & _
		 " AND (Tbl_Bordero_Det.Tipo='C'));"
 strSQL_Deb = "SELECT Tbl_Mov_Financeiros.[NotaFiscal] & '-' & Tbl_Mov_Financeiros.[Parcela] & '/' & Tbl_Mov_Financeiros.[TP] AS Titulo," & _
		 " Tbl_Bordero_Det.DataVencimento, Tbl_Bordero_Det.ValorTitulo," & _
		 " Tbl_Bordero_Det.Titular,Tbl_Bordero_Det.NumCheque" & _
		 " FROM Tbl_Bordero_Det INNER JOIN Tbl_Mov_Financeiros" & _
		 " ON Tbl_Bordero_Det.IDTitulo = Tbl_Mov_Financeiros.IDMovFinanceiro" & _
		 " WHERE (((Tbl_Bordero_Det.IDBordero)=" & strFiltro & ")" & _
		 " AND (Tbl_Bordero_Det.Tipo='D'));"

 With Report_From
	 .Name = "Borderô"
	 .str_Sub(0) = strSQL_Cred
	 .str_Sub(1) = strSQL_Deb
	 .str_nome_rpt = "Rpt_Bordero.rdlc"
	 .WindowState = FormWindowState.Maximized
	 .Show()
 End With
 Try
	 With Report_From.RptViewer.LocalReport
		 Dim rptStream As IO.Stream = GetReport("Rpt_Bordero.rdlc")
		 .LoadReportDefinition(rptStream)
		 .DataSources.Clear()
	 End With
	 ' Use the same name as defined in the report Data Source Definition
	 rptDataSource = New ReportDataSource("DS_Bordero", dsBordero.Tables(0))
	 Report_From.RptViewer.RefreshReport()
	 Dim params(3) As Microsoft.Reporting.WinForms.ReportParameter
	 ReDim params(1)
	 params(0) = New Microsoft.Reporting.WinForms.ReportParameter("RPT_Titulo", "Borderô de Pagamentos", True)
	 params(1) = New Microsoft.Reporting.WinForms.ReportParameter("RPT_Sistema", Application.ProductName & " - " & Application.ProductVersion, True)
	 Report_From.RptViewer.LocalReport.SetParameters(params)
	 Report_From.RptViewer.LocalReport.DataSources.Add(rptDataSource)
	 Report_From.RptViewer.SetDisplayMode(Microsoft.Reporting.WinForms.DisplayMode.PrintLayout)
 Catch ex As Exception
	 MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
 End Try

O código acima é executado num formulário onde lanço as movimentações do borderô de documentos.

No formulário do reportviewer tenho:

Private Sub Frm_VB_Report_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 Me.RptViewer.RefreshReport()
 AddHandler RptViewer.LocalReport.SubreportProcessing, AddressOf SubreportProcessingEvent
End Sub

Aqui o sureportprocessing:

Public Sub SubreportProcessingEvent(ByVal sender As Object, ByVal e As SubreportProcessingEventArgs)
 Try
	 Dim ds_Subs As DataSet
	 Dim Busca As New Cls_Dados
	 Dim I As Integer
' Dim str_Nome_DataSet As String = ""

	 If e.DataSourceNames.ToString = "Rpt_Bordero_Cred.rldc" Then
		 I = 0
	 ElseIf e.DataSourceNames.ToString = "Rpt_Bordero_Pag.rldc" Then
		 I = 1
	 End If
	 ds_Subs = Busca.RetornarDataSet(str_Sub(I))
	 Dim rptDataSource As New ReportDataSource _
										 ("DS_Bordero_Cred", ds_Subs.Tables(0))
	 e.DataSources.Add(rptDataSource)
 Catch ex As Exception
	 MessageBox.Show(ex.Message, My.Application.Info.Title, _
									 MessageBoxButtons.OK, MessageBoxIcon.Error)
 End Try
End Sub
Edited by Caça
GeSHi

Um Abraço,

Nelson Sousa

Posted

Boas

Já tive um problema parecido, o de não encontrar o relatório, é que o relatório quando é feito fica na pasta do projecto do programa, e o programa quando é executado , é executado numa pasta diferente "bin\Debug", e o sistema não copia esses ficheiros automaticamente, tem de ser copiados para lá manualmente ...

  •  😵😴🥵🥴  No Desenvolvimento as Possibilidades são Infinitas  😵😴🥵🥴 , podemos é ficar doidos ...
Posted

Olá, Calos,

Acho que a propriedade Embedded Resource resolve essa questão.

O problema está no fato de o relatório principal não encontrar o subrelatório, mesmo estando os 2 na mesma pasta.

Um Abraço,

Nelson Sousa

  • 2 weeks later...
Posted (edited)

Olá,

Eu de novo....rssrrs

Eu não gosto muito de pedir exemplo não mas, como cheguei a um beco sem saida, vou me arriscar.

Se alguém tiver como me mandar um exemplo de relatório e sub-relatório em funcionamento eu agradeceria muito.

Não precisa ser coisa muito elaborada, basta uma caixa de texto em cada um, só para que eu compare as propriedades com os meus aqui.

Meu email: nelsonasousa@yahoo.com.br

Obrigado!!!

Edited by Nelson Sousa

Um Abraço,

Nelson Sousa

Posted

Finalmente consegui resolver o problema.

Eu tenho o costume de criar pastas dentro do Solution Explorer para organizar os objetos da solução.

Meus reports estavam na pasta CamadaApresentacao\Relatorios.

Apenas retirei os reports da pasta acima e coloquei-os no raiz do Solution Explorer. Me parece que o reportviewer não trabalha muito bem com caracteres do tipo \.

Um Abraço,

Nelson Sousa

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.