//private string ObtenerDocumentos(string sIdTarea)
    //{
    //    StringBuilder sb = new StringBuilder();
    //    bool bModificable;
    //    SqlDataReader dr = DOCUT.Catalogo(null, int.Parse(sIdTarea), "", "", "", null, null, null, true, null, 3, 0);

    //    sb.Append("<div style='background-image:url(../../../Images/imgFT20.gif); width:0%; height:0%'>");
    //    sb.Append("<table id='tblDocumentos' class='texto' style='WIDTH: 800px; BORDER-COLLAPSE: collapse; ' cellSpacing='0' border='0'>");
    //    sb.Append("<colgroup><col style='width:265px;padding-left:5px;' /><col width='215px' /><col width='225px' /><col width='100px' /></colgroup>");
    //    sb.Append("<tbody>");
    //    while (dr.Read())
    //    {   //Si el archivo NO es sólo lectura, o si el usuario es el autor del archivo, o es administrador, se permite modificar.
    //        if ((dr["t314_idusuario_autor"].ToString() == Session["NUM_EMPLEADO_ENTRADA"].ToString() || Session["ADMINISTRADOR_PC_ACTUAL"].ToString() == "A")
    //            || (!(bool)dr["t363_privado"] && !(bool)dr["t363_modolectura"]))
    //            bModificable = true;
    //        else
    //            bModificable = false;

    //        sb.Append("<tr id='" + dr["t363_iddocut"].ToString() + "' onclick='mmse(this);' sTipo='T' sAutor='" + dr["t314_idusuario_autor"].ToString() + "' onmouseover='TTip()' style='height:20px;'>");

    //        //Si el archivo NO es sólo lectura, o si el usuario es el autor del archivo, o es administrador, se permite modificar.
    //        if (bModificable)
    //            sb.Append("<td class='MA' ondblclick=\"modificarDoc(this.parentNode.getAttribute('sTipo'), this.parentNode.id, 'IAP')\"><nobr class='NBR' style='width:255px'>" + dr["t363_descripcion"].ToString() + "</nobr></td>");
    //        else
    //            sb.Append("<td class='MANO'><nobr class='NBR' style='width:255px'>" + dr["t363_descripcion"].ToString() + "</nobr></td>");

    //        if (dr["t363_nombrearchivo"].ToString() == "")
    //        {
    //            if (bModificable)
    //                sb.Append("<td class='MA' ondblclick=\"modificarDoc(this.parentNode.getAttribute('sTipo'), this.parentNode.id)\"></td>");
    //            else
    //                sb.Append("<td class='MANO'></td>");
    //        }
    //        else
    //        {
    //            string sNomArchivo = dr["t363_nombrearchivo"].ToString() + Utilidades.TamanoArchivo((int)dr["bytes"]);
    //            //Si el archivo no es privado, o es privado y la persona que entra es el autor, o es administrador, se permite descargar.
    //            if ((!(bool)dr["t363_privado"]) || ((bool)dr["t363_privado"] && dr["t314_idusuario_autor"].ToString() == Session["NUM_EMPLEADO_ENTRADA"].ToString()) || Session["ADMINISTRADOR_PC_ACTUAL"].ToString() == "A")
    //                sb.Append("<td><img src=\"../../../images/imgDescarga.gif\" width='16px' height='16px' onclick=\"descargar(this.parentNode.parentNode.getAttribute('sTipo'), this.parentNode.parentNode.id);\" style='vertical-align:bottom;' title=\"Descargar " + sNomArchivo + "\">");
    //            else
    //                sb.Append("<td><img src=\"../../../images/imgSeparador.gif\" width='16px' height='16px' style='vertical-align:bottom;'>");
    //            if (bModificable)
    //                sb.Append("&nbsp;<nobr class='NBR MA' style='width:205px;' ondblclick=\"modificarDoc(this.parentNode.getAttribute('sTipo'), this.parentNode.id)\">" + sNomArchivo + "</nobr></td>");
    //            else
    //                sb.Append("&nbsp;<nobr class='NBR MANO' style='width:205px;'>" + sNomArchivo + "</nobr></td>");
    //        }

    //        if (dr["t363_weblink"].ToString() == "")
    //        {
    //            if (bModificable)
    //                sb.Append("<td class='MA' ondblclick=\"modificarDoc(this.parentNode.getAttribute('sTipo'), this.parentNode.id)\"></td>");
    //            else
    //                sb.Append("<td class='MANO'></td>");
    //        }
    //        else
    //        {
    //            string sHTTP = "";
    //            if (dr["t363_weblink"].ToString().IndexOf("http") == -1) sHTTP = "http://";
    //            sb.Append("<td><a href='" + sHTTP + dr["t363_weblink"].ToString() + "'><nobr class='NBR' style='width:215px'>" + dr["t363_weblink"].ToString() + "</nobr></a></td>");
    //        }
    //        if (bModificable)
    //            sb.Append("<td class='MA' ondblclick=\"modificarDoc(this.parentNode.getAttribute('sTipo'), this.parentNode.id)\"><nobr class='NBR' style='width:140px;'>" + dr["autor"].ToString() + "</nobr></td></tr>");
    //        else
    //            sb.Append("<td class='MANO'><nobr class='NBR' style='width:140px;'>" + dr["autor"].ToString() + "</nobr></td></tr>");
    //    }
    //    dr.Close();
    //    dr.Dispose();
    //    sb.Append("</tbody>");
    //    sb.Append("</table>");
    //    sb.Append("</div>");

    //    return "OK@#@" + sb.ToString();
    //}

    protected string Grabar(string strDatos)
    {
        string sResul = "";

        aListCorreo = new ArrayList();

        #region Abrir conexión y transacción
        try
        {
            oConn = Conexion.Abrir();
            tr    = Conexion.AbrirTransaccion(oConn);
        }
        catch (Exception ex)
        {
            if (oConn.State == ConnectionState.Open)
            {
                Conexion.Cerrar(oConn);
            }
            sResul = "Error@#@" + Errores.mostrarError("Error al abrir la conexión", ex);
            return(sResul);
        }
        #endregion

        try
        {
            string[] aValores = Regex.Split(strDatos, "##");
            ///aValores[0] = IdTarea
            ///aValores[1] = nETE
            ///aValores[2] = sFFE
            ///aValores[3] = sObservaciones
            ///aValores[4] = nFinalizado;
            ///aValores[5] = nFinalizadoAntes;
            ///aValores[6] = nPT;
            ///aValores[7] = Desc Tarea;
            ///aValores[8] = sNotas;
            ///aValores[9] = txtNotas1;
            ///aValores[10] = txtNotas2;
            ///aValores[11] = txtNotas3;
            ///aValores[12] = txtNotas4;
            ///aValores[13] = sComentarioOriginal;
            ///aValores[14] = nETEOriginal;
            ///aValores[15] = sFFEOriginal;

            double   nETE = 0;
            DateTime?sFFE = null;

            if (aValores[1] != "")
            {
                nETE = double.Parse(aValores[1]);
            }
            if (aValores[2] != "")
            {
                sFFE = DateTime.Parse(aValores[2]);
            }

            TareaRecurso.ActualizarEstimacion(tr, int.Parse(Session["NUM_EMPLEADO_IAP"].ToString()), int.Parse(aValores[0]), sFFE, nETE, Utilidades.unescape(aValores[3]), (aValores[4] == "1")?true:false);

            if (aValores[5] == "0" && aValores[4] == "1")
            {
                //Si antes la tarea no estaba finalizada y ahora sí,
                //Mail al (a los) RTPT indicando que se ha finalizado
                //y continuar con la grabación
//                TareaFinalizada(tr, int.Parse(aValores[0]), int.Parse(aValores[6]));
            }

            if (aValores[3] != aValores[13] || aValores[1] != aValores[14] || aValores[2] != aValores[15])
            {
                //Si se han modificado los comentarios del técnico al gerente
                //Mail al (a los) RTPT
//                EstimacionModificada(tr, int.Parse(aValores[0]), int.Parse(aValores[6]));
            }

            if (aValores[8] == "1")
            {
                TAREAPSP.ActualizarNotas(tr, int.Parse(aValores[0]), Utilidades.unescape(aValores[9]), Utilidades.unescape(aValores[10]), Utilidades.unescape(aValores[11]), Utilidades.unescape(aValores[12]));
            }

            Conexion.CommitTransaccion(tr);
            sResul = "OK@#@";
        }
        catch (Exception ex)
        {
            Conexion.CerrarTransaccion(tr);
            sResul = "Error@#@" + Errores.mostrarError("Error al grabar los datos de la tarea", ex);
        }
        finally
        {
            Conexion.Cerrar(oConn);
        }

        try
        {
            if (aListCorreo.Count > 0)
            {
                Correo.EnviarCorreos(aListCorreo);
            }
        }
        catch (Exception ex)
        {
            sResul = "Error@#@" + Errores.mostrarError("Error al enviar el mail a los responsables técnicos de proyectos técnicos", ex);
        }

        return(sResul);
    }