none
Subinforme - Error en la especificacion de ubicacion del Report RRS feed

  • Pregunta

  • Estoy teniendo el siguiente error que detallo a continuacion:

    No se pudo encontrar el subinforme 'Encabezado' en la ubicación especificada RUTA\Encabezado.rdlc. Compruebe que el subinforme se ha publicado y que el nombre es correcto.

    public FormBCSLDSPT(XDocument parametrosXML)
    {
    	InitializeComponent();
    	string nombreSP = "XXX_SP_REPORTING_SERVICES_DESPACHOS";
    	string SP_Encabezado = "XXX_SP_REPORTING_PARAMETROS";            
    
    	DataSet ds = frmListClass.ObtenerDS(parametrosXML, nombreSP);
    	string[] nodoParametro = frmListClass.ParsearParametros(parametrosXML);
    	int[] cantDecimales = frmListClass.ObtenerCantDecimales(parametrosXML);
    	string dcmlCant = frmListClass.ConvertirCantDecimalesAString(cantDecimales[0]);
    	string dcmlCantTalle = frmListClass.ConvertirCantDecimalesAString(cantDecimales[1]);
    	string dcmlPrecio = frmListClass.ConvertirCantDecimalesAString(cantDecimales[2]);
    	string dcmlImporte = frmListClass.ConvertirCantDecimalesAString(cantDecimales[3]);
    
    	ReportParameter p1  = new ReportParameter("Base", nodoParametro[0]);
    	ReportParameter p2  = new ReportParameter("User", nodoParametro[1]);
    	ReportParameter p3  = new ReportParameter("Sistema", nodoParametro[3]);
    	ReportParameter p4  = new ReportParameter("Caratula", nodoParametro[4]);
    	ReportParameter p5  = new ReportParameter("FormatoQRP", nodoParametro[5]);            
    	ReportParameter p6  = new ReportParameter("dcmlCant", dcmlCant);
    	ReportParameter p7  = new ReportParameter("dcmlCantTalle", dcmlCantTalle);
    	ReportParameter p8  = new ReportParameter("dcmlPrecio", dcmlPrecio);
    	ReportParameter p9  = new ReportParameter("dcmlImporte", dcmlImporte);
    
    
    	ReportDataSource dataSource = new ReportDataSource(nombreSP, ds.Tables[0]);
    	this.reportViewer1.LocalReport.DataSources.Clear();
    	this.reportViewer1.ProcessingMode = ProcessingMode.Local;
    	string rutaEncabezado = @"D:\\BASCS-ReportingServices\\BAS-ReportingServices\\ProyectoInforme1\\Header.rdl";
    	string rutaRDLC = @"D:\\BASCS-ReportingServices\\BAS-ReportingServices\\BCSLDSPT\\Report1.rdlc";
    
    	this.reportViewer1.LocalReport.ReportPath = rutaRDLC;
    	Stream subReport = File.OpenRead(rutaEncabezado);
    	Stream report = File.OpenRead(rutaRDLC);            
    	this.reportViewer1.LocalReport.LoadReportDefinition(report);
    	this.reportViewer1.LocalReport.LoadSubreportDefinition("Header", subReport);            
    	this.reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(AgregarEncabezado);
    	this.reportViewer1.LocalReport.DataSources.Add(dataSource);
    	this.reportViewer1.LocalReport.SetParameters(new ReportParameter[] { p1, p2, p3, p4, p5, p6, p7, p8, p9/*, p10, p11, p12, p13*/ });
    	this.reportViewer1.LocalReport.Refresh();                        
    	
    	Warning[] warnings;
    	string[] streamIds;
    	string mimeType;
    	string encoding;
    	string filenameExtension;
    	byte[] bytes = reportViewer1.LocalReport.Render("PDF", null, out mimeType, out encoding, out filenameExtension, out streamIds, out warnings);
    	
    	string rutaArchivo = frmListClass.ObtenerRutaPDF(bytes);
    	System.Diagnostics.Process.Start(rutaArchivo);            
    }
    
    void AgregarEncabezado(object sender, SubreportProcessingEventArgs e)
    {
    	
    	string Parametros = "1, 1, NULL, 1";            
    	string cadenaConexion = "Data Source=SRVDESARROLLO7\\BASCS; Initial Catalog=bascsreport ;User Id=sa; Password=sa";
    	string cadenaComandoSQL = frmListClass.SeteosSQL + frmListClass.SP_Encabezado + " " + Parametros;
    
    	SqlConnection ConexionSQL = new SqlConnection(cadenaConexion);
    	ConexionSQL.Open();
    	SqlCommand ComandoSQL = new SqlCommand(cadenaComandoSQL, ConexionSQL);
    	ComandoSQL.CommandType = CommandType.Text;
    	ComandoSQL.Parameters.AddWithValue("@monoemp, @codempusu, @tituloinf, @whereemp", Parametros);
    	SqlDataAdapter da = new SqlDataAdapter();
    	da.SelectCommand = ComandoSQL;
    	DataSet dsEncabezado = new DataSet();
    	da.Fill(dsEncabezado, Parametros);
    	ConexionSQL.Close();
    
    	ReportDataSource dataSourceEncabezado = new ReportDataSource("XXX_SP_REPORTING_SERVICES_DESPACHOS", dsEncabezado.Tables[0]);
    	e.DataSources.Add(dataSourceEncabezado);
    	
    	
    }


    Necesito poder pasarle al informe principal el Subinforme (Encabezado), ya que en el mismo tengo parametros que se muestran en el Encabezado que se repiten en casi todos los informe. El Subinforme esta en otro proyecto, este puede que sea el inconveniente?

    Ya no se que mas ver!!

    Gracias y Saludos



    • Editado NicolasHC miércoles, 20 de febrero de 2019 20:18 UpdateCode
    martes, 12 de febrero de 2019 21:57

