Beispiel #1
0
        public List <En_Archivo> ObtenerRespuestaPendiente()
        {
            List <En_Archivo>   listaArchivo = new List <En_Archivo>();
            List <SqlParameter> parameters   = new List <SqlParameter>();
            //parameters.Add(new SqlParameter { ParameterName = "@Serie", SqlDbType = SqlDbType.VarChar, Size = 6, Value = serie });
            //parameters.Add(new SqlParameter { ParameterName = "@Numero", SqlDbType = SqlDbType.VarChar, Size = 20, Value = numero });
            //parameters.Add(new SqlParameter { ParameterName = "@TipoComprobante", SqlDbType = SqlDbType.VarChar, Size = 50, Value = tipo_comprobante });
            //parameters.Add(new SqlParameter { ParameterName = "@Ruc", SqlDbType = SqlDbType.VarChar, Size = 15, Value = ruc });
            SqlCommand cmd = new SqlCommand();


            try
            {
                SqlDataReader dr = SqlHelper.ExecuteReader("usp_ListaCDRPendiente", parameters);
                // SqlDataReader dr = SqlHelper.ExecuteReader("usp_ListaCDRPendiente", cmd);
                while (dr.Read())
                {
                    En_Archivo Archivo = new En_Archivo();
                    Archivo.Archivo       = (byte[])(dr[1]);
                    Archivo.IdComprobante = (long)dr[0];
                    Archivo.FechaRegistro = (DateTime)dr[2];
                    listaArchivo.Add(Archivo);
                }
            }
            catch (Exception ex)
            {
                // log.Error(ex.Message, ex);
                throw new Exception(ex.Message);
            }
            return(listaArchivo);
        }
        public void ProcesarRepresentacionImpresa()
        {
            try
            {
                Ad_Comprobante    adComprobante    = new Ad_Comprobante();
                List <En_Archivo> listaComprobante = adComprobante.ComprobantesPendientesGenerarPdf();

                if (listaComprobante.Count > 0)
                {
                    Task[] taskArray = new Task[listaComprobante.Count];

                    int i = 0;
                    foreach (En_Archivo comprobante in listaComprobante)
                    {
                        En_Archivo comprobanteParam = comprobante;
                        taskArray[i] = Task.Factory.StartNew(() => GenerarPdf(comprobanteParam));
                        i           += 1;
                    }
                    Task.WaitAll(taskArray.ToArray());
                }
            }
            catch (Exception ex)
            {
                log.Error(ex.Message.ToString(), ex);
            }
        }
Beispiel #3
0
        public void EnviarComprobante(En_Comprobante comprobante)
        {
            long           idComprobante = comprobante.IdComprobante;
            Ad_Archivo     adArchivo     = new Ad_Archivo();
            Ad_Comprobante adComprobante = new Ad_Comprobante();
            En_Archivo     archivo       = adArchivo.ObtenerArchivoComprobante(idComprobante);
            string         nombre        = archivo.Nombre;

            byte[] contenido                = archivo.Contenido;
            string carpetaTemporal          = adArchivo.ObtenerRutaTemporal("TempENVIO");
            string carpetaArchivo           = Path.GetFileNameWithoutExtension(nombre);
            string rutaCarpetaXML           = Path.Combine(carpetaTemporal, carpetaArchivo);
            string rutaArchivoXML           = Path.Combine(rutaCarpetaXML, nombre);
            string rutaArchivoZIP           = string.Concat(rutaCarpetaXML, ".zip");
            string nombreArchivoZIP         = Path.GetFileName(rutaArchivoZIP);
            string nombreArchivoZipResponse = string.Concat("R-", nombreArchivoZIP);
            string rutaZipResponse          = Path.Combine(carpetaTemporal, nombreArchivoZipResponse);

            CrearCarpeta(rutaCarpetaXML);
            CrearArchivo(rutaArchivoXML, contenido);
            Comprimir(rutaArchivoZIP, rutaCarpetaXML);
            EliminarCarpeta(rutaCarpetaXML);

            ServicePointManager.ServerCertificateValidationCallback = (snder, cert, chain, error) => true;

            byte[] archivoZip = File.ReadAllBytes(rutaArchivoZIP);
            wsSUNAT.sendBillRequest   sendBill    = new wsSUNAT.sendBillRequest();
            wsSUNAT.billServiceClient billService = new wsSUNAT.billServiceClient();

            try
            {
                billService.Open();
                byte[] archivoResponse = billService.sendBill(nombreArchivoZIP, archivoZip, "");
                adComprobante.InsertarCdrPendiente(idComprobante, archivoResponse);
                billService.Close();
                log.Info(string.Format("El comprobante {0}-{1} de la empresa emisora con ruc: {2} se procesó correctamente.",
                                       comprobante.TipoComprobante, comprobante.SerieNumero, comprobante.RucEmisor));
            }
            catch (FaultException ex)
            {
                if (billService.State == CommunicationState.Opened)
                {
                    billService.Close();
                }
                string codigo           = ex.Code.Name.ToLower().Replace("client.", "");
                string mensaje          = ex.Message.ToString();
                int    reintento        = adComprobante.QuitarPendienteEnvio(idComprobante, codigo);
                string mensajeReintento = (reintento == 1) ? "Se dejará de reintentar el envío de éste comprobante." : "";

                log.Error(string.Format("El comprobante {0}-{1} de la empresa emisora con ruc: {2} obtuvo el código de error \"{3}\" con mensaje \"{4}\". {5}",
                                        comprobante.TipoComprobante, comprobante.SerieNumero, comprobante.RucEmisor, codigo, mensaje, mensajeReintento));
            }

            EliminarArchivo(rutaZipResponse);
            EliminarArchivo(rutaArchivoZIP);
        }
