private string ObtenerIntegrantes(int nIdPE, string sCodCR)
    {// Devuelve el código HTML del catalogo de personas que son integrantes del pool de RTPTs
        StringBuilder sb = new StringBuilder();
        string        sCod, sDes;

        try
        {
            SqlDataReader dr = POOLRPT.SelectByProyecto(nIdPE);
            sb.Append("<table id='tblOpciones2' class='texto MM' style='width: 390px;' mantenimiento='1'>");
            sb.Append("<colgroup><col style='width:10px;' /><col style='width:20px;' /><col style='width:360px;' /></colgroup>");
            sb.Append("<tbody id='tbodyDestino'>");
            while (dr.Read())
            {
                sDes = dr["empleado"].ToString();
                sCod = dr["t314_idusuario"].ToString();
                sb.Append("<tr id='" + sCod + "' bd='' onClick='mm(event)' style='height:20px' onmousedown='DD(event)'");
                sb.Append(" sexo='" + dr["t001_sexo"].ToString() + "' ");

                if (dr["t001_fecbaja"].ToString() == "")
                {
                    sb.Append("baja='N' ");
                }
                else
                {
                    if (System.Convert.ToDateTime(dr["t001_fecbaja"].ToString()) < System.DateTime.Today)
                    {
                        sb.Append("baja='S' ");
                    }
                    else
                    {
                        sb.Append("baja='N' ");
                    }
                }
                sb.Append("tipo='" + dr["tipo"].ToString() + "' ");
                //if (dr["t303_idnodo"].ToString() == "") sb.Append("tipo='E' ");
                //else if (dr["t303_idnodo"].ToString() == sCodCR) sb.Append("tipo='P' ");
                //else sb.Append("tipo='N' ");
                sb.Append("><td></td><td></td>");
                sb.Append("<td><NOBR id='lbl" + sCod + "' class='NBR W350' title='" + sDes + "'>" + sDes + "</NOBR></td></tr>");
            }
            sb.Append("</tbody></table>");
            dr.Close();
            dr.Dispose();

            return(sb.ToString());
        }
        catch (Exception)
        {
            //Master.sErrores = Errores.mostrarError("Error al obtener las personas", ex);
            return("error@#@");
        }
    }
    private string Grabar(string sCodPE, string sCadena)
    {//En el parametro de entrada tenemos una lista de codigos de personas separados por comas
        //Además de grabar en el pool hay que asignarlos como RTPTs en todos los PT del PE
        string sCad, sResul = "", sCadPTs, sProf, sOp;
        //short iCodCR;
        int            iCodPE, iCodPT, idRecurso;
        SqlConnection  oConn = null;
        SqlTransaction tr    = null;

        try
        {
            iCodPE = int.Parse(sCodPE);
            oConn  = Conexion.Abrir();
            tr     = Conexion.AbrirTransaccion(oConn);
            //Borrar los integrantes existentes
            //POOLRPT.DeleteByProyecto(tr, iCodPE);
            if (sCadena != "")
            {//Con la cadena generamos una lista y la recorremos para grabar cada elemento
                //Obtengo una cadena con los proyectos técnicos del proyecto económico
                sCadPTs = PROYECTO.ObtenerPTs(iCodPE);
                string[] aPTs = Regex.Split(sCadPTs, @"@#@");
                //Para cada integrante del pool, lo intentamos insertar en cada proyecto técnico
                string[] aProf = Regex.Split(sCadena, @"##");
                for (int i = 0; i < aProf.Length - 1; i++)
                {
                    sCad = aProf[i];
                    if (sCad != "")
                    {
                        string[] aTareas = Regex.Split(sCad, @",");
                        sOp   = aTareas[0];
                        sProf = aTareas[1];
                        if (sProf != "")
                        {
                            idRecurso = int.Parse(sProf);
                            switch (sOp)
                            {
                            case "I":
                                POOLRPT.Insert(tr, iCodPE, idRecurso);
                                for (int j = 0; j < aPTs.Length - 1; j++)
                                {    //Si el recurso no es RTPT lo inserto
                                    sCad = aPTs[j];
                                    if (sCad != "")
                                    {
                                        iCodPT = int.Parse(sCad);
                                        if (!RTPT.ExisteRTPT(tr, iCodPT, idRecurso))
                                        {
                                            RTPT.Insert(tr, iCodPT, idRecurso);
                                        }
                                    }
                                }
                                break;

                            case "D":
                                POOLRPT.Delete(tr, iCodPE, idRecurso);
                                break;
                            }
                        }
                    }
                }//for
            }
            Conexion.CommitTransaccion(tr);
            //sResul = "OK@#@" + strTablaHTMLIntegrantes;
            sResul = "OK@#@";// +sCad;
        }
        catch (Exception ex)
        {
            Conexion.CerrarTransaccion(tr);
            sResul = "Error@#@" + Errores.mostrarError("Error al grabar la lista de integrantes", ex);
        }
        finally
        {
            Conexion.Cerrar(oConn);
        }
        return(sResul);
    }