Nelson Sousa Posted March 27, 2013 at 11:41 PM Report #500635 Posted March 27, 2013 at 11:41 PM (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 April 2, 2013 at 08:33 AM by Caça GeSHi Um Abraço, Nelson Sousa
jpaulino Posted March 28, 2013 at 08:16 AM Report #500644 Posted March 28, 2013 at 08:16 AM O subreport está na mesma localização do relatório? Vê se este exemplo ajuda.
Nelson Sousa Posted March 28, 2013 at 12:16 PM Author Report #500671 Posted March 28, 2013 at 12:16 PM (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. Edited March 28, 2013 at 12:20 PM by Nelson Sousa Um Abraço, Nelson Sousa
jpaulino Posted March 28, 2013 at 12:18 PM Report #500672 Posted March 28, 2013 at 12:18 PM Mas no relatório (principal) definiste o subreport?
Nelson Sousa Posted March 28, 2013 at 12:47 PM Author Report #500677 Posted March 28, 2013 at 12:47 PM Desculpa, mas eu não entendi. Um Abraço, Nelson Sousa
jpaulino Posted March 28, 2013 at 01:50 PM Report #500685 Posted March 28, 2013 at 01:50 PM No relatório adicionaste o subrelatório, certo?
Nelson Sousa Posted March 28, 2013 at 02:06 PM Author Report #500686 Posted March 28, 2013 at 02:06 PM 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
jpaulino Posted March 29, 2013 at 09:50 AM Report #500783 Posted March 29, 2013 at 09:50 AM Peço desculpa mas ontem não vi a imagem (não me estava a aparecer) :/ Vê como tens definida a build action para os reports. Este artigo deve ajudar a explicar (caso seja este o problema)
Nelson Sousa Posted March 29, 2013 at 11:16 AM Author Report #500786 Posted March 29, 2013 at 11:16 AM 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
jpaulino Posted March 29, 2013 at 12:22 PM Report #500791 Posted March 29, 2013 at 12:22 PM 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
Nelson Sousa Posted March 29, 2013 at 10:17 PM Author Report #500881 Posted March 29, 2013 at 10:17 PM (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 April 2, 2013 at 08:33 AM by Caça GeSHi Um Abraço, Nelson Sousa
jpaulino Posted March 29, 2013 at 10:23 PM Report #500882 Posted March 29, 2013 at 10:23 PM É depois de carregar o report principal ... vê no exemplo do codeproject como está feito. http://www.codeproject.com/Articles/36881/Microsoft-Reporting-Services-Sub-Reports-Charts-Pa
Nelson Sousa Posted March 29, 2013 at 11:14 PM Author Report #500886 Posted March 29, 2013 at 11:14 PM 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
jpaulino Posted March 30, 2013 at 10:22 AM Report #500906 Posted March 30, 2013 at 10:22 AM Mas estás a carregar os dois relatórios através de código certo? Mostra lá o código completo.
Nelson Sousa Posted March 30, 2013 at 11:18 PM Author Report #500960 Posted March 30, 2013 at 11:18 PM (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 April 2, 2013 at 08:34 AM by Caça GeSHi Um Abraço, Nelson Sousa
Carlos Pais Posted April 3, 2013 at 10:58 AM Report #501367 Posted April 3, 2013 at 10:58 AM 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 ...
Nelson Sousa Posted April 3, 2013 at 11:32 AM Author Report #501374 Posted April 3, 2013 at 11:32 AM 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
Nelson Sousa Posted April 12, 2013 at 01:06 PM Author Report #502955 Posted April 12, 2013 at 01:06 PM (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 April 12, 2013 at 01:07 PM by Nelson Sousa Um Abraço, Nelson Sousa
Nelson Sousa Posted April 18, 2013 at 10:24 PM Author Report #503916 Posted April 18, 2013 at 10:24 PM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now