Beispiel #4
0
        public En_Archivo ObtenerArchivoComprobante(long idComprobante)
        {
            En_Archivo    archivo = null;
            SqlConnection cn      = new SqlConnection(connectionString);
            SqlCommand    cmd     = new SqlCommand("dbo.usp_ObtenerPDFyXMLporComprobante", cn)
            {
                CommandType = CommandType.StoredProcedure
            };

            cmd.Parameters.Add(new SqlParameter {
                ParameterName = "@IdComprobante", SqlDbType = SqlDbType.BigInt, Value = idComprobante
            });

            try
            {
                cn.Open();

                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    archivo = new En_Archivo
                    {
                        IdComprobante   = (long)dr[0],
                        TipoComprobante = (string)dr[1],
                        SerieNumero     = (string)dr[2],
                        NombreXML       = (string)dr[3],
                        ArchivoXML      = (byte[])dr[4],
                        NombrePDF       = (string)dr[5],
                        ArchivoPDF      = (byte[])dr[6],
                        FechaEmision    = (string)dr[7],
                        RazonSocial     = (string)dr[8]
                    };
                }

                cn.Close();

                return(archivo);
            }
            catch (SqlException ex)
            {
                if (cn.State == ConnectionState.Open)
                {
                    cn.Close();
                }
                throw ex;
            }
            catch (Exception ex)
            {
                if (cn.State == ConnectionState.Open)
                {
                    cn.Close();
                }
                throw ex;
            }
        }
 public void InsertarRepresentacionImpresa(En_Archivo archivo)
 {
     try
     {
         Ad_Comprobante adComprobante = new Ad_Comprobante();
         adComprobante.InsertarRepresentacionImpresa(archivo);
     }
     catch (Exception ex)
     {
         log.Error(archivo.NombreXML + " " + ex.Message.ToString(), ex);
     }
 }
