private string ObtenerDatos(short nEmpresa, short nOficina, byte nEmpleado)
    {
        StringBuilder sb = new StringBuilder();
        int           i  = 0;

        sb.Append("<table id='tblDatos' class='texto MA' style='WIDTH: 950px;'>");
        sb.Append("<colgroup><col style='width:300px;' /><col style='width:300px' /><col style='width:300px' /><col style='width:50px;' /></colgroup>");
        sb.Append("<tbody>");
        SqlDataReader dr = OFIEMPCAL.Catalogo(nEmpresa, nOficina, nEmpleado);

        while (dr.Read())
        {
            sb.Append("<tr id='" + i.ToString() + "' emp='" + dr["T313_IDEMPRESA"].ToString() + "' ofi='" + dr["T010_IDOFICINA"].ToString() + "' cal='" + dr["t066_idcal"].ToString() + "' bd='' onclick='ms(this);' ondblclick='getCal(this);' style='height:16px;'>");
            sb.Append("<td style='padding-left:5px;'>" + dr["t313_denominacion"].ToString() + "</td>");
            sb.Append("<td>" + dr["T010_DESOFICINA"].ToString() + "</td>");
            sb.Append("<td>" + dr["t066_DESCAL"].ToString() + "</td>");
            sb.Append("<td style='text-align:right;padding-right:5px;'>" + dr["NUMERO"].ToString() + "</td></tr>");
            i++;
        }
        dr.Close();
        dr.Dispose();
        sb.Append("</tbody>");
        sb.Append("</table>");
        return(sb.ToString());
    }
    protected string Grabar(string strDatos)
    {
        string sResul = "";

        try
        {
            oConn = Conexion.Abrir();
            tr    = Conexion.AbrirTransaccion(oConn);
        }
        catch (Exception ex)
        {
            sResul = "Error@#@" + Errores.mostrarError("Error al abrir la conexión", ex);
            return(sResul);
        }

        try
        {
            string[] aEIC = Regex.Split(strDatos, "///");

            foreach (string oEIC in aEIC)
            {
                if (oEIC == "")
                {
                    break;
                }
                string[] aDatos = Regex.Split(oEIC, "##");
                ///aDatos[0] = empresa;
                ///aDatos[1] = oficina;
                ///aDatos[2] = calendario;

                OFIEMPCAL.Update(tr, short.Parse(aDatos[1]), short.Parse(aDatos[0]), int.Parse(aDatos[2]));
            }

            Conexion.CommitTransaccion(tr);

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

        return(sResul);
    }