public void generaVoucherTesoreria()
        {
            UltimoNumeroRegistro();
            actulizarCursor();

            decimal vmtcambio = VariablesPublicas.StringtoDecimal(txtCambio.Text);

            // Variables de Cabecera
            tb_co_MovimientosBL BL = new tb_co_MovimientosBL();
            tb_co_Movimientos BE = new tb_co_Movimientos();

            // Variables para Detalle
            tb_co_Movimientos.Item Detalle = new tb_co_Movimientos.Item();
            List<tb_co_Movimientos.Item> ListaItems = new List<tb_co_Movimientos.Item>();

            #region **ingreso movimiento cabecera***
            //caso Cobranzas/pagos - automatizacion
            string activo = "0"; //Activo
            //string anulad = "9"; //Anulado
            string xMoneda = Equivalencias.Left(cboMoneda.SelectedValue.ToString(), 1);

            BE.perianio = VariablesPublicas.perianio;
            BE.perimes = VariablesPublicas.PADL(fEmision.Value.Month.ToString().Trim(), 2, "0"); // VariablesPublicas.PADL(txtMes.Text.Trim(), 2, "0");
            BE.moduloid = VariablesDominio.VarTesoreria.Moduloid;
            BE.local = VariablesDominio.VarTesoreria.Local;
            BE.diarioid = VariablesPublicas.PADL(txtCodsubdiario.Text, 4, "0");
            BE.asiento = ""; //VariablesPublicas.PADL(txtAsiento.Text.Trim(), 6, "0");
            BE.tipooperacion = gettipoper() == "4" ? "2" : "1";
            BE.tipocomprobante = "2"; //2-Normal
            BE.tipomovimiento = BE.tipooperacion == "1" ? "01" : "11"; //01-ingresos a caja, 11-egresos a caja
            BE.cuentaid = txtCuentaletra.Text;

            //Puede ser null
            if (cboFpago.Text.Length > 0)
            { BE.mediopago = cboFpago.SelectedValue.ToString(); }
            else
            { BE.mediopago = ""; }

            BE.numdocpago = txtNumpago.Text;
            //Puede ser null
            //if (cboBanco.Text.Length > 0)
            //{ BE.bancoid = cboBanco.SelectedValue.ToString(); }
            //else
            //{ BE.bancoid = ""; }
            BE.bancoid = "";
            BE.fechregistro = Convert.ToDateTime(fEmision.Text.Trim());
            BE.fechdoc = Convert.ToDateTime(fEmision.Text.Trim());
            BE.tipcamuso = "V";
            BE.tipcamb = Convert.ToDecimal(txtCambio.Text.Trim());
            BE.glosa = txtGlosa.Text;
            BE.moneda = (rbDolares.Checked ? "2" : "1");
            //Puede ser null
            //if (cboFefectivo.Text.Length > 0)
            //{ BE.flujoefectivo = cboFefectivo.SelectedValue.ToString(); }
            //else
            //{ BE.flujoefectivo = ""; }
            BE.flujoefectivo = "";
            BE.debesoles = sumadebesoles;
            BE.debedolares = sumadebedolares;
            BE.habersoles = sumahabersoles;
            BE.haberdolares = sumahaberdolares;

            BE.difcambio = false;
            BE.redondeo = false;

            BE.status = activo;

            BE.usuar = VariablesPublicas.Usuar;
            #endregion

            #region ****ingreso movimiento detalle***

            int item = 0;
            foreach (DataRow fila in DetFacturacion.Rows)
            {
                Detalle = new tb_co_Movimientos.Item();

                item++;

                Detalle.perianio = VariablesPublicas.perianio;
                Detalle.perimes = BE.perimes;
                Detalle.moduloid = BE.moduloid;
                Detalle.local = BE.local;
                Detalle.diarioid = BE.diarioid;
                Detalle.asiento = nAsiento.PadLeft(6, '0'); // BE.asiento;
                Detalle.asientoitems = item.ToString().PadLeft(5, '0');
                Detalle.cuentaid = fila["cuentaid"].ToString();
                Detalle.cuentaorigen = fila["cuentaorigen"].ToString(); ;
                Detalle.cuentaname = fila["cuentaname"].ToString();
                Detalle.glosa = txtGlosa.Text.Trim().ToUpper().ToString();

                if (Equivalencias.Left(Detalle.cuentaid.ToString(), 1) == "9")
                { Detalle.cencosid = fila["cencosid"].ToString(); }
                else { Detalle.cencosid = ""; }

                Detalle.debehaber = fila["debehaber"].ToString();
                Detalle.ctacte = fila["ctacte"].ToString();
                Detalle.nmruc = fila["nmruc"].ToString();
                Detalle.ctactename = fila["ctactename"].ToString();
                Detalle.tipdoc = fila["tipdoc"].ToString();
                Detalle.serdoc = fila["serdoc"].ToString();
                Detalle.numdoc = fila["numdoc"].ToString();
                Detalle.fechregistro = Convert.ToDateTime(BE.fechregistro);

                if (object.ReferenceEquals(fila["fechdoc"], DBNull.Value))
                {
                    Detalle.fechdoc = Convert.ToDateTime(fEmision.Text.Trim());
                }
                else
                {
                    Detalle.fechdoc = Convert.ToDateTime(fila["fechdoc"].ToString());
                }

                if (object.ReferenceEquals(fila["fechvenc"], DBNull.Value))
                {
                    Detalle.fechvenc = Convert.ToDateTime(fEmision.Text.Trim());
                }
                else
                {
                    Detalle.fechvenc = Convert.ToDateTime(fila["fechvenc"].ToString());
                }

                Detalle.tipref = fila["tipref"].ToString();
                Detalle.serref = fila["serref"].ToString();
                Detalle.numref = fila["numref"].ToString();

                try { Detalle.fechref = Convert.ToDateTime(fila["fechref"].ToString()); }
                catch { Detalle.fechref = Convert.ToDateTime("01/01/1900"); }

                Detalle.moneda = fila["moneda"].ToString();
                Detalle.importe = Convert.ToDecimal(fila["importe"].ToString());
                Detalle.importecambio = Convert.ToDecimal(fila["importecambio"].ToString());
                Detalle.soles = Convert.ToDecimal(fila["soles"].ToString());
                Detalle.dolares = Convert.ToDecimal(fila["dolares"].ToString());

                if (Convert.ToDecimal(fila["tipcamb"]) > 0)
                {
                    Detalle.tipcamb = Convert.ToDecimal(fila["tipcamb"].ToString());
                }
                else
                {
                    Detalle.tipcamb = Convert.ToDecimal(txtCambio.Text.Trim());
                }

                Detalle.tipcambuso = BE.tipcamuso;

                try { Detalle.tipcambfech = Convert.ToDateTime(fila["tipcambfech"].ToString()); }
                catch { Detalle.tipcambfech = Convert.ToDateTime(fEmision.Text.Trim()); }

                Detalle.afectoretencion = false;
                Detalle.afectopercepcion = false;
                Detalle.percepcionid = fila["percepcionid"].ToString();
                Detalle.serperc = fila["serperc"].ToString();
                Detalle.numperc = fila["numperc"].ToString();
                Detalle.numdocpago = (rbUnaletra.Checked ? txtNumpago.Text : xNumLetra);
                Detalle.bancoid = BE.bancoid;
                Detalle.pagocta = fila["pagocta"].ToString();
                Detalle.mediopago = BE.mediopago;
                Detalle.fechpago = Convert.ToDateTime(fEmision.Text.Trim());
                if (Equivalencias.Left(Detalle.cuentaid.ToString(), 2) == "10")
                { Detalle.flujoefectivo = BE.flujoefectivo; }
                else { Detalle.flujoefectivo = ""; }
                Detalle.asientovinculante = fila["asientovinculante"].ToString();
                Detalle.cancelacionvinculante = fila["cancelacionvinculante"].ToString();
                Detalle.productid = fila["productid"].ToString();
                Detalle.pedidoid = fila["pedidoid"].ToString();
                Detalle.tipOp = fila["tip_op"].ToString();
                Detalle.serOp = fila["ser_op"].ToString();
                Detalle.numOp = fila["num_op"].ToString();
                Detalle.tipooperacion = BE.tipooperacion;
                Detalle.tipocomprobante = BE.tipocomprobante;
                Detalle.tipomovimiento = BE.tipomovimiento;
                Detalle.statusdestino = fila["statusdestino"].ToString();
                Detalle.status = activo;
                Detalle.usuar = VariablesPublicas.Usuar;

                ListaItems.Add(Detalle);
            }
            BE.ListaItems = ListaItems;
            #endregion

            #region ** Save BD
            //string nasiento = ""; // nlastreg = "";
            string xcodmes = fEmision.Value.Month.ToString().Trim();
            xcodmes = VariablesPublicas.PADL(xcodmes, 2, "0");
            //nasiento = ocapa.CaeSoft_GetAllMaximoMovimientoContable(cac3g00.Rows[0]["ccia_3"], cac3g00.Rows[0]["cperiodo_3"], txtcodsubdiario.Text, xcodmes);
            //tmptabla = ocapa.cac3p00_consulta(GlobalVars.GetInstance.Company, GlobalVars.GetInstance.Periodo, txtcodsubdiario.Text, xcodmes, nlastreg, "", "");
            //if (ocapa.sql_error.Length > 0)
            //{
            //    frmclass.ShowError(ocapa.sql_error, this);
            //    return;
            //}
            dynamic nvmindice = 0;
            //while (tmptabla.Rows.Count > 0)
            //{
            //    //nlastreg = ocapa.CaeSoft_GetAllMaximoMovimientoContable(cac3g00.Rows[0]["ccia_3"], cac3g00.Rows[0]["cperiodo_3"], txtcodsubdiario.Text, xcodmes);
            //    //tmptabla = ocapa.cac3p00_consulta(GlobalVars.GetInstance.Company, GlobalVars.GetInstance.Periodo, txtcodsubdiario.Text, xcodmes, nlastreg, "", "");
            //    nvmindice = nvmindice + 1;
            //    if (nvmindice > 999999)
            //    {
            //        XtraMessageBox.Show("Error letal se alcanzó el tope de registro para este tipo de vouchers... Consulta a Sistemas", "");
            //        return;
            //    }
            //}
            try
            {
                if (BL.Insert(VariablesPublicas.EmpresaID.ToString(), BE))
                {
                    //seguridadlog();
                    //// Impresion
                    //ReportesContabilidad.Frm_ReporteVouchers frm = new ReportesContabilidad.Frm_ReporteVouchers();
                    //frm._tipComprobante = txtCodsubdiario.Text;
                    //frm._xModulo = BE.moduloid;
                    //frm._xLocal = BE.local;
                    //frm._nroComprobante = BE.perimes + nAsiento;//xcodmes + nlastreg;
                    //frm._tipoOperacion = BE.tipooperacion; //cac3g00.Rows[0]["tasien_3"].ToString();
                    //frm.Owner = this;
                    //frm.ShowInTaskbar = false;
                    //frm.ShowDialog();
                    //U_GeneraPendientes();
                }
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            #endregion
        }
        public void generaVoucherRetencion(bool nopideimpresion)
        {
            if (u_n_opsel == 1)
            {
                UltimoNumeroRegistro();
            }
            ValidarCursor();
            InsertRetenciones();

            decimal vmtcambio = VariablesPublicas.StringtoDecimal(txtTipocambio.Text);

            // Variables de Cabecera
            tb_co_MovimientosBL BL = new tb_co_MovimientosBL();
            tb_co_Movimientos BE = new tb_co_Movimientos();

            // Variables para Detalle
            tb_co_Movimientos.Item Detalle = new tb_co_Movimientos.Item();
            List<tb_co_Movimientos.Item> ListaItems = new List<tb_co_Movimientos.Item>();

            #region **ingreso movimiento cabecera***
            //caso Cobranzas/pagos - automatizacion
            string activo = "0"; //Activo
            string anulad = "9"; //Anulado
            string xMoneda = Equivalencias.Left(cboMoneda.SelectedValue.ToString(), 1);

            BE.perianio = VariablesPublicas.perianio;
            BE.perimes = VariablesPublicas.PADL(txtMes.Text.Trim(), 2, "0");
            BE.moduloid = VariablesDominio.VarTesoreria.Moduloid;
            BE.local = VariablesDominio.VarTesoreria.Local;
            BE.diarioid = cboSubdiario.SelectedValue.ToString();
            BE.asiento = VariablesPublicas.PADL(txtAsiento.Text.Trim(), 6, "0");
            BE.tipooperacion = "2";
            BE.tipocomprobante = "2"; //2-Normal
            BE.tipomovimiento = (Equivalencias.Left(txtCuentaid.Text, 1) == "4" ? "" : "11"); //(BE.tipooperacion == "1" ? "01" : "11"); //01-ingresos a caja, 11-egresos a caja
            BE.cuentaid = txtCuentaid.Text;

            //Puede ser null
            if (cboMedioPago.Text.Length > 0)
            { BE.mediopago = cboMedioPago.SelectedValue.ToString(); }
            else
            { BE.mediopago = ""; }

            //BE.numdocpago = txtNumOpe.Text;
            BE.bancoid = xBanco;
            BE.fechregistro = Convert.ToDateTime(fRegistro.Text.Trim());
            BE.fechdoc = Convert.ToDateTime(fRegistro.Text.Trim());
            BE.tipcamuso = "V";
            BE.tipcamb = Convert.ToDecimal(txtTipocambio.Text.Trim());
            BE.glosa = txtGlosa.Text;
            BE.moneda = cboMoneda.SelectedValue.ToString();
            //Puede ser null
            //if (cboFlujoefectivo.Text.Length > 0)
            //{ BE.flujoefectivo = cboFlujoefectivo.SelectedValue.ToString(); }
            //else
            //{ BE.flujoefectivo = ""; }
            BE.debesoles = sumadebesoles;
            BE.debedolares = sumadebedolares;
            BE.habersoles = sumahabersoles;
            BE.haberdolares = sumahaberdolares;

            BE.difcambio = false;
            BE.redondeo = false;

            if (chkActivo.Checked == true)
            {
                BE.status = activo;
            }
            if (chkActivo.Checked == false)
            {
                BE.status = anulad;
            }

            BE.usuar = VariablesPublicas.Usuar;
            #endregion

            #region ****ingreso movimiento detalle***

            int item = 0;
            foreach (DataRow fila in DetMovimiento.Rows)
            {
                Detalle = new tb_co_Movimientos.Item();

                item++;

                Detalle.perianio = VariablesPublicas.perianio;
                Detalle.perimes = BE.perimes;
                Detalle.moduloid = BE.moduloid;
                Detalle.local = BE.local;
                Detalle.diarioid = BE.diarioid;
                Detalle.asiento = txtAsiento.Text.PadLeft(6, '0'); // BE.asiento;
                Detalle.asientoitems = item.ToString().PadLeft(5, '0');
                Detalle.cuentaid = fila["cuentaid"].ToString();
                Detalle.cuentaorigen = fila["cuentaorigen"].ToString(); ;
                Detalle.cuentaname = fila["cuentaname"].ToString();
                Detalle.glosa = txtGlosa.Text.Trim().ToUpper().ToString();

                if (Equivalencias.Left(Detalle.cuentaid.ToString(), 1) == "9")
                { Detalle.cencosid = fila["cencosid"].ToString(); }
                else { Detalle.cencosid = ""; }

                Detalle.debehaber = fila["debehaber"].ToString();
                Detalle.ctacte = xctacte; //fila["ctacte"].ToString();
                Detalle.nmruc = fila["nmruc"].ToString();
                Detalle.ctactename = fila["ctactename"].ToString();
                Detalle.tipdoc = fila["tipdoc"].ToString();
                Detalle.serdoc = fila["serdoc"].ToString();
                Detalle.numdoc = fila["numdoc"].ToString();
                Detalle.fechregistro = Convert.ToDateTime(BE.fechregistro);

                if (object.ReferenceEquals(fila["fechdoc"], DBNull.Value))
                {
                    Detalle.fechdoc = Convert.ToDateTime(fRegistro.Text.Trim());
                }
                else
                {
                    Detalle.fechdoc = Convert.ToDateTime(fila["fechdoc"].ToString());
                }

                if (object.ReferenceEquals(fila["fechvenc"], DBNull.Value))
                {
                    Detalle.fechvenc = Convert.ToDateTime(fRegistro.Text.Trim());
                }
                else
                {
                    Detalle.fechvenc = Convert.ToDateTime(fila["fechvenc"].ToString());
                }

                Detalle.tipref = fila["tipref"].ToString();
                Detalle.serref = fila["serref"].ToString();
                Detalle.numref = fila["numref"].ToString();

                try { Detalle.fechref = Convert.ToDateTime(fila["fechref"].ToString()); }
                catch { Detalle.fechref = Convert.ToDateTime("01/01/1900"); }

                Detalle.moneda = fila["moneda"].ToString();
                Detalle.importe = Convert.ToDecimal(fila["importe"].ToString());
                Detalle.importecambio = Convert.ToDecimal(fila["importecambio"].ToString());
                Detalle.soles = Convert.ToDecimal(fila["soles"].ToString());
                Detalle.dolares = Convert.ToDecimal(fila["dolares"].ToString());

                if (Convert.ToDecimal(fila["tipcamb"]) > 0)
                {
                    Detalle.tipcamb = Convert.ToDecimal(fila["tipcamb"].ToString());
                }
                else
                {
                    Detalle.tipcamb = Convert.ToDecimal(txtTipocambio.Text.Trim());
                }

                Detalle.tipcambuso = BE.tipcamuso;

                try { Detalle.tipcambfech = Convert.ToDateTime(fila["tipcambfech"].ToString()); }
                catch { Detalle.tipcambfech = Convert.ToDateTime(fRegistro.Text.Trim()); }

                Detalle.afectoretencion = false;
                Detalle.afectopercepcion = false;
                Detalle.percepcionid = fila["percepcionid"].ToString();
                Detalle.serperc = fila["serperc"].ToString();
                Detalle.numperc = fila["numperc"].ToString();
                //Detalle.numdocpago = txtNumOpe.Text;
                Detalle.bancoid = BE.bancoid;
                Detalle.pagocta = fila["pagocta"].ToString();
                Detalle.mediopago = BE.mediopago;
                Detalle.fechpago = Convert.ToDateTime(fRegistro.Text.Trim());
                if (Equivalencias.Left(Detalle.cuentaid.ToString(), 2) == "10")
                { Detalle.flujoefectivo = BE.flujoefectivo; }
                else { Detalle.flujoefectivo = ""; }
                Detalle.asientovinculante = fila["asientovinculante"].ToString();
                Detalle.cancelacionvinculante = fila["cancelacionvinculante"].ToString();
                Detalle.productid = fila["productid"].ToString();
                Detalle.pedidoid = fila["pedidoid"].ToString();
                Detalle.tipOp = fila["tip_op"].ToString();
                Detalle.serOp = fila["ser_op"].ToString();
                Detalle.numOp = fila["num_op"].ToString();
                Detalle.tipooperacion = BE.tipooperacion;
                Detalle.tipocomprobante = BE.tipocomprobante;
                Detalle.tipomovimiento = BE.tipomovimiento;
                Detalle.statusdestino = fila["statusdestino"].ToString();
                if (chkActivo.Checked == true)
                {
                    Detalle.status = activo;
                }
                if (chkActivo.Checked == false)
                {
                    Detalle.status = anulad;
                }
                Detalle.usuar = VariablesPublicas.Usuar;

                ListaItems.Add(Detalle);
            }
            BE.ListaItems = ListaItems;
            #endregion

            #region ** Save BD
            //string nasiento = ""; // nlastreg = "";
            string xcodmes = fRegistro.Value.Month.ToString().Trim();
            xcodmes = VariablesPublicas.PADL(xcodmes, 2, "0");
            //nasiento = ocapa.CaeSoft_GetAllMaximoMovimientoContable(cac3g00.Rows[0]["ccia_3"], cac3g00.Rows[0]["cperiodo_3"], txtcodsubdiario.Text, xcodmes);
            //tmptabla = ocapa.cac3p00_consulta(GlobalVars.GetInstance.Company, GlobalVars.GetInstance.Periodo, txtcodsubdiario.Text, xcodmes, nlastreg, "", "");
            //if (ocapa.sql_error.Length > 0)
            //{
            //    ERP_CAESOFT_FORMS.frmclass.ShowError(ocapa.sql_error, this);
            //    return;
            //}
            dynamic nvmindice = 0;
            //while (tmptabla.Rows.Count > 0)
            //{
            //    //nlastreg = ocapa.CaeSoft_GetAllMaximoMovimientoContable(cac3g00.Rows[0]["ccia_3"], cac3g00.Rows[0]["cperiodo_3"], txtcodsubdiario.Text, xcodmes);
            //    //tmptabla = ocapa.cac3p00_consulta(GlobalVars.GetInstance.Company, GlobalVars.GetInstance.Periodo, txtcodsubdiario.Text, xcodmes, nlastreg, "", "");
            //    nvmindice = nvmindice + 1;
            //    if (nvmindice > 999999)
            //    {
            //        MessageBox.Show("Error letal se alcanzó el tope de registro para este tipo de vouchers... Consulta a Sistemas", "");
            //        return;
            //    }
            //}
            try
            {
                if (u_n_opsel == 1)  //Si es nuevo
                {
                    if (BL.Insert(VariablesPublicas.EmpresaID.ToString(), BE))
                    {
                        if (!nopideimpresion)
                        {
                            string message = "Desea Imprimir Documento Nro: " + cboSubdiario.SelectedValue.ToString() + "/" + txtMes.Text + "-" + txtAsiento.Text + " ...?";
                            string caption = "Impresión de Comprobante de Retención";
                            MessageBoxButtons buttons = MessageBoxButtons.YesNo;
                            DialogResult result;

                            // Muestra el cuadro de mensaje.
                            result = DevExpress.XtraEditors.XtraMessageBox.Show(this, message, caption, buttons, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                            if (result == DialogResult.Yes)
                            {
                                //Accion(6, "", xnum);
                                //impresionCRetencion();
                                //llamarformimpresion();
                            }
                        }
                        tmptablacab = null;
                        tmptabladet = null;
                        letradet = null;
                        U_CancelarEdicion(0);
                    }
                }
                else if (u_n_opsel == 2)  //Si NO es nuevo
                {
                    if (BL.Update(VariablesPublicas.EmpresaID.ToString(), BE))
                    {
                        seguridadlog();
                        if (!nopideimpresion)
                        {
                            string message = "Desea Imprimir Documento Nro: " + cboSubdiario.SelectedValue.ToString() + "/" + txtMes.Text + "-" + txtAsiento.Text + " ...?";
                            string caption = "Impresión de Comprobante de Retención";
                            MessageBoxButtons buttons = MessageBoxButtons.YesNo;
                            DialogResult result;

                            // Muestra el cuadro de mensaje.
                            result = DevExpress.XtraEditors.XtraMessageBox.Show(this, message, caption, buttons, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                            if (result == DialogResult.Yes)
                            {
                                //Accion(6, "", xnum);
                                //impresionCRetencion();
                                //llamarformimpresion();
                            }
                        }
                        tmptablacab = null;
                        tmptabladet = null;
                        letradet = null;
                        U_CancelarEdicion(0);
                    }
                }
            }
            catch (Exception ex)
            {
                DevExpress.XtraEditors.XtraMessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            #endregion

            InsertRetencionesLetras();
        }