Beispiel #6
0
        public List <En_Archivo> ComprobantesPendientesGenerarPdf()
        {
            List <En_Archivo> listaComprobantes = new List <En_Archivo>();
            SqlConnection     cn  = new SqlConnection(connectionString);
            SqlCommand        cmd = new SqlCommand("sp_RepresentacionImpresaPendiente", cn)
            {
                CommandType = CommandType.StoredProcedure
            };

            try
            {
                cn.Open();

                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    En_Archivo archivo = new En_Archivo();
                    archivo.IdComprobante   = (long)(dr[0]);
                    archivo.TipoComprobante = (string)dr[1];
                    archivo.ArchivoXML      = (byte[])dr[2];
                    archivo.NombreXML       = (string)dr[3];
                    archivo.Qr = (string)dr[4];
                    //archivo.Ruta = (string)dr[5];
                    archivo.TextoDetraccion = (string)dr[6];
                    listaComprobantes.Add(archivo);
                }

                cn.Close();

                return(listaComprobantes);
            }
            catch (SqlException ex)
            {
                if (cn.State == ConnectionState.Open)
                {
                    cn.Close();
                }
                throw ex;
            }
            catch (Exception ex)
            {
                if (cn.State == ConnectionState.Open)
                {
                    cn.Close();
                }
                throw ex;
            }
        }
        public En_Archivo ObtenerArchivoComprobante(long idComprobante)
        {
            En_Archivo    archivo = null;
            SqlConnection cn      = new SqlConnection(connectionString);
            SqlCommand    cmd     = new SqlCommand("dbo.usp_ObtenerArchivoComprobante", cn)
            {
                CommandType = CommandType.StoredProcedure
            };

            cmd.Parameters.Add(new SqlParameter {
                ParameterName = "@IdComprobante", SqlDbType = SqlDbType.BigInt, Value = idComprobante
            });

            try
            {
                cn.Open();

                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    archivo = new En_Archivo();
                    archivo.IdComprobante = (long)dr[0];
                    archivo.Nombre        = (string)(dr[1]);
                    archivo.Contenido     = (byte[])dr[2];
                }

                cn.Close();

                return(archivo);
            }
            catch (SqlException ex)
            {
                if (cn.State == ConnectionState.Open)
                {
                    cn.Close();
                }
                throw ex;
            }
            catch (Exception ex)
            {
                if (cn.State == ConnectionState.Open)
                {
                    cn.Close();
                }
                throw ex;
            }
        }
        public void GenerarPdf(En_Archivo comprobante)
        {
            string archivoXML = comprobante.Ruta + @"\" + comprobante.NombreXML;

            if (!Directory.Exists(comprobante.Ruta))
            {
                Directory.CreateDirectory(comprobante.Ruta);
            }

            try
            {
                if (!File.Exists(archivoXML))
                {
                    File.WriteAllBytes(archivoXML, comprobante.ArchivoXML);
                }
            }
            catch (Exception ex)
            {
                log.Error(String.Format("{0} Error : ", comprobante.NombreXML, ex.Message.ToString()));
                return;
            }


            if (comprobante.TipoComprobante == "01" || comprobante.TipoComprobante == "03")
            {
                Ne_Invoice oInvoice = new Ne_Invoice();
                oInvoice.GenerarInvoice(comprobante);
            }

            if (comprobante.TipoComprobante == "07")
            {
                Ne_CreditNote oInvoice = new Ne_CreditNote();
                oInvoice.GenerarCreditNote(comprobante);
            }

            if (comprobante.TipoComprobante == "08")
            {
                Ne_DebitNote oInvoice = new Ne_DebitNote();
                oInvoice.GenerarDebitNote(comprobante);
            }

            //EliminarArchivo(rutaZipResponse);
            //EliminarArchivo(rutaArchivoZIP);
        }
Beispiel #9
0
        public void InsertarRepresentacionImpresa(En_Archivo archivo)
        {
            SqlConnection cn  = new SqlConnection(connectionString);
            SqlCommand    cmd = new SqlCommand("sp_RepresentacionImpresaInsert", cn)
            {
                CommandType = CommandType.StoredProcedure
            };

            cmd.Parameters.Add(new SqlParameter {
                ParameterName = "@IdComprobante", SqlDbType = SqlDbType.BigInt, Value = archivo.IdComprobante
            });
            cmd.Parameters.Add(new SqlParameter {
                ParameterName = "@NombreRepresentacionImpresa", SqlDbType = SqlDbType.VarChar, Value = archivo.NombrePdf
            });
            cmd.Parameters.Add(new SqlParameter {
                ParameterName = "@Archivo", SqlDbType = SqlDbType.VarBinary, Value = archivo.ArchivoPdf
            });

            try
            {
                cn.Open();
                cmd.ExecuteNonQuery();
                cn.Close();
            }
            catch (SqlException ex)
            {
                if (cn.State == ConnectionState.Open)
                {
                    cn.Close();
                }
                throw ex;
            }
            catch (Exception ex)
            {
                if (cn.State == ConnectionState.Open)
                {
                    cn.Close();
                }
                throw ex;
            }
        }