Todas las respuestas

  • Hola  

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comento que estaremos realizando una revisión a profundidad acerca del inconveniente que se te está presentando.

    Proporcionaremos una respuesta lo más pronto posible.

    Gracias por usar los foros de MSDN.

    Pedro Alfaro
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
    miércoles, 13 de febrero de 2019 18:42
    Moderador
  • Buenas Pedro

    Algún comentario que puedas agregar?

    Slds.


    • Editado NicolasHC martes, 19 de febrero de 2019 15:38
    martes, 19 de febrero de 2019 15:35
  • Alguno que Pueda darme una mano con esto??

    Slds.

    miércoles, 20 de febrero de 2019 20:10
  • Yo logre hacer funcionar, después de una larga lucha, un subinforme con vs2010 hace ya un buen tiempo. Por lo poco que recuerdo, el encabezado va en el informe y no en el subinforme.
    miércoles, 20 de febrero de 2019 20:48
  • Hola AntiWork!

    Podrías pasarme parte del Código a la llamada al SubReport o decirme como hiciste para que funcione?

    En cuanto a que el Reporte detallado vaya en el subinforme... preciso que si o si valla en el Informe ya que desde su Main() proviene el flujo de ejecución del mismo.

    Gracias!!



    • Editado NicolasHC lunes, 25 de febrero de 2019 14:12
    lunes, 25 de febrero de 2019 14:11
  • hola

    si analizamos las variables

    string rutaEncabezado = @"D:\\BASCS-ReportingServices\\BAS-ReportingServices\\ProyectoInforme1\\Header.rdl";
    string rutaRDLC = @"D:\\BASCS-ReportingServices\\BAS-ReportingServices\\BCSLDSPT\\Report1.rdlc";
    

    porque una lleva la extension .rdl ?

    los rdl son reportes que se integran al servicio de Sql Server, los .rdlc ejecuta local, no puedes unir ambos

    O estan ambos bajo el servicio de sql server o estan ejecutando local

    Valida que definas bien la extension

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 25 de febrero de 2019 15:44
  • Gracias por tu respuestas Leandro!

    Ya pude corregir lo que me indicaste, pero ahora me arroja el siguiente error:

    "No se pudo encontrar el subinforme 'Caratula' en la ubicación especificada Caratula. Compruebe que el subinforme se ha publicado y que el nombre es correcto."

    ¿Que es lo que estaría definiendo mal de la Ubicación?

    XMLparametros = parametrosXML; InitializeComponent(); string nombreSP = "XXX_SP_REPORTING_SERVICES_DESPACHOS"; DataSet ds = frmListClass.ObtenerDS(parametrosXML, nombreSP); ReportDataSource dataSource = new ReportDataSource(nombreSP, ds.Tables[0]); this.reportViewer1.LocalReport.DataSources.Clear(); this.reportViewer1.ProcessingMode = ProcessingMode.Local; string rutaEncabezado = @"D:\\BASCS-ReportingServices\\BAS-ReportingServices\\EncabezadoClass\\Encabezado.rdlc"; string rutaRDLC = @"D:\\BASCS-ReportingServices\\BAS-ReportingServices\\BCSLDSPT\\Report1.rdlc"; Stream streamEncab = File.OpenRead(rutaEncabezado); Stream streamReport = File.OpenRead(rutaRDLC); this.reportViewer1.LocalReport.LoadReportDefinition(streamReport); this.reportViewer1.LocalReport.LoadSubreportDefinition("Encabezado", streamEncab); this.reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(AgregarEncabezado); this.reportViewer1.LocalReport.DataSources.Add(dataSource); this.reportViewer1.LocalReport.Refresh();

    void AgregarEncabezado(object sender, SubreportProcessingEventArgs e) { DataSet dsEncabezado = frmListClass.ObtenerEncabezadoDS(XMLparametros); ReportDataSource dataSourceEncab = new ReportDataSource(frmListClass.SP_Encabezado_Emp.ToString(), dsEncabezado.Tables[0]); e.DataSources.Add(dataSourceEncab); }




    • Editado NicolasHC martes, 26 de febrero de 2019 13:13 Resumido
    lunes, 25 de febrero de 2019 20:14
  • Puede que el Problema este en que el Informe y el Subinforme estén en 2 carpetas diferentes??

    string rutaEncabezado = @"D:\\BASCS-ReportingServices\\BAS-ReportingServices\\EncabezadoClass\\Encabezado.rdlc";
    string rutaRDLC = @"D:\\BASCS-ReportingServices\\BAS-ReportingServices\\BCSLDSPT\\Report1.rdlc";
    


    martes, 26 de febrero de 2019 13:43
  • Hay alguna forma de realizar un Subreport que este definido en otro Project, en este caso en otro ReportsApplication??


    • Editado NicolasHC martes, 26 de febrero de 2019 16:04
    martes, 26 de febrero de 2019 16:04
  • Hola. Primero diseñe un reporte para usarlo como subreporte, en este hay que definir un parametro que servirá para relacionar los datos.

    Luego el reporte en el cual se insertará el subreporte.

    En este reporte se insertó el subreport y se configuró su propiedades (nomebre, etc). Algo muy importante es agregar el parámeto @Dni al objeto subreport, haciendo click derecho sobre el subreport, elegir propiedades y depues parametros, como se ve en la imagen de abajo:

    Para mostrar el reporte yo creé un form llamado FrmVisor. En el insete un objeto ReportView, llamado Visor. y le agregué este codigo:

        private void FrmVisor_Load(object sender, EventArgs e)
        {
          Visor.LocalReport.ReportPath = Application.StartupPath + "\\Reportes\\RptLAnualENC.rdlc";
          Visor.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(SubreportProcessingEventHandler);
          ReportParameter[] parametros = new ReportParameter[1];
          ReportParameter p = new ReportParameter("prmCurso", Curso.Nombre);
          parametros[0] = p;
          Visor.LocalReport.SetParameters(parametros);
          Visor.LocalReport.DataSources.Add(new ReportDataSource("DsEnc", getEncabezados()));
          this.Visor.RefreshReport();
        }
    
        void SubreportProcessingEventHandler(object sender, SubreportProcessingEventArgs e)
        {
          e.DataSources.Add(new ReportDataSource("DsDet", getDetalles(e.Parameters["Dni"].Values[0])));
        }
    
        private DataTable getEncabezados()
        {
          String sqlE = "SELECT Apellido, Nombres, Dni, FechaNac, LocalidadNac, LocalidadAct, Legajo, FechaAlta, InstLegAlta, FechaBaja, InstLegBaja, MotivoBaja, FechaEgreso, InstLegEgreso, Observacion, Seccion, Libro, Folio, PromG AS PGral FROM Alumnos "
           + where + " ORDER BY Apellido, Nombres, Dni";
         OleDbDataAdapter daE = new OleDbDataAdapter(sqlE, "String de conexion");
          DataSet ds = new DsLibroAnual();
          daE.Fill(ds, "Alumnos");
          return ds.Tables["Alumnos"];
        }
    
        private DataTable getDetalles(string dni)
        {
    
          String sqlD = "SELECT Materias.CodMat, Materias.NOrden, Notas.Dni, Materias.Materia, N1 AS Nta1, N2 AS Nta2, N3 AS Nta3, N4 AS Nta4, Concepto AS Cpto, Prom AS PromM, Notas.Obs "
                        + "FROM Materias INNER JOIN Notas ON Materias.CodMat = Notas.CodMat "
                        + "WHERE Notas.Dni = '" + dni + "' "
                        + "ORDER BY Materias.NOrden";
          OleDbDataAdapter daD = new OleDbDataAdapter(sqlD, "String de conexion");
          DataSet ds = new DsLibroAnual();
          
          try
          {
            daD.Fill(ds, "Materias");
          }
          catch { }
    
          return ds.Tables["Materias"];
        }
    La variable "where" es un simple string que la defino en un procedimiento y contiene un la expreión sql que va en la clausula WHERE. 




    • Editado AntiWork martes, 26 de febrero de 2019 21:10
    martes, 26 de febrero de 2019 21:02