private void PageDataBind()
        {
            this.MonedasFilter_DropDownList.DataBind();
            this.CompaniasFilter_DropDownList.DataBind();

            BalanceComprobacion_ListView.DataBind();

            // --------------------------------------------------------------------------------
            // para mostrar el período indicado por el usuario como un subtítulo de la página

            HtmlContainerControl MyHtmlSpan = (HtmlContainerControl)Master.FindControl("PageSubTitle_Span");

            if (!(MyHtmlSpan == null))
            {
                DateTime FechaInicialPeriodo = (System.DateTime)Session["FechaInicialPeriodo"];
                DateTime FechaFinalPeriodo   = (System.DateTime)Session["FechaFinalPeriodo"];

                MyHtmlSpan.InnerHtml = FechaInicialPeriodo.ToString("dd-MMM-yy") + " / " + FechaFinalPeriodo.ToString("dd-MMM-yy");
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                if (Session["FechaInicialPeriodo"] == null || Session["FechaFinalPeriodo"] == null)
                {
                    CustomValidator1.IsValid      = false;
                    CustomValidator1.ErrorMessage = "Aparentemente, Ud. no ha aplicado un filtro; debe hacerlo antes de intentar ejecutar esta consulta.";

                    return;
                }

                // nótese cómo obtenemos la moneda nacional que viene como un parámetro. La necesitamos para saber si debemos o no reconvertir (reconversión de Oct/21)
                if (Session["monedaNacional"] == null)
                {
                    CustomValidator1.IsValid      = false;
                    CustomValidator1.ErrorMessage = "Upsss, esta consulta no ha recibido un valor para la moneda nacional. <br /> " +
                                                    "Por favor revise esta situación y corríjala para que sea posible la ejecución de esta consulta.";

                    return;
                }

                var monedaNacional = 0;
                var moneda         = 0;

                try
                {
                    monedaNacional = Convert.ToInt32(Session["monedaNacional"]);
                    moneda         = Convert.ToInt32(Request.QueryString["mon"]);
                } catch (Exception err)
                {
                    CustomValidator1.IsValid      = false;
                    CustomValidator1.ErrorMessage = "Hemos obtenido un error al intentar obtener la moneda y/o moneda nacional. <br /> " +
                                                    "El mensaje específico del error obtenido es: " + err.Message;
                    return;
                }

                // para saber si el usuario quiere reconvertir las cifras anteriores al 1-Oct-21
                bool bReconvertirCifrasAntes_01Oct2021 = false;

                if (Session["ReconvertirCifrasAntes_01Oct2021"] != null)
                {
                    bReconvertirCifrasAntes_01Oct2021 = (bool)Session["ReconvertirCifrasAntes_01Oct2021"];
                }

                dbContabDataContext dbContab = new dbContabDataContext();

                var query = (from cta in dbContab.CuentasContables
                             where cta.ID == Convert.ToInt32(Request.QueryString["cta"])
                             select new { cta.CuentaEditada, cta.Descripcion }).FirstOrDefault();

                DateTime FechaInicialPeriodo = (System.DateTime)Session["FechaInicialPeriodo"];
                DateTime FechaFinalPeriodo   = (System.DateTime)Session["FechaFinalPeriodo"];

                TituloPagina.InnerHtml = "Movimientos contables para la cuenta <i>" + query.CuentaEditada + " - " + query.Descripcion + "</i><br /> en el período " + FechaInicialPeriodo.ToString("dd-MMM-yy") + " a " + FechaFinalPeriodo.ToString("dd-MMM-yy");

                // ------------------------------------------------------------------------------------------------------------------
                // para dar valores a los parámetros del SqlDataSource
                this.MovimientosContables_SqlDataSource.SelectParameters["CuentaContableID"].DefaultValue = Request.QueryString["cta"];
                this.MovimientosContables_SqlDataSource.SelectParameters["Moneda"].DefaultValue           = Request.QueryString["mon"];

                this.MovimientosContables_SqlDataSource.SelectParameters["FechaInicialPeriodo"].DefaultValue = Session["FechaInicialPeriodo"].ToString();
                this.MovimientosContables_SqlDataSource.SelectParameters["FechaFinalPeriodo"].DefaultValue   = Session["FechaFinalPeriodo"].ToString();
                // ------------------------------------------------------------------------------------------------------------------

                Label MySumOfDebe_Label  = (Label)BalanceComprobacion_ListView.FindControl("SumOfDebe_Label");
                Label MySumOfHaber_Label = (Label)BalanceComprobacion_ListView.FindControl("SumOfHaber_Label");

                decimal?nTotalDebe  = 0;
                decimal?nTotalHaber = 0;

                DateTime fechaInicialPeriodo = Convert.ToDateTime(Session["FechaInicialPeriodo"].ToString());
                DateTime fechaFinalPeriodo   = Convert.ToDateTime(Session["FechaFinalPeriodo"].ToString());

                // ahora sumarizamos el debe y el haber para la cuenta y período indicados ...
                if (bReconvertirCifrasAntes_01Oct2021 && (moneda == monedaNacional))
                {
                    // Nota: cuando el usuario quiere reconvertir, excluimos el asiento de reconversión
                    // primero leemos valores *anteriores* a 1/Oct/21 y reconvertimos
                    nTotalDebe = (from d in dbContab.dAsientos
                                  where d.CuentaContableID == Convert.ToInt32(Request.QueryString["cta"].ToString()) &&
                                  d.Asiento.Moneda == Convert.ToInt32(Request.QueryString["mon"]) &&
                                  (d.Asiento.Fecha >= fechaInicialPeriodo && d.Asiento.Fecha < new DateTime(2021, 10, 1)) &&
                                  (d.Referencia == null || d.Referencia != "Reconversión 2021")
                                  select(decimal?) d.Debe).Sum();

                    nTotalHaber = (from d in dbContab.dAsientos
                                   where d.CuentaContableID == Convert.ToInt32(Request.QueryString["cta"].ToString()) &&
                                   d.Asiento.Moneda == Convert.ToInt32(Request.QueryString["mon"]) &&
                                   (d.Asiento.Fecha >= fechaInicialPeriodo && d.Asiento.Fecha < new DateTime(2021, 10, 1)) &&
                                   (d.Referencia == null || d.Referencia != "Reconversión 2021")
                                   select(decimal?) d.Haber).Sum();

                    // luego leemos valores *posteriores* a 1/Oct/21 y *no* reconvertimos
                    var nTotalDebe2 = (from d in dbContab.dAsientos
                                       where d.CuentaContableID == Convert.ToInt32(Request.QueryString["cta"].ToString()) &&
                                       d.Asiento.Moneda == Convert.ToInt32(Request.QueryString["mon"]) &&
                                       (d.Asiento.Fecha >= fechaInicialPeriodo && d.Asiento.Fecha <= fechaFinalPeriodo) &&
                                       d.Asiento.Fecha >= new DateTime(2021, 10, 1) &&
                                       (d.Referencia == null || d.Referencia != "Reconversión 2021")
                                       select(decimal?) d.Debe).Sum();

                    var nTotalHaber2 = (from d in dbContab.dAsientos
                                        where d.CuentaContableID == Convert.ToInt32(Request.QueryString["cta"].ToString()) &&
                                        d.Asiento.Moneda == Convert.ToInt32(Request.QueryString["mon"]) &&
                                        (d.Asiento.Fecha >= fechaInicialPeriodo && d.Asiento.Fecha <= fechaFinalPeriodo) &&
                                        d.Asiento.Fecha >= new DateTime(2021, 10, 1) &&
                                        (d.Referencia == null || d.Referencia != "Reconversión 2021")
                                        select(decimal?) d.Haber).Sum();

                    nTotalDebe   = nTotalDebe.HasValue ? nTotalDebe.Value : 0;
                    nTotalHaber  = nTotalHaber.HasValue ? nTotalHaber.Value : 0;
                    nTotalDebe2  = nTotalDebe2.HasValue ? nTotalDebe2.Value : 0;
                    nTotalHaber2 = nTotalHaber2.HasValue ? nTotalHaber2.Value : 0;

                    // reconvertimos
                    nTotalDebe  = Math.Round((nTotalDebe.Value / 1000000), 2);
                    nTotalHaber = Math.Round((nTotalHaber.Value / 1000000), 2);

                    nTotalDebe  += nTotalDebe2;
                    nTotalHaber += nTotalHaber2;
                }
                else
                {
                    // Nota: cuando el usuario no quiere reconvertir, mantenemos el asiento de reconversión
                    nTotalDebe = (from d in dbContab.dAsientos
                                  where d.CuentaContableID == Convert.ToInt32(Request.QueryString["cta"].ToString()) &&
                                  d.Asiento.Moneda == Convert.ToInt32(Request.QueryString["mon"]) &&
                                  d.Asiento.Fecha >= fechaInicialPeriodo &&
                                  d.Asiento.Fecha <= fechaFinalPeriodo
                                  select(decimal?) d.Debe).Sum();

                    nTotalHaber = (from d in dbContab.dAsientos
                                   where d.CuentaContableID == Convert.ToInt32(Request.QueryString["cta"].ToString()) &&
                                   d.Asiento.Moneda == Convert.ToInt32(Request.QueryString["mon"]) &&
                                   d.Asiento.Fecha >= fechaInicialPeriodo &&
                                   d.Asiento.Fecha <= fechaFinalPeriodo
                                   select(decimal?) d.Haber).Sum();
                }

                dbContab = null;

                if (MySumOfDebe_Label != null)
                {
                    MySumOfDebe_Label.Text = nTotalDebe == null ? "0,00" : nTotalDebe.Value.ToString("#,##0.00");
                }

                if (MySumOfHaber_Label != null)
                {
                    MySumOfHaber_Label.Text = nTotalHaber == null ? "0,00" : nTotalHaber.Value.ToString("#,##0.00");
                }

                // ---------------------------------------------------------------------------------------------------------------
                // agregamos el select statement al Sql DataSource; la idea es cambiarlo dependiendo de si el usuario
                // quiere o no reconvertir las cifras por la reconversión de Oct/2.021.
                if (bReconvertirCifrasAntes_01Oct2021 && (moneda == monedaNacional))
                {
                    // Ok, el usuario quiere reconvertir. Reconvertimos solo cifras anteriores a Oct/2.021 y en moneda nacional
                    // hacemos un Union en el Select para aplicar la reconversión *solo* a movimientos anteriores al 1/Oct/2021

                    // Nota: cuando el usuario quiere reconvertir, excluimos el asiento de reconversion
                    this.MovimientosContables_SqlDataSource.SelectCommand =

                        // el 1er Select lee debe y haber *anterioes* al 1/Oct/21; reconvierte
                        "Select d.Partida, d.NumeroAutomatico, a.Numero As NumeroComprobanteContable, a.Fecha As Fecha, " +
                        "d.Descripcion As DescripcionPartida, d.Referencia, " +
                        "Round((d.Debe / 1000000), 2) as Debe, Round((d.Haber / 1000000), 2) as Haber, Count(l.Id) as NumLinks, " +
                        "co.Abreviatura As NombreCiaContab, m.Simbolo As SimboloMoneda, mo.Simbolo As SimboloMonedaOriginal " +

                        "From dAsientos d Inner Join Asientos a On d.NumeroAutomatico = a.NumeroAutomatico Inner Join Monedas m on a.Moneda = m.Moneda " +
                        "Inner Join Monedas mo on a.MonedaOriginal = mo.Moneda Inner Join Companias co on a.Cia = co.Numero " +
                        "Left Join Asientos_Documentos_Links l on a.NumeroAutomatico = l.NumeroAutomatico " +

                        "Where (d.CuentaContableID = @CuentaContableID) And (a.Moneda = @Moneda) And (a.Fecha >= @FechaInicialPeriodo and a.Fecha < @FechaFinalPeriodo) And " +
                        "(a.Fecha < '2021-10-1') And (d.Referencia Is Null Or d.Referencia <> 'Reconversión 2021') " +

                        "Group By d.Partida, d.NumeroAutomatico, a.Numero, a.Fecha, d.Descripcion, d.Referencia, d.Debe, d.Haber, co.Abreviatura, m.Simbolo, mo.Simbolo " +

                        "Union " +

                        // el 2do Select lee debe y haber *posteriores* al 1/Oct/21; no reconvierte
                        "Select d.Partida, d.NumeroAutomatico, a.Numero As NumeroComprobanteContable, a.Fecha As Fecha, " +
                        "d.Descripcion As DescripcionPartida, d.Referencia, d.Debe, d.Haber, Count(l.Id) as NumLinks, " +
                        "co.Abreviatura As NombreCiaContab, m.Simbolo As SimboloMoneda, mo.Simbolo As SimboloMonedaOriginal " +

                        "From dAsientos d Inner Join Asientos a On d.NumeroAutomatico = a.NumeroAutomatico Inner Join Monedas m on a.Moneda = m.Moneda " +
                        "Inner Join Monedas mo on a.MonedaOriginal = mo.Moneda Inner Join Companias co on a.Cia = co.Numero " +
                        "Left Join Asientos_Documentos_Links l on a.NumeroAutomatico = l.NumeroAutomatico " +

                        "Where (d.CuentaContableID = @CuentaContableID) And (a.Moneda = @Moneda) And (a.Fecha >= @FechaInicialPeriodo and a.Fecha <= @FechaFinalPeriodo) And " +
                        "(a.Fecha >= '2021-10-1') And (d.Referencia Is Null Or d.Referencia <> 'Reconversión 2021') " +

                        "Group By d.Partida, d.NumeroAutomatico, a.Numero, a.Fecha, d.Descripcion, d.Referencia, d.Debe, d.Haber, co.Abreviatura, m.Simbolo, mo.Simbolo " +

                        "Order By a.Fecha, a.Numero, d.Partida";
                }
            }
        }