protected void ejecutarReconversion_button_Click(object sender, EventArgs e)
        {
            bool ejecutarContablidad = this.proceso_contabilidad_RadioButton.Checked;
            bool ejecutarContablidad_asientosAjuste          = this.proceso_contabilidad_asientos_RadioButton.Checked;
            bool ejecutarContablidad_saldosIniciales         = this.proceso_contabilidad_saldosIniciales_RadioButton.Checked;
            bool ejecutarContablidad_saldosIniciales_cuadrar = this.proceso_contabilidad_saldosIniciales_cuadrar_RadioButton.Checked;
            bool ejecutarBancos = this.proceso_bancos_RadioButton.Checked;
            //bool ejecutarNomina = this.proceso_nomina_RadioButton.Checked;
            //bool ejecutarCajaChica = this.proceso_cajaChica_RadioButton.Checked;
            bool ejecutarActivosFijos = this.proceso_activosFijos_RadioButton.Checked;

            if (!ejecutarContablidad && !ejecutarContablidad_asientosAjuste && !ejecutarContablidad_saldosIniciales && !ejecutarBancos &&
                !ejecutarContablidad_saldosIniciales_cuadrar && !ejecutarActivosFijos)
            {
                string errorMessage = "Ud. debe seleccionar un proceso a ejecutar.<br />";

                this.ErrMessage_Span.InnerHtml = errorMessage;
                this.ErrMessage_Span.Visible   = true;

                return;
            }

            // recuperamos los parámetros de ejecución del proceso: año, cantidad de dígitos, moneda y cia ...
            parametrosProc parametrosProc = (parametrosProc)Session["parametrosProc"];

            dbContab_Contab_Entities context = new dbContab_Contab_Entities();

            if (ejecutarContablidad)
            {
                string sDivisor = parametrosProc.divisor.ToString();
                bool   error    = false;
                string message  = "";

                contabilidad(context, sDivisor, parametrosProc.moneda, parametrosProc.ano, parametrosProc.ciaContabSeleccionada, out error, out message);

                if (error)
                {
                    this.ErrMessage_Span.InnerHtml = message;
                    this.ErrMessage_Span.Visible   = true;
                }
                else
                {
                    this.InfoMessage_Span.InnerHtml = message;
                    this.InfoMessage_Span.Visible   = true;
                }

                return;
            }

            if (ejecutarContablidad_saldosIniciales)
            {
                string sDivisor = parametrosProc.divisor.ToString();
                bool   error    = false;
                string message  = "";

                contabilidad_saldosInicialesAjuste(context, sDivisor, parametrosProc.moneda, parametrosProc.ano, parametrosProc.ciaContabSeleccionada, out error, out message);

                if (error)
                {
                    this.ErrMessage_Span.InnerHtml = message;
                    this.ErrMessage_Span.Visible   = true;
                }
                else
                {
                    this.InfoMessage_Span.InnerHtml = message;
                    this.InfoMessage_Span.Visible   = true;
                }

                return;
            }

            if (ejecutarContablidad_saldosIniciales_cuadrar)
            {
                bool   error   = false;
                string message = "";

                contabilidad_saldosInicialesCuadrar(context, parametrosProc.cuentaContableID, parametrosProc.moneda, parametrosProc.ano, parametrosProc.ciaContabSeleccionada, out error, out message);

                if (error)
                {
                    this.ErrMessage_Span.InnerHtml = message;
                    this.ErrMessage_Span.Visible   = true;
                }
                else
                {
                    this.InfoMessage_Span.InnerHtml = message;
                    this.InfoMessage_Span.Visible   = true;
                }

                return;
            }

            if (ejecutarContablidad_asientosAjuste)
            {
                bool   error   = false;
                string message = "";

                contabilidad_asientosAjuste(context, parametrosProc.cuentaContableID, parametrosProc.moneda, parametrosProc.ano, parametrosProc.ciaContabSeleccionada, out error, out message);

                if (error)
                {
                    this.ErrMessage_Span.InnerHtml = message;
                    this.ErrMessage_Span.Visible   = true;
                }
                else
                {
                    this.InfoMessage_Span.InnerHtml = message;
                    this.InfoMessage_Span.Visible   = true;
                }

                return;
            }

            if (ejecutarBancos)
            {
                bool   error    = false;
                string message  = "";
                string sDivisor = parametrosProc.divisor.ToString();

                bancos(context, sDivisor, parametrosProc.moneda, parametrosProc.ano, parametrosProc.ciaContabSeleccionada, out error, out message);

                if (error)
                {
                    this.ErrMessage_Span.InnerHtml = message;
                    this.ErrMessage_Span.Visible   = true;
                }
                else
                {
                    this.InfoMessage_Span.InnerHtml = message;
                    this.InfoMessage_Span.Visible   = true;
                }

                return;
            }

            //if (ejecutarCajaChica)
            //{
            //    return;
            //}

            //if (ejecutarNomina)
            //{
            //    return;
            //}

            if (ejecutarActivosFijos)
            {
                bool   error    = false;
                string message  = "";
                string sDivisor = parametrosProc.divisor.ToString();

                activosFijos(context, sDivisor, parametrosProc.moneda, parametrosProc.ano, parametrosProc.ciaContabSeleccionada, out error, out message);

                if (error)
                {
                    this.ErrMessage_Span.InnerHtml = message;
                    this.ErrMessage_Span.Visible   = true;
                }
                else
                {
                    this.InfoMessage_Span.InnerHtml = message;
                    this.InfoMessage_Span.Visible   = true;
                }

                return;
            }
        }
        private void RefreshAndBindInfo()
        {
            if (!User.Identity.IsAuthenticated)
            {
                FormsAuthentication.SignOut();
                return;
            }

            if (Session["reconversionMonetaria.cantidadDigitos"] == null ||
                Session["reconversionMonetaria.ano"] == null ||
                Session["reconversionMonetaria.cuentaContableID"] == null)
            {
                string errorMessage = "Aparentemente, Ud. no ha indicado un filtro (parámetros de ejecución) aún; o lo ha indicado de manera <em>incompleta</em>.<br />" +
                                      "Ud. debe abrir la página que muestra el filtro e indicar valores para todos los parámetros de ejecución de este proceso.";

                this.ErrMessage_Span.InnerHtml = errorMessage;
                this.ErrMessage_Span.Visible   = true;

                return;
            }

            dbContab_Contab_Entities context = new dbContab_Contab_Entities();

            // leemos la cuenta contable indicada por el usuaio
            int             cuentaContableID = Convert.ToInt32(Session["reconversionMonetaria.cuentaContableID"]);
            CuentasContable cuentaContable   = context.CuentasContables.Where(c => c.ID == cuentaContableID).FirstOrDefault();

            if (cuentaContable == null)
            {
                string errorMessage = "Error: no hemos podido leer la cuenta contable indicada en el filtro.</em>.<br />" +
                                      "Por favor revise. La cuenta contable indicada debe existir en la tabla de cuentas contables.";

                this.ErrMessage_Span.InnerHtml = errorMessage;
                this.ErrMessage_Span.Visible   = true;

                return;
            }

            // debe existir una moneda 'nacional'; solo para ésta haremos la reconversión ...
            var monedaNacional_array = context.Monedas.Where(m => m.NacionalFlag);

            if (monedaNacional_array == null)
            {
                string errorMessage = "Error: aparentemente, no se ha definido una de las monedas como <em>nacional</em>.<br />" +
                                      "Ud. debe revisar la tabla de monedas y asegurarse que una de ellas sea definida como <em>nacional</em>.";

                this.ErrMessage_Span.InnerHtml = errorMessage;
                this.ErrMessage_Span.Visible   = true;

                return;
            }

            if (monedaNacional_array.Count() > 1)
            {
                string errorMessage = "Error: aparentemente, más de una moneda ha sido definida del tipo <em>nacional</em>.<br />" +
                                      "Ud. debe revisar la tabla de monedas y asegurarse que <b>solo una de ellas</b> sea definida como <em>nacional</em>.";

                this.ErrMessage_Span.InnerHtml = errorMessage;
                this.ErrMessage_Span.Visible   = true;

                return;
            }

            Moneda monedaNacional = monedaNacional_array.First();

            var cia = context.tCiaSeleccionadas.Where(s => s.UsuarioLS == User.Identity.Name).
                      Select(c => new { ciaContabSeleccionada = c.Compania.Numero }).
                      FirstOrDefault();

            short ano = Convert.ToInt16(Session["reconversionMonetaria.ano"]);

            // leemos los asientos del año, para asegurarnos que no hay asientos descuadrados ...
            string sSqlQueryString =
                "SELECT Count(*) As partidas " +
                "FROM dAsientos d Inner Join Asientos a On d.NumeroAutomatico = a.NumeroAutomatico " +
                "Where a.AnoFiscal = {0} And a.Moneda = {1} And a.Cia = {2} " +
                "Group By d.NumeroAutomatico " +
                "Having Sum(d.Debe) <> Sum(d.Haber)";

            List <int> asientosDescuadrados = context.ExecuteStoreQuery <int>(sSqlQueryString, ano, monedaNacional.Moneda1, cia.ciaContabSeleccionada).ToList();

            if (asientosDescuadrados.Count() > 0)
            {
                // nota: esta situación no aborta el proceso, pues debe ser el resultado del 1er. paso de la reconversión ...
                string errorMessage = "Advertencia: existen asientos descuadrados para el año a reconvertir.<br />" +
                                      "Ud. debe continuar con el próximo paso y ajustarlos, <b>solo</b> si estos asientos son producto del 1er. paso de la reconversión.";

                this.ErrMessage_Span.InnerHtml = errorMessage;
                this.ErrMessage_Span.Visible   = true;
            }

            Int16 cantidadDigitos = Convert.ToInt16(Session["reconversionMonetaria.cantidadDigitos"]);

            // finalmente, determinamos el divisor para la reconversión: si, por ejemplo, la cantidad de dígitos es 3, el dividor debe ser 1.000
            int divisor = 1;

            for (short i = 1; i <= cantidadDigitos; i++)
            {
                divisor = divisor * 10;
            }

            this.monedaNacional_span.InnerText  = monedaNacional.Descripcion + " (" + monedaNacional.Simbolo + ")";
            this.cuentaContable_span.InnerText  = $"{cuentaContable.CuentaEditada} - {cuentaContable.Descripcion} - {cuentaContable.ID.ToString()}";
            this.ano_span.InnerText             = ano.ToString();
            this.cantidadDigitos_span.InnerText = cantidadDigitos.ToString();
            this.divisor_span.InnerText         = divisor.ToString("N0");

            this.texto1.Visible = false;

            this.texto1.Visible = true;
            this.ejecutarReconversion_button.Visible = true;

            parametrosProc parametrosProc = new parametrosProc
            {
                ano                   = ano,
                moneda                = monedaNacional.Moneda1,
                cantidadDigitos       = cantidadDigitos,
                divisor               = divisor,
                cuentaContableID      = cuentaContable.ID,
                ciaContabSeleccionada = cia.ciaContabSeleccionada,
            };

            // la idea es mantener el state de estos parámetros para tenerlos siempre a la mano ...
            Session["parametrosProc"] = parametrosProc;
        }