private string ObtenerDatosConsumos(string sDesde, string sHasta, string sProfesionales)
    {
        string        sResul = "";
        StringBuilder sb     = new StringBuilder();

        sb.Length = 0;

        try
        {
            SqlDataReader dr =
                Consumo.ObtenerConsumosEconomicosProf(int.Parse(Session["UsuarioActual"].ToString()),
                                                      int.Parse(sDesde), int.Parse(sHasta), sProfesionales);

            sb.Append("<TABLE style='font-family:Arial;font-size:8pt;' cellSpacing='2' border=1>");
            sb.Append("<tr align='center' style='background-color: #BCD4DF;'>");
            sb.Append("<td>Nº profesional</td>");
            sb.Append("<td>Profesional</td>");
            sb.Append("<td>" + Estructura.getDefLarga(Estructura.sTipoElem.NODO) + "</td>");
            sb.Append("<td>Nº proyecto</td>");
            sb.Append("<td>Denominación proyecto</td>");
            sb.Append("<td>Mes consumo</td>");
            sb.Append("<td>Unidades</td>");
            sb.Append("<td>Modelo coste</td>");
            sb.Append("</tr></table>");

            sb.Append("<TABLE style='font-family:Arial;font-size:8pt;' border=1>");
            sb.Append("<colgroup>");
            sb.Append("<col />");
            sb.Append("<col />"); //Profesional
            sb.Append("<col />"); //Nodo
            sb.Append("<col />"); //Nº proyecto
            sb.Append("<col />"); //proyecto
            sb.Append("<col />"); //mes consumo
            sb.Append("<col />"); //unidades consumidas
            sb.Append("<col />"); //modelo de coste
            sb.Append("</colgroup>");
            while (dr.Read())
            {
                sb.Append("<tr style='vertical-align:top;'>");
                sb.Append("<td style='text-align:rigth;'>" + ((int)dr["t314_idusuario"]).ToString("#,###") + "</td>");
                sb.Append("<td>" + dr["tecnico"].ToString() + "</td>");
                sb.Append("<td>" + dr["t303_denominacion"].ToString() + "</td>");
                sb.Append("<td style='text-align:rigth;'>" + ((int)dr["t301_idproyecto"]).ToString("#,###") + "</td>");
                sb.Append("<td>" + dr["t301_denominacion"].ToString() + "</td>");
                sb.Append("<td>" + (dr["descAnomes"]).ToString() + "</td>");
                sb.Append("<td style='text-align:rigth;'>" + decimal.Parse(dr["unidades"].ToString()).ToString("N") + "</td>");
                sb.Append("<td>" + (dr["ModeloCoste"]).ToString() + "</td>");
                sb.Append("</tr>");
            }
            dr.Close();
            dr.Dispose();

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

            //sResul = "OK@#@" + sb.ToString();
            string sIdCache = "EXCEL_CACHE_" + Session["IDFICEPI_ENTRADA"].ToString() + "_" + DateTime.Now.ToString();
            Session[sIdCache] = sb.ToString();;

            sResul = "OK@#@cacheado@#@" + sIdCache + "@#@" + sb.ToString();

            sb.Length = 0; //Para liberar memoria
        }
        catch (Exception ex)
        {
            sResul = "Error@#@" + Errores.mostrarError("Error al obtener los datos de consulta masiva de profesionales", ex);
        }

        return(sResul);
    }