none
Error en instalacion donde no hubo en desarrollo con Report Viewer RRS feed

  • Pregunta

  • Buen día

    Tengo el siguiente codigo

    //Instanciamos un LocalReport, le indicamos el report a imprimir y le cargamos los datos
                    LocalReport rdlc = new LocalReport();
                    rdlc.ReportPath = @"..\..\Reportes\Ventas\Facturas.rdlc";
                    rdlc.DataSources.Add(new ReportDataSource("DsEncabezado", encabezado));
                    rdlc.DataSources.Add(new ReportDataSource("DsEncabezadoSede", encabezadoSede));
                    rdlc.DataSources.Add(new ReportDataSource("DsEncabezadoEmpresa", encabezadoEmpresa));
                    rdlc.DataSources.Add(new ReportDataSource("DsDetallesFactura", detalles));
    
                    //Imprime el report
                    Impresion imp = new Impresion();
                    imp.Imprime(rdlc);

    using System;
    using System.IO;
    using System.Data;
    using System.Text;
    using System.Drawing.Imaging;
    using System.Drawing.Printing;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using Microsoft.Reporting.WinForms;
    using System.Drawing;
    
    namespace Vista.Ventas
    {
        public class ImpresionFactura : IDisposable
        {
            private int m_currentPageIndex;
            private IList<Stream> m_streams;
    
            // Stream que nos ayudara a contener el Report.rdlc 
            private Stream CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek)
            {
                Stream stream = new FileStream(@"..\..\" + name + "." + fileNameExtension, FileMode.Create);
                m_streams.Add(stream);
                return stream;
            }
    
            // exportacion del archivo-reporte en formato EMF (Enhanced Metafile).
            private void Export(LocalReport report)
            {
                //las siguientes lineas definen el tamaño de la hoja, en mi caso es de tamaño ticket
                //los tamaños pueden ser en pulgadas(in) o en centimetros(cm), quiza aceptan mas formatos pero no los probé.
                string deviceInfo =
                  @"<DeviceInfo>
                    <OutputFormat>EMF</OutputFormat>
                    <PageWidth>7,7cm</PageWidth>
                    <PageHeight>35,5cm</PageHeight>
                    <MarginTop>0cm</MarginTop>
                    <MarginLeft>0,2cm</MarginLeft>
                    <MarginRight>0cm</MarginRight>
                    <MarginBottom>0cm</MarginBottom>
                </DeviceInfo>";
                Warning[] warnings;
                m_streams = new List<Stream>();
                //renderizamos el reporte
                report.Render("Image", deviceInfo, CreateStream, out warnings);
                foreach (Stream stream in m_streams)
                { stream.Position = 0; }
            }
    
            // Handler para los eventos PrintPageEvents
            private void PrintPage(object sender, PrintPageEventArgs ev)
            {
                Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]);
    
                // ajusta el area rectangular con margenes.
                Rectangle adjustedRect = new Rectangle(
                    ev.PageBounds.Left - (int)ev.PageSettings.HardMarginX,
                    ev.PageBounds.Top - (int)ev.PageSettings.HardMarginY,
                    ev.PageBounds.Width,
                    ev.PageBounds.Height);
    
                // Dibuja un fondo blanco para el reporte
                ev.Graphics.FillRectangle(Brushes.White, adjustedRect);
    
                // Dibuja el contenido del reporte
                ev.Graphics.DrawImage(pageImage, adjustedRect);
    
                // pasa a la siguiente pagina y comprueba que no se haya terminado el contenido
                m_currentPageIndex++;
                ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
            }
    
            private void Print()
            {
                PrintDocument printDoc;
                //busca el nombre de la impresora predeterminada
                String printerName = ImpresoraPredeterminada();
    
                if (m_streams == null || m_streams.Count == 0)
                    throw new Exception("Error: No hay datos que imprimir.");
    
                printDoc = new PrintDocument();
                printDoc.PrinterSettings.PrinterName = printerName;
                if (!printDoc.PrinterSettings.IsValid)
                {
                    throw new Exception(String.Format("No puedo encontrar la impresora \"{0}\".", printerName));
                }
                else
                {
                    printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
                    m_currentPageIndex = 0;
                    printDoc.Print();
                }
            }
    
            private string ImpresoraPredeterminada()
            {
                for (Int32 i = 0; i < PrinterSettings.InstalledPrinters.Count; i++)
                {
                    PrinterSettings a = new PrinterSettings();
                    a.PrinterName = PrinterSettings.InstalledPrinters[i].ToString();
                    if (a.IsDefaultPrinter)
                    { return PrinterSettings.InstalledPrinters[i].ToString(); }
                }
                return "";
            }
    
            // Exporta el reporte a un archivo .emf y lo imprime
            public void Imprime(LocalReport rdlc)
            {
                Export(rdlc);
                Print();
            }
    
            public void Dispose()
            {
                if (m_streams != null)
                {
                    foreach (Stream stream in m_streams)
                        stream.Close();
                    m_streams = null;
                }
            }
        }
    }
    

    Mi problema es que cuando ejecuto la aplicacion en visual studio en mi ambiente de desarrollo todo ese código me arroja un ticket a la impresora y funciona muy bien hasta hay, pero cuando instalo la aplicación en otro computador me arroja el siguiente mensaje "Se ha producido un error durante el procesamiento local de informes", alguien podría ayudarme con esta labor ya no se que hacerle. Muchas gracias

    viernes, 24 de enero de 2020 3:47

Respuestas

Todas las respuestas