Beispiel #10
0
        private void EnviarCorreo(string carpetaTemporal, En_Correo correo)
        {
            MailMessage message  = new MailMessage();
            SmtpClient  smtp     = new SmtpClient();
            En_Correo   enCorreo = null;
            Da_Correo   daCorreo = new Da_Correo();

            try
            {
                Da_Archivo daArchivo       = new Da_Archivo();
                En_Archivo archivo         = daArchivo.ObtenerArchivoComprobante(correo.IdComprobante);
                string     rutaXML         = Path.Combine(carpetaTemporal, archivo.NombreXML);
                string     rutaPDF         = Path.Combine(carpetaTemporal, archivo.NombrePDF);
                string     correoEmisor    = ConfigurationManager.AppSettings["correoEmisor"];
                int        puerto          = int.Parse(ConfigurationManager.AppSettings["puerto"]);
                string     host            = ConfigurationManager.AppSettings["host"];
                string     usuario         = ConfigurationManager.AppSettings["usuario"];
                string     clave           = ConfigurationManager.AppSettings["clave"];
                string     tipoComprobante = "";
                switch (archivo.TipoComprobante)
                {
                case "01": tipoComprobante = "Factura"; break;

                case "03": tipoComprobante = "Boleta"; break;

                case "07": tipoComprobante = "Nota de crédito"; break;

                case "08": tipoComprobante = "Nota de débito"; break;
                }
                string rutaPlantilla = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "PlantillaCorreo.txt");
                string cuerpoCorreo  = File.ReadAllText(rutaPlantilla);
                cuerpoCorreo = string.Format(cuerpoCorreo, archivo.RazonSocial.ToUpper(),
                                             tipoComprobante, archivo.SerieNumero, archivo.FechaEmision);

                CrearArchivo(rutaXML, archivo.ArchivoXML);
                CrearArchivo(rutaPDF, archivo.ArchivoPDF);

                message.From = new MailAddress(correoEmisor);
                message.To.Add(new MailAddress(correo.Para));
                message.Subject    = correo.Asunto;
                message.IsBodyHtml = true;
                message.Body       = cuerpoCorreo;
                message.Attachments.Add(new Attachment(rutaXML));
                message.Attachments.Add(new Attachment(rutaPDF));
                smtp.Port                  = puerto;
                smtp.Host                  = host;
                smtp.EnableSsl             = true;
                smtp.UseDefaultCredentials = false;
                smtp.DeliveryMethod        = SmtpDeliveryMethod.Network;
                smtp.Credentials           = new NetworkCredential(usuario, clave);

                try
                {
                    smtp.Send(message);
                    message.Dispose();
                    smtp.Dispose();
                    enCorreo = new En_Correo()
                    {
                        IdComprobante  = correo.IdComprobante,
                        Estado         = 2,
                        MensajeProceso = "Correo enviado satisfactoriamente."
                    };
                    daCorreo.ActualizarEstadoComprobanteCorreo(enCorreo);
                    log.InfoFormat("Se envió el correo para el comprobante {0}-{1}.", archivo.TipoComprobante, archivo.SerieNumero);
                }
                catch (Exception ex)
                {
                    message.Dispose();
                    smtp.Dispose();
                    enCorreo = new En_Correo()
                    {
                        IdComprobante  = correo.IdComprobante,
                        Estado         = 3,
                        MensajeProceso = "Ocurrió un error en el envío. Detalle: " + ex.Message.ToString()
                    };
                    daCorreo.ActualizarEstadoComprobanteCorreo(enCorreo);
                    log.InfoFormat("Ocurrió un error al enviar el comprobante {0}-{1}.", archivo.TipoComprobante, archivo.SerieNumero);
                    throw;
                }

                EliminarArchivo(rutaXML);
                EliminarArchivo(rutaPDF);
            }
            catch (Exception ex)
            {
                string mensajeError = ex.Message.ToString();
                log.Error(mensajeError, ex);
            }
        }
