private void ProcesarComprobante(out CrystalDecisions.CrystalReports.Engine.ReportDocument ReporteDocumento, eFact_Entidades.Lote Lote, int Renglon) { try { Cursor = System.Windows.Forms.Cursors.WaitCursor; facturaRpt = new CrystalDecisions.CrystalReports.Engine.ReportDocument(); facturaRpt.Load("Facturacion\\Electronica\\Reportes\\Factura.rpt"); //Crear un lote de un solo comprobante, para la impresion o exportacion del pdf. eFact_Entidades.Lote LoteConUnSoloComprobante = new eFact_Entidades.Lote(); LoteConUnSoloComprobante.CuitVendedor = Lote.CuitVendedor; LoteConUnSoloComprobante.FechaAlta = Lote.FechaAlta; LoteConUnSoloComprobante.FechaEnvio = Lote.FechaEnvio; LoteConUnSoloComprobante.IdLote = Lote.IdLote; LoteConUnSoloComprobante.IdOp = Lote.IdOp; LoteConUnSoloComprobante.LoteXml = Lote.LoteXml; LoteConUnSoloComprobante.LoteXmlIF = Lote.LoteXmlIF; LoteConUnSoloComprobante.NumeroEnvio = Lote.NumeroEnvio; LoteConUnSoloComprobante.NumeroLote = Lote.NumeroLote; LoteConUnSoloComprobante.PuntoVenta = Lote.PuntoVenta; LoteConUnSoloComprobante.CantidadRegistros = 1; LoteConUnSoloComprobante.Comprobantes.Add(Lote.Comprobantes[Renglon]); LoteConUnSoloComprobante.WF = Lote.WF; FeaEntidades.InterFacturas.lote_comprobantes lc = new FeaEntidades.InterFacturas.lote_comprobantes(); eFact_RN.Lote.DeserializarLc(out lc, LoteConUnSoloComprobante, true); //Entidad para reporte crystal. Al desserializar se pierden los descuentos de la entidad original. FeaEntidades.Reporte.lote_comprobantes lcReporte = new FeaEntidades.Reporte.lote_comprobantes(); eFact_RN.Lote.DeserializarLc(out lcReporte, LoteConUnSoloComprobante); for (int i = 0; i < lc.comprobante.Length; i++) { if (i == 0) { lc.comprobante[i] = lc.comprobante[Renglon]; lcReporte.comprobante[i] = lcReporte.comprobante[Renglon]; for (int l = 0; l < lc.comprobante[i].detalle.linea.Length; l++) { if (lc.comprobante[i].detalle.linea[l].lineaDescuentos != null) { lcReporte.comprobante[i].detalle.linea[l].lineaDescuentos = new FeaEntidades.Reporte.lineaDescuentos[lc.comprobante[i].detalle.linea[l].lineaDescuentos.Length]; for (int d = 0; d < lcReporte.comprobante[i].detalle.linea[l].lineaDescuentos.Length; d++) { lcReporte.comprobante[i].detalle.linea[l].lineaDescuentos[d] = new FeaEntidades.Reporte.lineaDescuentos(); lcReporte.comprobante[i].detalle.linea[l].lineaDescuentos[d].descripcion_descuento = lc.comprobante[i].detalle.linea[l].lineaDescuentos[d].descripcion_descuento; lcReporte.comprobante[i].detalle.linea[l].lineaDescuentos[d].importe_descuento = lc.comprobante[i].detalle.linea[l].lineaDescuentos[d].importe_descuento; lcReporte.comprobante[i].detalle.linea[l].lineaDescuentos[d].importe_descuento_moneda_origen = lc.comprobante[i].detalle.linea[l].lineaDescuentos[d].importe_descuento_moneda_origen; lcReporte.comprobante[i].detalle.linea[l].lineaDescuentos[d].importe_descuento_moneda_origenSpecified = lc.comprobante[i].detalle.linea[l].lineaDescuentos[d].importe_descuento_moneda_origenSpecified; lcReporte.comprobante[i].detalle.linea[l].lineaDescuentos[d].importe_descuento_moneda_origenSpecified = true; lcReporte.comprobante[i].detalle.linea[l].lineaDescuentos[d].porcentaje_descuento = lc.comprobante[i].detalle.linea[l].lineaDescuentos[d].porcentaje_descuento; lcReporte.comprobante[i].detalle.linea[l].lineaDescuentos[d].porcentaje_descuentoSpecified = lc.comprobante[i].detalle.linea[l].lineaDescuentos[d].porcentaje_descuentoSpecified; lcReporte.comprobante[i].detalle.linea[l].lineaDescuentos[d].porcentaje_descuentoSpecified = true; } } else { lcReporte.comprobante[0].detalle.linea[l].lineaDescuentos = new FeaEntidades.Reporte.lineaDescuentos[1]; lcReporte.comprobante[0].detalle.linea[l].lineaDescuentos[0] = new FeaEntidades.Reporte.lineaDescuentos(); lcReporte.comprobante[0].detalle.linea[l].lineaDescuentos[0].descripcion_descuento = ""; lcReporte.comprobante[0].detalle.linea[l].lineaDescuentos[0].importe_descuento = 0; lcReporte.comprobante[0].detalle.linea[l].lineaDescuentos[0].porcentaje_descuento = 0; lcReporte.comprobante[0].detalle.linea[l].lineaDescuentos[0].porcentaje_descuentoSpecified = true; lcReporte.comprobante[0].detalle.linea[l].lineaDescuentos[0].importe_descuento_moneda_origen = 0; lcReporte.comprobante[0].detalle.linea[l].lineaDescuentos[0].importe_descuento_moneda_origenSpecified = true; } } } else { lc.comprobante[i] = null; lcReporte.comprobante[i] = null; } } AsignarCamposOpcionales(lcReporte); ReemplarResumenImportesMonedaExtranjera(lcReporte); DataSet ds = new DataSet(); XmlSerializer objXS = new XmlSerializer(lcReporte.GetType()); StringWriter objSW = new StringWriter(); objXS.Serialize(objSW, lcReporte); StringReader objSR = new StringReader(objSW.ToString()); ds.ReadXml(objSR); string pxsd = string.Format("{0}\\Facturacion\\Electronica\\Reportes\\lote_comprobantes.xsd",System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)); System.IO.File.Copy(pxsd, @System.IO.Path.GetTempPath() + "lote_comprobantes.xsd", true); string imagen = string.Format("{0}\\Facturacion\\Electronica\\Reportes\\Imagen.xsd",System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)); System.IO.File.Copy(imagen, @System.IO.Path.GetTempPath() + "Imagen.xsd", true); facturaRpt.SetDataSource(ds); facturaRpt.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.PaperLetter; facturaRpt.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Portrait; IncrustarLogo(); GenerarCodigoBarras(lcReporte.cabecera_lote.cuit_vendedor + lcReporte.comprobante[0].cabecera.informacion_comprobante.tipo_de_comprobante.ToString("00") + lcReporte.comprobante[0].cabecera.informacion_comprobante.punto_de_venta.ToString("0000") + lcReporte.comprobante[0].cabecera.informacion_comprobante.cae + lcReporte.comprobante[0].cabecera.informacion_comprobante.fecha_vencimiento_cae); AsignarParametros(lcReporte.comprobante[0].resumen.importe_total_factura); ReporteDocumento = facturaRpt; } catch (Exception ex) { ReporteDocumento = null; //MessageBox.Show(ex.Message, "Problemas al procesar el comprobante", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); throw new Microsoft.ApplicationBlocks.ExceptionManagement.Reporte.ProblemasProcesando(ex); } finally { Cursor = System.Windows.Forms.Cursors.Default; } }
public static void DeserializarLc(out FeaEntidades.Reporte.lote_comprobantes Lc, eFact_Entidades.Lote Lote) { string cadena = Cadena(Lote, true); //Deserializar ( pasar de string XML a FeaEntidades.Reporte.lote_comprobantes ) System.Text.Encoding codificador; codificador = System.Text.Encoding.GetEncoding("iso-8859-1"); byte[] a = new byte[cadena.Length]; a = codificador.GetBytes(cadena); MemoryStream ms = new MemoryStream(a); ms.Seek(0, System.IO.SeekOrigin.Begin); FeaEntidades.Reporte.lote_comprobantes lc = new FeaEntidades.Reporte.lote_comprobantes(); System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(lc.GetType()); lc = (FeaEntidades.Reporte.lote_comprobantes)x.Deserialize(ms); ms.Close(); ms = null; Lc = lc; }