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

        sb.Length = 0;
        DateTime dtDesde, dtHasta;
        bool     bError = false;

        try
        {
            if (!Utilidades.isDate(sDesde))
            {
                sResul = "Error@#@La fecha desde no es correcta";
                bError = true;
            }
            if (!bError && !Utilidades.isDate(sHasta))
            {
                sResul = "Error@#@La fecha hasta no es correcta";
                bError = true;
            }
            if (!bError)
            {
                dtDesde = System.Convert.ToDateTime(sDesde);
                dtHasta = System.Convert.ToDateTime(sHasta);
                SqlDataReader dr = USUARIO.GetConsumosProf(int.Parse(Session["UsuarioActual"].ToString()), dtDesde, dtHasta, 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>F. consumo</td>");
                sb.Append("<td>Nº profesional</td>");
                sb.Append("<td>Profesional</td>");
                sb.Append("<td>" + Estructura.getDefLarga(Estructura.sTipoElem.NODO) + " del Profesional</td>");
                sb.Append("<td>Proveedor</td>");
                sb.Append("<td>" + Estructura.getDefLarga(Estructura.sTipoElem.NODO) + " del Proyecto</td>");
                sb.Append("<td>Nº proyecto</td>");
                sb.Append("<td>Denominación proyecto</td>");
                sb.Append("<td>Denominación proyecto técnico</td>");
                sb.Append("<td>Nº tarea</td>");
                sb.Append("<td>Denominación tarea</td>");
                sb.Append("<td>Facturable</td>");
                sb.Append("<td>Horas</td>");
                sb.Append("<td>Jornadas</td>");
                sb.Append("<td>Comentario</td>");
                sb.Append("<td>Cliente</td>");
                sb.Append("<td>Naturaleza</td>");
                sb.Append("<td>Modelo de contratación</td>");
                sb.Append("</tr>");
                sb.Append("</table>");

                sb.Append("<TABLE style='font-family:Arial;font-size:8pt;' border=1>");
                sb.Append("<COLGROUP>");
                sb.Append("<col />"); //Fecha consumo
                sb.Append("<col />");
                sb.Append("<col />"); //Profesional
                sb.Append("<col />"); //Nodo del profesional
                sb.Append("<col />"); //Proveedor del profesional
                sb.Append("<col />"); //Nodo del proyecto
                sb.Append("<col />"); //Nº proyecto
                sb.Append("<col />"); //proyecto
                sb.Append("<col />"); //PT
                sb.Append("<col />"); //Nº tarea
                sb.Append("<col />");
                sb.Append("<col />"); //facturable
                sb.Append("<col />");
                sb.Append("<col />");
                sb.Append("<col />");
                sb.Append("<col />");
                sb.Append("<col />");
                sb.Append("<col />");
                sb.Append("</COLGROUP>");
                while (dr.Read())
                {
                    sb.Append("<tr style='vertical-align:top;'>");
                    sb.Append("<td>" + ((DateTime)dr["t337_fecha"]).ToShortDateString() + "</td>");
                    sb.Append("<td style='text-align:rigth;'>" + ((int)dr["t314_idusuario"]).ToString("#,###") + "</td>");
                    sb.Append("<td>" + dr["profesional"].ToString() + "</td>");
                    //CR del profesional
                    sb.Append("<td>" + dr["Nodo_Profesional"].ToString() + "</td>");
                    //Proveedor del profesional
                    sb.Append("<td>" + dr["Proveedor_Profesional"].ToString() + "</td>");
                    //CR del proyecto
                    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["T331_despt"].ToString() + "</td>");
                    sb.Append("<td style='text-align:rigth;'>" + ((int)dr["t332_idtarea"]).ToString("#,###") + "</td>");
                    sb.Append("<td>" + dr["t332_destarea"].ToString() + "</td>");
                    if ((bool)dr["t332_facturable"])
                    {
                        sb.Append("<td style='text-align:center;'>X</td>");
                    }
                    else
                    {
                        sb.Append("<td>&nbsp;</td>");
                    }
                    //sb.Append("<td style='text-align:rigth;'>" + decimal.Parse(dr["TotalHorasReportadas"].ToString()).ToString("N") + "</td>");
                    //sb.Append("<td style='text-align:rigth;'>" + decimal.Parse(dr["TotalJornadasReportadas"].ToString()).ToString("N") + "</td>");
                    sb.Append("<td style='text-align:rigth;'>" + dr["TotalHorasReportadas"].ToString() + "</td>");
                    sb.Append("<td style='text-align:rigth;'>" + double.Parse(dr["TotalJornadasReportadas"].ToString()).ToString("#,###.##") + "</td>");
                    sb.Append("<td>&nbsp;" + dr["Comentarios"].ToString().Replace("'", "&#39;").Replace("\"", "&#39;") + "</td>");
                    sb.Append("<td>" + dr["t302_denominacion"].ToString() + "</td>");
                    sb.Append("<td>" + dr["t323_denominacion"].ToString() + "</td>");
                    sb.Append("<td>" + dr["t316_denominacion"].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);
    }