public static Lfx.Types.OperationResult ShowManualFeedDialog(string printerName, string documentName) { Lui.Printing.ManualFeedDialog OFormFacturaCargaManual = new Lui.Printing.ManualFeedDialog(); OFormFacturaCargaManual.DocumentName = documentName; // Muestro el nombre de la impresora if (printerName != null && printerName.Length > 0) { OFormFacturaCargaManual.PrinterName = printerName; } else { System.Drawing.Printing.PrinterSettings CurrentSettings = new System.Drawing.Printing.PrinterSettings(); OFormFacturaCargaManual.PrinterName = CurrentSettings.PrinterName; } if (OFormFacturaCargaManual.ShowDialog() == System.Windows.Forms.DialogResult.Cancel) { return(new Lfx.Types.FailureOperationResult("Operación cancelada")); } else { return(new Lfx.Types.SuccessOperationResult()); } }
public static Lfx.Types.OperationResult ShowManualFeedDialog(string printerName, string documentName) { Lui.Printing.ManualFeedDialog OFormFacturaCargaManual = new Lui.Printing.ManualFeedDialog(); OFormFacturaCargaManual.DocumentName = documentName; // Muestro el nombre de la impresora if (printerName != null && printerName.Length > 0) { OFormFacturaCargaManual.PrinterName = printerName; } else { System.Drawing.Printing.PrinterSettings CurrentSettings = new System.Drawing.Printing.PrinterSettings(); OFormFacturaCargaManual.PrinterName = CurrentSettings.PrinterName; } if (OFormFacturaCargaManual.ShowDialog() == System.Windows.Forms.DialogResult.Cancel) return new Lfx.Types.FailureOperationResult("Operación cancelada"); else return new Lfx.Types.SuccessOperationResult(); }
public override Lfx.Types.OperationResult BeforePrint() { Lbl.Comprobantes.ComprobanteConArticulos Comprob = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos; if (Comprob.Articulos.Count >= 1 && (Comprob.Articulos[0].Cantidad < 0 || Comprob.Articulos[0].ImporteUnitario < 0)) { return(new Lfx.Types.FailureOperationResult("El primer ítem de la factura no puede ser negativo. Utilice los ítem negativos en último lugar.")); } Comprob.Cliente.Cargar(); if (Comprob.FormaDePago == null) { return(new Lfx.Types.FailureOperationResult("Por favor seleccione la forma de pago.")); } if (Comprob.Cliente == null) { return(new Lfx.Types.FailureOperationResult("Por favor seleccione un cliente.")); } if (Comprob.Tipo == null) { return(new Lfx.Types.FailureOperationResult("Por favor seleccione el tipo de comprobante.")); } if (Lbl.Sys.Config.Pais.Id == 1) { // Verificaciones especiales para Argentina if (Comprob.Tipo.EsFacturaNCoND && Comprob.Cliente.SituacionTributaria != null && Comprob.Tipo.Letra != Comprob.Cliente.LetraPredeterminada()) { Lui.Forms.YesNoDialog Pregunta = new Lui.Forms.YesNoDialog(@"La situación tributaria del cliente y el tipo de comprobante no se corresponden. Un cliente " + Comprob.Cliente.SituacionTributaria.ToString() + @" debería llevar un comprobante tipo " + Comprob.Cliente.LetraPredeterminada() + @". No debería continuar con la impresión. ¿Desea continuar de todos modos?", "Tipo de comprobante incorrecto"); Pregunta.DialogButtons = Lui.Forms.DialogButtons.YesNo; if (Pregunta.ShowDialog() == DialogResult.Cancel) { return(new Lfx.Types.FailureOperationResult("Corrija la situación tributaria del cliente o el tipo de comprobante.")); } } if (Comprob.Tipo.Letra.ToUpperInvariant() == "A") { if (Comprob.Cliente.ClaveTributaria == null || Comprob.Cliente.ClaveTributaria.EsValido() == false) { return(new Lfx.Types.FailureOperationResult("El cliente no tiene una CUIT válida. Por favor edite el cliente y escriba una CUIT válida.")); } } else if (Comprob.Tipo.Letra == "B") { //Si es factura B de más de $ 1000, debe llevar el Nº de DNI if (Comprob.Total >= 1000 && Comprob.Cliente.NumeroDocumento.Length < 5 && (Comprob.Cliente.ClaveTributaria == null || Comprob.Cliente.ClaveTributaria.EsValido() == false)) { return(new Lfx.Types.FailureOperationResult("Para Facturas B de $ 1.000 o más debe proporcionar el número de DNI/CUIT del cliente.")); } //Si es factura B de más de $ 1000, debe llevar domicilio if (Comprob.Total >= 1000 && Comprob.Cliente.Domicilio.Length < 1) { return(new Lfx.Types.FailureOperationResult("Para Facturas B de $ 1.000 o más debe proporcionar el domicilio del cliente.")); } } } if (EntradaProductos.MostrarExistencias && this.Tipo.MueveExistencias < 0 && Comprob.HayExistencias() == false) { Lui.Forms.YesNoDialog OPregunta = new Lui.Forms.YesNoDialog("Las existencias actuales no son suficientes para cubrir la operación que intenta realizar.\n¿Desea continuar de todos modos?", "No hay existencias suficientes"); OPregunta.DialogButtons = Lui.Forms.DialogButtons.YesNo; if (OPregunta.ShowDialog() == DialogResult.Cancel) { return(new Lfx.Types.FailureOperationResult("No se imprimir el comprobante por falta de existencias.")); } } if (Comprob.Cliente.Id != 999 && (Comprob.Tipo.EsFactura || Comprob.Tipo.EsNotaDebito)) { decimal SaldoCtaCte = Comprob.Cliente.CuentaCorriente.ObtenerSaldo(false); if (Comprob.FormaDePago != null && Comprob.FormaDePago.Tipo == Lbl.Pagos.TiposFormasDePago.CuentaCorriente) { decimal LimiteCredito = Comprob.Cliente.LimiteCredito; if (LimiteCredito == 0) { LimiteCredito = Lfx.Types.Parsing.ParseCurrency(Lfx.Workspace.Master.CurrentConfig.ReadGlobalSetting <string>("Sistema.Cuentas.LimiteCreditoPredet", "0")); } if (LimiteCredito != 0 && (Comprob.Total + SaldoCtaCte) > LimiteCredito) { return(new Lfx.Types.FailureOperationResult("El valor de la factura y/o el saldo en cuenta corriente supera el límite de crédito de este cliente.")); } } else { if (SaldoCtaCte < 0) { using (SaldoEnCuentaCorriente FormularioError = new SaldoEnCuentaCorriente()) { switch (FormularioError.ShowDialog()) { case DialogResult.Yes: //Corregir el problema this.EntradaFormaPago.ValueInt = 3; this.Save(); Comprob.FormaDePago.Tipo = Lbl.Pagos.TiposFormasDePago.CuentaCorriente; break; case DialogResult.No: //Continuar. No corregir el problema. break; default: //Cancelar y volver a la edición. return(new Lfx.Types.CancelOperationResult()); } } } } } if (Comprob.PV < 1) { return(new Lfx.Types.FailureOperationResult("Por favor escriba un punto de venta válido.")); } if (Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero.ContainsKey(Comprob.PV) == false) { // No existe el PV... vacío la caché antes intentar de nuevo y dar un error Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero.Clear(); if (Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero.ContainsKey(Comprob.PV) == false) { return(new Lfx.Types.FailureOperationResult("El punto de venta no existe. Si desea definir un nuevo punto de venta, utilice el menú Comprobantes -> Tablas -> Puntos de venta.")); } } Lbl.Comprobantes.PuntoDeVenta Pv = Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero[Comprob.PV]; if (Pv.Tipo == Lbl.Comprobantes.TipoPv.Talonario) { Lbl.Impresion.Impresora Impresora = Comprob.ObtenerImpresora(); if (Pv.CargaManual && (Impresora == null || Impresora.CargaPapel == Lbl.Impresion.CargasPapel.Automatica)) { Lui.Printing.ManualFeedDialog FormularioCargaManual = new Lui.Printing.ManualFeedDialog(); FormularioCargaManual.DocumentName = Comprob.Tipo.ToString() + " " + Comprob.PV.ToString("0000") + "-" + Lbl.Comprobantes.Numerador.ProximoNumero(Comprob).ToString("00000000"); // Muestro el nombre de la impresora if (Impresora != null) { FormularioCargaManual.PrinterName = Impresora.Nombre; } else { System.Drawing.Printing.PrinterSettings objPrint = new System.Drawing.Printing.PrinterSettings(); FormularioCargaManual.PrinterName = objPrint.PrinterName; } if (FormularioCargaManual.ShowDialog() == DialogResult.Cancel) { return(new Lfx.Types.CancelOperationResult()); } } } if (Comprob.Tipo.MueveExistencias != 0) { Lfx.Types.OperationResult Res = Comprob.VerificarSeries(); if (Res.Success == false) { return(Res); } } return(base.BeforePrint()); }
private void Imprimir() { Lfx.Types.OperationResult Res; if (this.ReadOnly) { Res = new Lfx.Types.SuccessOperationResult(); } else { if (this.Elemento.Existe == false) { // Si es nuevo, lo guardo sin preguntar. Res = this.Save(); } else if (this.Changed) { // Si es edición, y hay cambios, pregunto si quiere guardar using (Lui.Forms.YesNoDialog Pregunta = new Lui.Forms.YesNoDialog("Hay modificaciones sin guardar (subrayadas en color rojo). Antes de imprimir el ducumento se guardarán las modificaciones. ¿Desea continuar?", "Imprimir")) { Pregunta.DialogButtons = Lui.Forms.DialogButtons.YesNo; this.ShowChanged = true; if (Pregunta.ShowDialog() == System.Windows.Forms.DialogResult.OK) { Res = this.Save(); } else { Res = new Lfx.Types.CancelOperationResult(); } this.ShowChanged = false; } } else { // Es edición y no hay cambios... continúo Res = new Lfx.Types.SuccessOperationResult(); } } if (Res.Success) { Res = this.ControlUnico.BeforePrint(); } if (Res.Success) { Lbl.Impresion.Impresora Impresora = null; if ((System.Windows.Forms.Control.ModifierKeys & Keys.Shift) == Keys.Shift) { using (Lui.Printing.PrinterSelectionDialog FormularioSeleccionarImpresora = new Lui.Printing.PrinterSelectionDialog()) { if (FormularioSeleccionarImpresora.ShowDialog() == DialogResult.OK) { Impresora = FormularioSeleccionarImpresora.SelectedPrinter; } else { return; } } } string NombreDocumento = Elemento.ToString(); Lbl.Impresion.CargasPapel Carga = Lbl.Impresion.CargasPapel.Automatica; if (Impresora != null && Impresora.CargaPapel == Lbl.Impresion.CargasPapel.Manual) { Carga = Lbl.Impresion.CargasPapel.Manual; } else if (this.Elemento is Lbl.Comprobantes.ComprobanteConArticulos) { Lbl.Comprobantes.ComprobanteConArticulos Comprob = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos; if (Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero[Comprob.PV].Tipo == Lbl.Comprobantes.TipoPv.Fiscal) { Carga = Lbl.Impresion.CargasPapel.Automatica; } else { // El tipo de comprobante puede forzar a una carga manual Carga = Comprob.Tipo.CargaPapel; // Intento averiguar el número de comprobante, en caso de que aun no esté numerado if (Comprob.Numero == 0) { int ProximoNumero = Lbl.Comprobantes.Numerador.ProximoNumero(Comprob); NombreDocumento = NombreDocumento.Replace("00000000", ProximoNumero.ToString("00000000")); } } } if (Carga == Lbl.Impresion.CargasPapel.Manual) { using (Lui.Printing.ManualFeedDialog FormularioCargaManual = new Lui.Printing.ManualFeedDialog()) { FormularioCargaManual.DocumentName = NombreDocumento; // Muestro el nombre de la impresora if (Impresora != null) { FormularioCargaManual.PrinterName = Impresora.Nombre; } else { System.Drawing.Printing.PrinterSettings ObjPrint = new System.Drawing.Printing.PrinterSettings(); FormularioCargaManual.PrinterName = ObjPrint.PrinterName; } if (FormularioCargaManual.ShowDialog() == DialogResult.Cancel) { return; } } } if (Impresora != null && Impresora.EsVistaPrevia) { Lazaro.Impresion.ImpresorElemento ImpresorVistaPrevia = Lazaro.Impresion.Instanciador.InstanciarImpresor(this.Elemento, null); ImpresorVistaPrevia.PrintController = new System.Drawing.Printing.PreviewPrintController(); Lui.Printing.PrintPreviewForm VistaPrevia = new Lui.Printing.PrintPreviewForm(); VistaPrevia.MdiParent = this.ParentForm.MdiParent; VistaPrevia.PrintPreview.Document = ImpresorVistaPrevia; VistaPrevia.Show(); } else { Lfx.Types.OperationProgress Progreso = new Lfx.Types.OperationProgress("Imprimiendo", "El documento se está enviando a la impresora."); if (Impresora != null) { Progreso.Description = "El documento se está enviando a la impresora " + Impresora.ToString(); } Progreso.Modal = false; Progreso.Begin(); using (IDbTransaction Trans = this.Elemento.Connection.BeginTransaction()) { Lazaro.Impresion.ImpresorElemento Impresor = Lazaro.Impresion.Instanciador.InstanciarImpresor(this.Elemento, Trans); Impresor.Impresora = Impresora; try { Res = Impresor.Imprimir(); } catch (Exception ex) { Res = new Lfx.Types.FailureOperationResult(ex.Message); } Progreso.End(); if (Res.Success == false) { if (Impresor.Transaction != null) { // Puede que la transacción ya haya sido finalizada por el impresor Impresor.Transaction.Rollback(); } Lui.Forms.MessageBox.Show(Res.Message, "Error"); } else { if (Impresor.Transaction != null) { // Puede que la transacción ya haya sido finalizada por el impresor Impresor.Transaction.Commit(); } this.Elemento.Cargar(); this.FromRow(this.Elemento); this.ControlUnico.AfterPrint(); } } } } if (Res.Success == false && Res.Message != null) { Lui.Forms.MessageBox.Show(Res.Message, "Imprimir"); } }
public override Lfx.Types.OperationResult BeforePrint() { Lbl.Comprobantes.ComprobanteConArticulos Comprob = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos; if (Comprob.Articulos.Count >= 1 && (Comprob.Articulos[0].Cantidad < 0 || Comprob.Articulos[0].Unitario < 0)) return new Lfx.Types.OperationResult(false, "El primer ítem de la factura no puede ser negativo. Utilice los ítem negativos en último lugar."); Comprob.Cliente.Cargar(); if (Comprob.FormaDePago == null) return new Lfx.Types.FailureOperationResult("Por favor seleccione la forma de pago."); if (Comprob.Cliente == null) return new Lfx.Types.FailureOperationResult("Por favor seleccione un cliente."); if (Comprob.Tipo == null) return new Lfx.Types.FailureOperationResult("Por favor seleccione el tipo de comprobante."); if (Lbl.Sys.Config.Pais.Id == 1) { // Verificaciones especiales para Argentina if (Comprob.Tipo.EsFacturaNCoND && Comprob.Cliente.SituacionTributaria != null && Comprob.Tipo.Letra != Comprob.Cliente.LetraPredeterminada()) { Lui.Forms.YesNoDialog Pregunta = new Lui.Forms.YesNoDialog(@"La situación tributaria del cliente y el tipo de comprobante no se corresponden. Un cliente " + Comprob.Cliente.SituacionTributaria.ToString() + @" debería llevar un comprobante tipo " + Comprob.Cliente.LetraPredeterminada() + @". No debería continuar con la impresión. ¿Desea continuar de todos modos?", "Tipo de comprobante incorrecto"); Pregunta.DialogButtons = Lui.Forms.DialogButtons.YesNo; if (Pregunta.ShowDialog() == DialogResult.Cancel) return new Lfx.Types.FailureOperationResult("Corrija la situación tributaria del cliente o el tipo de comprobante."); } if (Comprob.Tipo.Letra.ToUpperInvariant() == "A") { if (Comprob.Cliente.ClaveTributaria == null || Comprob.Cliente.ClaveTributaria.EsValido() == false) return new Lfx.Types.FailureOperationResult("El cliente no tiene una CUIT válida. Por favor edite el cliente y escriba una CUIT válida."); } else if (Comprob.Tipo.Letra == "B") { //Si es factura B de más de $ 1000, debe llevar el Nº de DNI if (Comprob.Total >= 1000 && Comprob.Cliente.NumeroDocumento.Length < 5 && (Comprob.Cliente.ClaveTributaria == null || Comprob.Cliente.ClaveTributaria.EsValido() == false)) return new Lfx.Types.FailureOperationResult("Para Facturas B de $ 1.000 o más debe proporcionar el número de DNI/CUIT del cliente."); //Si es factura B de más de $ 1000, debe llevar domicilio if (Comprob.Total >= 1000 && Comprob.Cliente.Domicilio.Length < 1) return new Lfx.Types.FailureOperationResult("Para Facturas B de $ 1.000 o más debe proporcionar el domicilio del cliente."); } } if (EntradaProductos.ShowStock && this.Tipo.MueveExistencias < 0 && Comprob.HayExistencias() == false) { Lui.Forms.YesNoDialog OPregunta = new Lui.Forms.YesNoDialog("Las existencias actuales no son suficientes para cubrir la operación que intenta realizar.\n¿Desea continuar de todos modos?", "No hay existencias suficientes"); OPregunta.DialogButtons = Lui.Forms.DialogButtons.YesNo; if (OPregunta.ShowDialog() == DialogResult.Cancel) return new Lfx.Types.FailureOperationResult("No se imprimir el comprobante por falta de existencias."); } if (Comprob.Cliente.Id != 999 && (Comprob.Tipo.EsFactura || Comprob.Tipo.EsNotaDebito)) { decimal SaldoCtaCte = Comprob.Cliente.CuentaCorriente.ObtenerSaldo(false); if (Comprob.FormaDePago != null && Comprob.FormaDePago.Tipo == Lbl.Pagos.TiposFormasDePago.CuentaCorriente) { decimal LimiteCredito = Comprob.Cliente.LimiteCredito; if (LimiteCredito == 0) LimiteCredito = Lfx.Types.Parsing.ParseCurrency(Lfx.Workspace.Master.CurrentConfig.ReadGlobalSetting<string>("Sistema.Cuentas.LimiteCreditoPredet", "0")); if (LimiteCredito != 0 && (Comprob.Total + SaldoCtaCte) > LimiteCredito) return new Lfx.Types.FailureOperationResult("El valor de la factura y/o el saldo en cuenta corriente supera el límite de crédito de este cliente."); } else { if (SaldoCtaCte < 0) { using (SaldoEnCuentaCorriente FormularioError = new SaldoEnCuentaCorriente()) { switch (FormularioError.ShowDialog()) { case DialogResult.Yes: //Corregir el problema this.EntradaFormaPago.ValueInt = 3; this.Save(); Comprob.FormaDePago.Tipo = Lbl.Pagos.TiposFormasDePago.CuentaCorriente; break; case DialogResult.No: //Continuar. No corregir el problema. break; default: //Cancelar y volver a la edición. return new Lfx.Types.OperationResult(false); } } } } } if (Comprob.PV < 1) return new Lfx.Types.FailureOperationResult("Por favor escriba un punto de venta válido."); if (Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero.ContainsKey(Comprob.PV) == false) { // No existe el PV... vacío la caché antes intentar de nuevo y dar un error Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero.Clear(); if (Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero.ContainsKey(Comprob.PV) == false) return new Lfx.Types.FailureOperationResult("El punto de venta no existe. Si desea definir un nuevo punto de venta, utilice el menú Comprobantes -> Tablas -> Puntos de venta."); } Lbl.Comprobantes.PuntoDeVenta Pv = Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero[Comprob.PV]; if (Pv.Tipo == Lbl.Comprobantes.TipoPv.Normal) { Lbl.Impresion.Impresora Impresora = Comprob.ObtenerImpresora(); if (Pv.CargaManual && (Impresora == null || Impresora.CargaPapel == Lbl.Impresion.CargasPapel.Automatica)) { Lui.Printing.ManualFeedDialog FormularioCargaManual = new Lui.Printing.ManualFeedDialog(); FormularioCargaManual.DocumentName = Comprob.Tipo.ToString() + " " + Comprob.PV.ToString("0000") + "-" + Lbl.Comprobantes.Numerador.ProximoNumero(Comprob).ToString("00000000"); // Muestro el nombre de la impresora if (Impresora != null) { FormularioCargaManual.PrinterName = Impresora.Nombre; } else { System.Drawing.Printing.PrinterSettings objPrint = new System.Drawing.Printing.PrinterSettings(); FormularioCargaManual.PrinterName = objPrint.PrinterName; } if (FormularioCargaManual.ShowDialog() == DialogResult.Cancel) return new Lfx.Types.CancelOperationResult(); } } if (Comprob.Tipo.MueveExistencias != 0) { Lfx.Types.OperationResult Res = Comprob.VerificarSeries(); if (Res.Success == false) return Res; } return base.BeforePrint(); }
private void Imprimir() { Lfx.Types.OperationResult Res; if (this.ReadOnly) { Res = new Lfx.Types.SuccessOperationResult(); } else { if (this.Elemento.Existe == false) { // Si es nuevo, lo guardo sin preguntar. Res = this.Save(); } else if (this.Changed) { // Si es edición, y hay cambios, pregunto si quiere guardar using (Lui.Forms.YesNoDialog Pregunta = new Lui.Forms.YesNoDialog("Hay modificaciones sin guardar (subrayadas en color rojo). Antes de imprimir el ducumento se guardarán las modificaciones. ¿Desea continuar?", "Imprimir")) { Pregunta.DialogButtons = Lui.Forms.DialogButtons.YesNo; this.ShowChanged = true; if (Pregunta.ShowDialog() == System.Windows.Forms.DialogResult.OK) { Res = this.Save(); } else { Res = new Lfx.Types.CancelOperationResult(); } this.ShowChanged = false; } } else { // Es edición y no hay cambios... continúo Res = new Lfx.Types.SuccessOperationResult(); } } if (Res.Success) Res = this.ControlUnico.BeforePrint(); if (Res.Success) { Lbl.Impresion.Impresora Impresora = null; if ((System.Windows.Forms.Control.ModifierKeys & Keys.Shift) == Keys.Shift) { using (Lui.Printing.PrinterSelectionDialog FormularioSeleccionarImpresora = new Lui.Printing.PrinterSelectionDialog()) { if (FormularioSeleccionarImpresora.ShowDialog() == DialogResult.OK) { Impresora = FormularioSeleccionarImpresora.SelectedPrinter; } else { return; } } } string NombreDocumento = Elemento.ToString(); Lbl.Impresion.CargasPapel Carga = Lbl.Impresion.CargasPapel.Automatica; if (Impresora != null && Impresora.CargaPapel == Lbl.Impresion.CargasPapel.Manual) { Carga = Lbl.Impresion.CargasPapel.Manual; } else if (this.Elemento is Lbl.Comprobantes.ComprobanteConArticulos) { Lbl.Comprobantes.ComprobanteConArticulos Comprob = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos; if (Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero[Comprob.PV].Tipo == Lbl.Comprobantes.TipoPv.Fiscal) { Carga = Lbl.Impresion.CargasPapel.Automatica; } else { // El tipo de comprobante puede forzar a una carga manual Carga = Comprob.Tipo.CargaPapel; // Intento averiguar el número de comprobante, en caso de que aun no esté numerado if (Comprob.Numero == 0) { int ProximoNumero = Lbl.Comprobantes.Numerador.ProximoNumero(Comprob); NombreDocumento = NombreDocumento.Replace("00000000", ProximoNumero.ToString("00000000")); } } } if (Carga == Lbl.Impresion.CargasPapel.Manual) { using (Lui.Printing.ManualFeedDialog FormularioCargaManual = new Lui.Printing.ManualFeedDialog()) { FormularioCargaManual.DocumentName = NombreDocumento; // Muestro el nombre de la impresora if (Impresora != null) { FormularioCargaManual.PrinterName = Impresora.Nombre; } else { System.Drawing.Printing.PrinterSettings ObjPrint = new System.Drawing.Printing.PrinterSettings(); FormularioCargaManual.PrinterName = ObjPrint.PrinterName; } if (FormularioCargaManual.ShowDialog() == DialogResult.Cancel) return; } } if (Impresora != null && Impresora.EsVistaPrevia) { Lazaro.Impresion.ImpresorElemento ImpresorVistaPrevia = Lazaro.Impresion.Instanciador.InstanciarImpresor(this.Elemento, null); ImpresorVistaPrevia.PrintController = new System.Drawing.Printing.PreviewPrintController(); Lui.Printing.PrintPreviewForm VistaPrevia = new Lui.Printing.PrintPreviewForm(); VistaPrevia.MdiParent = this.ParentForm.MdiParent; VistaPrevia.PrintPreview.Document = ImpresorVistaPrevia; VistaPrevia.Show(); } else { Lfx.Types.OperationProgress Progreso = new Lfx.Types.OperationProgress("Imprimiendo", "El documento se está enviando a la impresora."); if (Impresora != null) Progreso.Description = "El documento se está enviando a la impresora " + Impresora.ToString(); Progreso.Modal = false; Progreso.Begin(); using (IDbTransaction Trans = this.Elemento.Connection.BeginTransaction()) { Lazaro.Impresion.ImpresorElemento Impresor = Lazaro.Impresion.Instanciador.InstanciarImpresor(this.Elemento, Trans); Impresor.Impresora = Impresora; try { Res = Impresor.Imprimir(); } catch (Exception ex) { Res = new Lfx.Types.FailureOperationResult(ex.Message); } Progreso.End(); if (Res.Success == false) { if (Impresor.Transaction != null) // Puede que la transacción ya haya sido finalizada por el impresor Impresor.Transaction.Rollback(); Lui.Forms.MessageBox.Show(Res.Message, "Error"); } else { if (Impresor.Transaction != null) // Puede que la transacción ya haya sido finalizada por el impresor Impresor.Transaction.Commit(); this.Elemento.Cargar(); this.FromRow(this.Elemento); this.ControlUnico.AfterPrint(); } } } } if (Res.Success == false && Res.Message != null) { Lui.Forms.MessageBox.Show(Res.Message, "Imprimir"); } }