protected string Procesar(string sSegMesProy, string nPSN, string sConsPersonas, string sConsNivel, string sProdProfesional, string sProdPerfil, string sAvance, string sPeriodCons, string sPeriodProd, string sClasesAClonar, string strMeses)
    {
        string sResul = "", sw = "0";
        int    nSMPSN_destino    = 0;
        int    t325_anomes_maxC  = 0;
        int    t325_anomes_minA  = 0;
        int    t303_ultcierreeco = 0;

        #region apertura de conexión y transacción
        try
        {
            oConn = Conexion.Abrir();
            tr    = Conexion.AbrirTransaccionSerializable(oConn);
        }
        catch (Exception ex)
        {
            sResul = "Error@#@" + Errores.mostrarError("Error al abrir la conexión", ex);
            return(sResul);
        }
        #endregion

        try
        {
            DataSet ds = SEGMESPROYECTOSUBNODO.ObtenerMesesReferenciaParaClonado(tr, int.Parse(nPSN));
            foreach (DataRow oMes in ds.Tables[0].Rows)
            {
                if (oMes["t325_estado"].ToString() == "C")
                {
                    t325_anomes_maxC = (int)oMes["t325_anomes"];
                }
                if (oMes["t325_estado"].ToString() == "A")
                {
                    t325_anomes_minA = (int)oMes["t325_anomes"];
                }
            }
            foreach (DataRow oMes in ds.Tables[1].Rows)
            {
                t303_ultcierreeco = (int)oMes["t303_ultcierreeco"];
            }

            string[] aAnomes = Regex.Split(strMeses, "##");
            foreach (string oAnomes in aAnomes)
            {
                if (oAnomes == "")
                {
                    continue;
                }

                if (int.Parse(oAnomes) <= t303_ultcierreeco ||
                    int.Parse(oAnomes) <= t325_anomes_maxC)
                {
                    sw = "1";
                    continue;
                }

                nSMPSN_destino = SEGMESPROYECTOSUBNODO.ExisteSegMesProy(tr, int.Parse(nPSN), int.Parse(oAnomes));
                if (nSMPSN_destino != 0)
                {
                    SEGMESPROYECTOSUBNODO.Delete(tr, nSMPSN_destino);
                }

                nSMPSN_destino = SEGMESPROYECTOSUBNODO.Insert(tr, int.Parse(nPSN), int.Parse(oAnomes), "A", 0, 0, false, 0, 0);

                SEGMESPROYECTOSUBNODO.ClonarMes(tr, int.Parse(sSegMesProy),
                                                nSMPSN_destino,
                                                sClasesAClonar,
                                                (sConsPersonas == "1") ? true : false,
                                                (sConsNivel == "1") ? true : false,
                                                (sProdProfesional == "1") ? true : false,
                                                (sProdPerfil == "1") ? true : false,
                                                (sAvance == "1") ? true : false,
                                                (sPeriodCons == "1") ? true : false,
                                                (sPeriodProd == "1") ? true : false,
                                                SUPER.Capa_Negocio.Utilidades.EsAdminProduccion()
                                                );
            }
            Conexion.CommitTransaccion(tr);
            sResul = "OK@#@" + sw;
        }
        catch (Exception ex)
        {
            Conexion.CerrarTransaccion(tr);
            sResul = "Error@#@" + Errores.mostrarError("Error al clonar los datos del mes de referencia.", ex);
        }
        finally
        {
            Conexion.Cerrar(oConn);
        }

        return(sResul);
    }