private string obtenerDatos(string sPSN, string sFechaDesde, string sFechaHasta)
    {
        string        sResul = "";
        StringBuilder sb     = new StringBuilder();

        try
        {
            SqlDataReader dr = Consumo.ObtenerImputacionesIAP((int)Session["UsuarioActual"], (sPSN == "")?null:(int?)int.Parse(sPSN), DateTime.Parse(sFechaDesde), DateTime.Parse(sFechaHasta));

            nIndice = 0;
            int    nPE = 0, nPT = 0, nF = 0, nA = 0, nT = 0, nNivel = 0;
            int    nFactual = 0, nAactual = 0;
            string sHTML = "";

            sb.Append("<table id='tblDatos' style='width:950px;text-align:right;'>");
            sb.Append("<colgroup><col style='width:700px;'/><col style='width:125px;' /><col style='width:125px;'/></colgroup>");

            while (dr.Read())
            {
                sHTML    = "";
                nFactual = int.Parse(dr["t334_idfase"].ToString());
                nAactual = int.Parse(dr["t335_idactividad"].ToString());
                if (nPE != int.Parse(dr["t301_idproyecto"].ToString()))
                {
                    //Crear PE, PT, F, A, T y consumo
                    nT    = int.Parse(dr["t332_idtarea"].ToString());
                    nA    = int.Parse(dr["t335_idactividad"].ToString());
                    nF    = int.Parse(dr["t334_idfase"].ToString());
                    nPT   = int.Parse(dr["t331_idpt"].ToString());
                    nPE   = int.Parse(dr["t301_idproyecto"].ToString());
                    sHTML = CrearProyEco(dr);
                }
                else if (nPT != int.Parse(dr["t331_idpt"].ToString()))
                {
                    //Crear PT, F, A, T y consumo
                    nT    = int.Parse(dr["t332_idtarea"].ToString());
                    nA    = int.Parse(dr["t335_idactividad"].ToString());
                    nF    = int.Parse(dr["t334_idfase"].ToString());
                    nPT   = int.Parse(dr["t331_idpt"].ToString());
                    sHTML = CrearProyTec(dr);
                }
                else if ((nF != nFactual) && (nFactual != 0))
                {
                    //Crear F, A, T y consumo
                    nT    = int.Parse(dr["t332_idtarea"].ToString());
                    nA    = int.Parse(dr["t335_idactividad"].ToString());
                    nF    = int.Parse(dr["t334_idfase"].ToString());
                    nPT   = int.Parse(dr["t331_idpt"].ToString());
                    sHTML = CrearFase(dr);
                }
                else if ((nA != nAactual) && (nAactual != 0))
                {
                    //Crear A, T y consumo
                    nT  = int.Parse(dr["t332_idtarea"].ToString());
                    nA  = int.Parse(dr["t335_idactividad"].ToString());
                    nF  = int.Parse(dr["t334_idfase"].ToString());
                    nPT = int.Parse(dr["t331_idpt"].ToString());
                    if (nFactual == 0)
                    {
                        nNivel = 3;
                    }
                    else
                    {
                        nNivel = 4;
                    }
                    sHTML = CrearActividad(dr, nNivel);
                }
                else if (nT != int.Parse(dr["t332_idtarea"].ToString()))
                {
                    //Crear T y consumo
                    if (nFactual == 0)
                    {
                        if (nAactual == 0)
                        {
                            nNivel = 3;
                        }
                        else
                        {
                            nNivel = 4;
                        }
                    }
                    else
                    {
                        nNivel = 5;
                    }
                    nT    = int.Parse(dr["t332_idtarea"].ToString());
                    sHTML = CrearTarea(dr, nNivel);
                }
                else
                {
                    //Crear consumo
                    if (nFactual == 0)
                    {
                        if (nAactual == 0)
                        {
                            nNivel = 4;
                        }
                        else
                        {
                            nNivel = 5;
                        }
                    }
                    else
                    {
                        nNivel = 6;
                    }
                    sHTML = CrearConsumo(dr, nNivel);
                }

                sb.Append(sHTML);
                i++;
            }
            dr.Close();
            dr.Dispose();

            sb.Append("</table>");

            sResul = "OK@#@" + sb.ToString();
            //sResul += "@#@" + txtHorasReportadas.Text + "@#@" + txtJornadasReportadas.Text + "@#@" + txtJornadasEconomicas.Text + "@#@" + hdnFechaDesde.Text + "@#@" + hdnFechaHasta.Text;
            //sResul += "@#@" + hdnFechaDesde.Text + "@#@" + hdnFechaHasta.Text;
            sb.Length = 0; //Para liberar memoria
        }
        catch (Exception ex)
        {
            sResul = "Error@#@" + Errores.mostrarError("Error al obtener los datos de consulta de proyectos", ex);
        }

        return(sResul);
    }