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);
    }