Beispiel #11
0
        public void GenerarDebitNote(En_Archivo archivo)
        {
            DebitNoteType ocomprobante;
            string        rutaXml   = archivo.Ruta + @"\" + archivo.NombreXML;
            string        rutaPdf   = archivo.Ruta + @"\" + archivo.NombreXML.Replace("xml", "pdf");
            string        nombrePdf = archivo.NombreXML.Replace("xml", "pdf");
            XmlSerializer oserial   = new XmlSerializer(typeof(DebitNoteType));

            using (StreamReader reader = new StreamReader(rutaXml))
            {
                ocomprobante = (DebitNoteType)oserial.Deserialize(reader);
            }


            DataSet general = new DataSet();
            //Para la cabecera
            DataTable TablaCabecera = FnTablaCabeceraDebitNote(ocomprobante, archivo);

            TablaCabecera.TableName = "Comprobante";
            general.Tables.Add(TablaCabecera);
            //Emisor
            DataTable TablaEmisor = FnTablaEmisor(ocomprobante);

            TablaEmisor.TableName = "Emisor";
            general.Tables.Add(TablaEmisor);
            //Receptor
            DataTable TablaReceptor = FnTablaReceptor(ocomprobante);

            TablaReceptor.TableName = "receptor";
            general.Tables.Add(TablaReceptor);

            //Detalle
            DataTable TablaDetalle = FnTablaDetalle(ocomprobante);

            TablaDetalle.TableName = "Detalle";
            general.Tables.Add(TablaDetalle);


            DataTable tablaSustento         = FnTablaReferenciadoDebitNote(ocomprobante);
            string    DocumentoReferenciado = "";
            string    sustento = "";
            string    TipoComprobanteReferenciado = "";

            if (tablaSustento.Rows.Count > 0)
            {
                DocumentoReferenciado       = tablaSustento.Rows[0]["DocumentoReferenciado"].ToString();
                TipoComprobanteReferenciado = tablaSustento.Rows[0]["TipoDocumentoReferenciado"].ToString();
                sustento = tablaSustento.Rows[0]["Sustento"].ToString();
            }

            ReportDocument rpt = new ReportDocument();

            try
            {
                //String rutaReporte = @"C:\Facturacion\CrpInvoice.rpt";

                String rutaReporte = System.AppDomain.CurrentDomain.BaseDirectory.ToString() + @"CrpNote.rpt";
                //System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) + @"\CrpInvoice.rpt";
                log.Info(rutaReporte);
                rpt.Load(rutaReporte);
                rpt.SetDataSource(general);
                rpt.SetParameterValue("DocumentoReferenciado", DocumentoReferenciado.ToString());
                rpt.SetParameterValue("TipoDocumentoReferenciado", TipoComprobanteReferenciado.ToString());
                rpt.SetParameterValue("Sustento", sustento.ToString());
                string textoDetraccion = string.Format("Detracciones: {0}", archivo.TextoDetraccion);
                if (string.IsNullOrEmpty(archivo.TextoDetraccion))
                {
                    textoDetraccion = " ";
                }
                rpt.SetParameterValue("Detraccion", textoDetraccion);
                rpt.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, rutaPdf);

                if (File.Exists(rutaPdf))
                {
                    byte[] archivoPdf = File.ReadAllBytes(rutaPdf);
                    archivo.ArchivoPdf = archivoPdf;
                    archivo.NombrePdf  = nombrePdf;
                    Ne_Comprobante oComprobante = new Ne_Comprobante();
                    oComprobante.InsertarRepresentacionImpresa(archivo);
                    log.Info(archivo.NombrePdf + " se genero correctamente la representacion impresa");
                }
            }
            catch (Exception ex)
            {
                log.Error(archivo.NombreXML + " Error " + ex.Message);
            }
        }
Beispiel #12
0
        private DataTable FnTablaCabeceraDebitNote(DebitNoteType ocomprobante, En_Archivo archivo)
        {
            DataTable dtCabecera = new DataTable();

            dtCabecera.Columns.Add(new DataColumn("SerieNumero", typeof(string)));
            dtCabecera.Columns.Add(new DataColumn("FechaEmision", typeof(string)));
            dtCabecera.Columns.Add(new DataColumn("FechaVencimiento", typeof(string)));
            dtCabecera.Columns.Add(new DataColumn("TipoComprobante", typeof(string)));
            dtCabecera.Columns.Add(new DataColumn("Moneda", typeof(string)));
            dtCabecera.Columns.Add(new DataColumn("MontoLetras", typeof(string)));
            dtCabecera.Columns.Add(new DataColumn("QR", typeof(Byte[])));
            dtCabecera.Columns.Add(new DataColumn("TotalValorVentaGravada", typeof(string)));
            dtCabecera.Columns.Add(new DataColumn("IGV", typeof(string)));
            dtCabecera.Columns.Add(new DataColumn("ImporteTotal", typeof(string)));

            DataRow fila;

            fila = dtCabecera.NewRow();
            fila["SerieNumero"]      = FnValidarNulo(ocomprobante.ID.Value.ToString());
            fila["FechaEmision"]     = FnValidarNulo(ocomprobante.IssueDate.Value.ToString());
            fila["FechaVencimiento"] = "";

            fila["TipoComprobante"] = "NOTA CREDITO ELECTRÓNICA";


            if (ocomprobante.DocumentCurrencyCode.Value.ToString() == "PEN")
            {
                fila["Moneda"] = "NUEVO SOL";
            }
            if (ocomprobante.DocumentCurrencyCode.Value.ToString() == "USD")
            {
                fila["Moneda"] = "DOLAR AMERICANO";
            }


            fila["MontoLetras"] = "";
            if (ocomprobante.Note != null)
            {
                if (ocomprobante.Note.Length > 0)
                {
                    foreach (NoteType nota in ocomprobante.Note)
                    {
                        if (nota.languageLocaleID == "1000")
                        {
                            fila["MontoLetras"] = nota.Value.ToString();
                        }
                    }
                }
            }

            fila["QR"] = FnCodigoQR(archivo.Qr);

            if (ocomprobante.TaxTotal != null)
            {
                foreach (TaxTotalType total in ocomprobante.TaxTotal)
                {
                    foreach (TaxSubtotalType subTotal in total.TaxSubtotal)
                    {
                        if (subTotal.TaxCategory.TaxScheme.Name.Value.ToString() == "IGV")
                        {
                            fila["IGV"] = FnValidarNulo(subTotal.TaxAmount.Value.ToString());
                        }
                    }
                }
            }

            if (ocomprobante.RequestedMonetaryTotal != null)
            {
                fila["TotalValorVentaGravada"] = FnValidarNulo(ocomprobante.RequestedMonetaryTotal.LineExtensionAmount.Value.ToString());
                fila["ImporteTotal"]           = FnValidarNulo(ocomprobante.RequestedMonetaryTotal.PayableAmount.Value.ToString());
            }


            dtCabecera.Rows.Add(fila);

            return(dtCabecera);
        }
Beispiel #13
0
        public void GenerarInvoice(En_Archivo archivo)
        {
            InvoiceType   ocomprobante;
            string        rutaXml   = archivo.Ruta + @"\" + archivo.NombreXML;
            string        rutaPdf   = archivo.Ruta + @"\" + archivo.NombreXML.Replace("xml", "pdf");
            string        nombrePdf = archivo.NombreXML.Replace("xml", "pdf");
            XmlSerializer oserial   = new XmlSerializer(typeof(InvoiceType));

            using (StreamReader reader = new StreamReader(rutaXml))
            {
                ocomprobante = (InvoiceType)oserial.Deserialize(reader);
            }


            DataSet general = new DataSet();
            //Para la cabecera
            DataTable TablaCabecera = FnTablaCabeceraInvoice(ocomprobante, archivo);

            TablaCabecera.TableName = "Comprobante";
            general.Tables.Add(TablaCabecera);
            //Emisor
            DataTable TablaEmisor = FnTablaEmisor(ocomprobante);

            TablaEmisor.TableName = "Emisor";
            general.Tables.Add(TablaEmisor);
            //Receptor
            DataTable TablaReceptor = FnTablaReceptor(ocomprobante);

            TablaReceptor.TableName = "receptor";
            general.Tables.Add(TablaReceptor);

            //Detalle
            DataTable TablaDetalle = FnTablaDetalle(ocomprobante);

            TablaDetalle.TableName = "Detalle";
            general.Tables.Add(TablaDetalle);


            ReportDocument rpt = new ReportDocument();

            try
            {
                //String rutaReporte = @"C:\Facturacion\CrpInvoice.rpt";

                String rutaReporte = System.AppDomain.CurrentDomain.BaseDirectory.ToString() + @"CrpInvoice.rpt";
                //System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) + @"\CrpInvoice.rpt";
                log.Info(rutaReporte);
                rpt.Load(rutaReporte);
                rpt.SetDataSource(general);

                rpt.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, rutaPdf);

                if (File.Exists(rutaPdf))
                {
                    byte[] archivoPdf = File.ReadAllBytes(rutaPdf);
                    archivo.ArchivoPdf = archivoPdf;
                    archivo.NombrePdf  = nombrePdf;
                    Ne_Comprobante oComprobante = new Ne_Comprobante();
                    oComprobante.InsertarRepresentacionImpresa(archivo);
                    log.Info(archivo.NombrePdf + " se genero correctamente la representacion impresa");
                }
            }
            catch (Exception ex)
            {
                log.Error(archivo.NombreXML + " Error " + ex.Message);
            }
        }