private string obtenerCentrosTrabajo()
    {
        StringBuilder sb = new StringBuilder();

        try
        {
            //Cargamos en una lista los canales de distribución

            List <CANALDIS> listaCanales = CANALDIS.ListaGlobal();
            SqlDataReader   dr           = CENTROTRAB.Catalogo();
            sb.Append("<TABLE id='tblDatos' style='WIDTH: 500px;' class='texto MANO'>");
            sb.Append("<colgroup><col style='width: 20px;' /><col style='width: 280px' /><col style='width: 200px;' /></colgroup>");
            sb.Append("<tbody>");
            string sCD = "";
            while (dr.Read())
            {
                sCD = "";
                sb.Append("<tr id='" + dr["codigo"].ToString() + "' bd='' ");
                sb.Append("style='height:20px;' onclick='ms(this);getCD(this);'>");
                sb.Append("<td style='padding-left:2px;'><img src='../../../images/imgFN.gif'></td>");
                sb.Append("<td><div class='NBR W300'>" + dr["Denominacion"].ToString() + "</div></td>");

                // Damos contenido al combo y seleccionamos la opción
                sb.Append("<td>");
                sb.Append("<select class='combo' style='width:200px;display:none;' onchange='aG(this);'>");

                foreach (CANALDIS oCanal in listaCanales)
                {
                    sb.Append("<option value='" + oCanal.codigo + "' ");
                    if (dr["T009_CDSAP"].ToString() == oCanal.codigo)
                    {
                        sb.Append(" selected ");
                        sCD = oCanal.denominacion;
                    }
                    sb.Append(">" + oCanal.denominacion + "</option>");
                }

                sb.Append("</select><div class='NBR W190' style='padding-left:5px;'>" + sCD + "</div></td>");
                //
                sb.Append("</tr>" + (char)10);
            }
            dr.Close();
            dr.Dispose();
            sb.Append("</tbody>");
            sb.Append("</table>");

            return("OK@#@" + sb.ToString());;
        }
        catch (Exception ex)
        {
            return("Error@#@" + Errores.mostrarError("Error al obtener la relación de centros de trabajo/canales distribución.", ex));
        }
    }
    private string Grabar(string strCentroTrabCanalDis)
    {
        string sResul = "";

        #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
        {
            #region Datos Canales de distribución asignados
            if (strCentroTrabCanalDis != "")
            {
                string[] aCentroTrabCanalDis = Regex.Split(strCentroTrabCanalDis, "///");
                foreach (string oCentroTrabCanalDis in aCentroTrabCanalDis)
                {
                    if (oCentroTrabCanalDis == "")
                    {
                        continue;
                    }
                    string[] aValores = Regex.Split(oCentroTrabCanalDis, "##");
                    ///aValores[0] = bd
                    ///aValores[1] = T009_IDCENTRAB
                    ///aValores[2] = T009_CDSAP
                    switch (aValores[0])
                    {
                    case "U":
                        CENTROTRAB.Update(tr, int.Parse(aValores[1]), aValores[2]);
                        break;
                    }
                }
            }

            #endregion

            Conexion.CommitTransaccion(tr);
            sResul = "OK@#@";
        }
        catch (Exception ex)
        {
            Conexion.CerrarTransaccion(tr);
            sResul = "Error@#@" + Errores.mostrarError("Error al grabar los canales de distribución asociados al centro de trabajo", ex);
        }
        finally
        {
            Conexion.Cerrar(oConn);
        }
        return(sResul);
    }
    private string ObtenerTipoConcepto(string sTipoBusqueda, string sCadena)
    {
        string sResul   = "";
        string sTootTip = "";

        try
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            SqlDataReader             dr = null;

            switch (int.Parse(hdnIdTipo.Value))
            {
            case 1:             // Ambito
                break;

            case 2:             // Responsable de proyecto
                break;

            case 3:             // Naturaleza
                dr = NATURALEZA.CatalogoDenominacion(sCadena, sTipoBusqueda, int.Parse(Session["UsuarioActual"].ToString()));
                break;

            case 4:             // Modelo de contratación
                dr = MODALIDADCONTRATO.CatalogoDenominacion(sCadena, sTipoBusqueda, int.Parse(Session["UsuarioActual"].ToString()));
                break;

            case 5:             // Horizontal
                dr = HORIZONTAL.CatalogoDenominacion(sCadena, sTipoBusqueda, int.Parse(Session["UsuarioActual"].ToString()));
                break;

            case 6:             // Sector
                dr = SECTOR.CatalogoDenominacion(sCadena, sTipoBusqueda, int.Parse(Session["UsuarioActual"].ToString()));
                break;

            case 7:             // Segmento
                dr = SEGMENTO.CatalogoDenominacion(sCadena, sTipoBusqueda, int.Parse(Session["UsuarioActual"].ToString()));
                break;

            case 8:             // Cliente
                dr = CLIENTE.SelectByNombre(sCadena, sTipoBusqueda, false, false, int.Parse(Session["UsuarioActual"].ToString()));
                break;

            case 9:             // Contrato
                dr = CONTRATO.CatalogoDenominacion(sCadena, sTipoBusqueda, int.Parse(Session["UsuarioActual"].ToString()));
                break;

            case 10:            // Cualificador de proyectos a nivel de NODO
                dr = CDP.CatalogoDenominacion(sCadena, sTipoBusqueda, int.Parse(Session["UsuarioActual"].ToString()));
                break;

            case 11:            // Cualificador de proyectos a nivel de SUPERNODO1
                dr = CSN1P.CatalogoDenominacion(sCadena, sTipoBusqueda, int.Parse(Session["UsuarioActual"].ToString()));
                break;

            case 12:            // Cualificador de proyectos a nivel de SUPERNODO2
                dr = CSN2P.CatalogoDenominacion(sCadena, sTipoBusqueda, int.Parse(Session["UsuarioActual"].ToString()));
                break;

            case 13:            // Cualificador de proyectos a nivel de SUPERNODO3
                dr = CSN3P.CatalogoDenominacion(sCadena, sTipoBusqueda, int.Parse(Session["UsuarioActual"].ToString()));
                break;

            case 14:            // Cualificador de proyectos a nivel de SUPERNODO4
                dr = CSN4P.CatalogoDenominacion(sCadena, sTipoBusqueda, int.Parse(Session["UsuarioActual"].ToString()));
                break;

            case 17:            // Proveedores
                //dr = PROVEEDOR.Catalogo(sCadena, sTipoBusqueda, int.Parse(Session["UsuarioActual"].ToString()));
                dr = PROVEEDOR.SelectByNombre(null, sCadena, 2, 0, sTipoBusqueda, false);
                break;

            case 18:        // Centros de responsabilidad
                if (SUPER.Capa_Negocio.Utilidades.EsAdminProduccion())
                {
                    dr = NODO.CatalogoAdministrador(sCadena, sTipoBusqueda);
                }
                else
                if (hdnCaso.Value == "1")
                {
                    dr = NODO.ObtenerNodosUsuarioEsRespDelegColab(null, (int)Session["UsuarioActual"], sCadena, sTipoBusqueda);
                }
                else
                {
                    dr = NODO.ObtenerNodosUsuarioSegunVisionProyectosECO(null, (int)Session["UsuarioActual"], false);
                }
                break;

            case 36:
                dr = NODO.CatalogoAdministrador(sCadena, sTipoBusqueda);
                break;

            case 22:            // Sociedades que facturan
                //dr = EMPRESA.Catalogo(null, "", "", null, null, null, "", "", null, 2, 0);
                dr = EMPRESA.Catalogo(null);
                break;

            case 23:            // Roles
                dr = ROL.Catalogo();
                break;

            case 25:            // Centro de trabajo
                dr = CENTROTRAB.Obtener();
                break;

            case 26:            // Oficina
                dr = OFICINA.Catalogo();
                break;

            case 34:            // Pais
                dr = SUPER.DAL.PAIS.CatalogoDenominacion(sCadena, sTipoBusqueda, int.Parse(Session["UsuarioActual"].ToString()));
                break;

            case 35:            // Provincia
                dr = SUPER.DAL.PROVINCIA.CatalogoDenominacion(sCadena, sTipoBusqueda, int.Parse(Session["UsuarioActual"].ToString()));
                break;

            case 37:            // Organización comercial
                dr = SUPER.BLL.OrganizacionComercial.Catalogo(null, true);
                break;

            case 38:            // Soporte administrativo
                dr = SUPER.Capa_Negocio.SOPORTEADM.Catalogo();
                break;

            case 40:        // Criterios estadísticos económicos empresariales
                dr = CEC.Catalogo();
                break;

            case 41:        // Valores de criterios estadísticos económicos empresariales
                dr = VCEC.Catalogo();
                break;
            }

            sb.Append("<table id='tblDatos' class='texto MAM' style='WIDTH: 350px;'>" + (char)10);
            sb.Append("<colgroup><col style='width:350px;' /></colgroup>" + (char)10);
            sb.Append("<tbody>");

            while (dr.Read())
            {
                switch (int.Parse(hdnIdTipo.Value))
                {
                case 3:         // Naturalezas
                case 4:         // Modelo de contratación
                case 5:         // Horizontal
                case 6:         // Sector
                case 7:         // Segmento
                case 9:         // Contrato
                case 17:        // Proveedores
                case 23:        // Roles
                case 25:        // Centro de trabajo
                case 26:        // Oficina
                case 34:        // País
                case 35:        // Provincia
                case 40:        // Criterios estadísticos económicos empresariales
                case 41:        // Valores de criterios estadísticos económicos empresariales


                    sb.Append("<tr id='" + dr["IDENTIFICADOR"].ToString() + "' title='" + dr["DENOMINACION"].ToString() + "' ");
                    if (int.Parse(hdnIdTipo.Value) == 41)
                    {
                        sb.Append("ceec=" + dr["DENOMINACION"].ToString() + " ");
                    }
                    sb.Append("onclick='mm(event)' ondblclick='insertarItem(this)' onmousedown='DD(event)' style='height:20px;'>");
                    sb.Append("<td style='padding-left:5px;'><nobr class='NBR W320'>" + dr["DENOMINACION"].ToString() + "</nobr></td>");
                    sb.Append("</tr>" + (char)10);
                    break;

                case 8:         // Cliente
                    //sb.Append("<tr id='" + dr["t302_idcliente"].ToString() + "' ");
                    //sb.Append("onclick='mmse(this)' ondblclick='insertarItem(this)' onmousedown='DD(this)' style='height:20px;'>");
                    //sb.Append("<td>" + dr["t302_denominacion"].ToString() + "</td>");
                    //sb.Append("</tr>" + (char)10);

                    sb.Append("<tr id='" + dr["t302_idcliente"].ToString() + "' title='" + dr["t302_denominacion"].ToString() + "' ");

                    if ((bool)dr["t302_estado"])
                    {
                        sb.Append("onclick='mm(event)' ondblclick='insertarItem(this)' onmousedown='DD(event)' style='height:20px;'");
                    }
                    else
                    {
                        sb.Append("onclick='mm(event)' ondblclick='insertarItem(this)' onmousedown='DD(event)' style='height:20px;color:gray;'");
                    }
                    //else sb.Append(" onmousedown='eventos(this);' style='height:20px;color:gray;'");

                    sb.Append("><td><img src='../../../../images/img" + dr["tipo"].ToString() + ".gif' ");
                    if (dr["tipo"].ToString() == "M")
                    {
                        sb.Append("style='margin-right:5px;'");
                    }
                    else
                    {
                        sb.Append("style='margin-left:15px;margin-right:5px;'");
                    }
                    sb.Append("><nobr class='NBR W310'>" + dr["t302_denominacion"].ToString() + "</nobr></td>");
                    sb.Append("</tr>" + (char)10);

                    break;

                case 10:        // Cualificador de proyectos a nivel de NODO
                case 11:        // Cualificador de proyectos a nivel de SUPERNODO1
                case 12:        // Cualificador de proyectos a nivel de SUPERNODO2
                case 13:        // Cualificador de proyectos a nivel de SUPERNODO3
                case 14:        // Cualificador de proyectos a nivel de SUPERNODO4
                    sTootTip = "";
                    if (Utilidades.EstructuraActiva("SN4") && int.Parse(hdnIdTipo.Value) <= 14)
                    {
                        sTootTip = "<label style='width:60px'>" + Estructura.getDefCorta(Estructura.sTipoElem.SUPERNODO4) + ":</label> " + dr["t394_denominacion"].ToString() + "<br>";
                    }
                    if (Utilidades.EstructuraActiva("SN3") && int.Parse(hdnIdTipo.Value) <= 13)
                    {
                        sTootTip += "<label style='width:60px'>" + Estructura.getDefCorta(Estructura.sTipoElem.SUPERNODO3) + ":</label> " + dr["t393_denominacion"].ToString() + "<br>";
                    }
                    if (Utilidades.EstructuraActiva("SN2") && int.Parse(hdnIdTipo.Value) <= 12)
                    {
                        sTootTip += "<label style='width:60px'>" + Estructura.getDefCorta(Estructura.sTipoElem.SUPERNODO2) + ":</label> " + dr["t392_denominacion"].ToString() + "<br>";
                    }
                    if (Utilidades.EstructuraActiva("SN1") && int.Parse(hdnIdTipo.Value) <= 11)
                    {
                        sTootTip += "<label style='width:60px'>" + Estructura.getDefCorta(Estructura.sTipoElem.SUPERNODO1) + ":</label> " + dr["t391_denominacion"].ToString() + "<br>";
                    }
                    if (int.Parse(hdnIdTipo.Value) <= 10)
                    {
                        sTootTip += "<label style='width:60px'>" + Estructura.getDefCorta(Estructura.sTipoElem.NODO) + ":</label> " + dr["t303_denominacion"].ToString();
                    }

                    sb.Append("<tr id='" + dr["IDENTIFICADOR"].ToString() + "' title='" + dr["DENOMINACION"].ToString() + "' ");
                    sb.Append("onclick='mm(event)' ondblclick='insertarItem(this)' onmousedown='DD(event)' ");
                    sb.Append("style='height:20px;noWrap:true;' title=\"cssbody=[dvbdy] cssheader=[dvhdr] header=[<img src='../../../../images/info.gif' style='vertical-align:middle'>  Estructura] body=[" + sTootTip + "] hideselects=[off]\">");

                    sb.Append("<td><nobr class='NBR W320'>" + dr["DENOMINACION"].ToString() + "</nobr></td>");
                    sb.Append("</tr>" + (char)10);
                    break;

                case 18:        // Centros de responsabilidad
                case 36:
                    sTootTip = "";
                    if (Utilidades.EstructuraActiva("SN4"))
                    {
                        sTootTip = "<label style='width:60px'>" + Estructura.getDefCorta(Estructura.sTipoElem.SUPERNODO4) + ":</label> " + dr["DES_SN4"].ToString() + "<br>";
                    }
                    if (Utilidades.EstructuraActiva("SN3"))
                    {
                        sTootTip += "<label style='width:60px'>" + Estructura.getDefCorta(Estructura.sTipoElem.SUPERNODO3) + ":</label> " + dr["DES_SN3"].ToString() + "<br>";
                    }
                    if (Utilidades.EstructuraActiva("SN2"))
                    {
                        sTootTip += "<label style='width:60px'>" + Estructura.getDefCorta(Estructura.sTipoElem.SUPERNODO2) + ":</label> " + dr["DES_SN2"].ToString() + "<br>";
                    }
                    if (Utilidades.EstructuraActiva("SN1"))
                    {
                        sTootTip += "<label style='width:60px'>" + Estructura.getDefCorta(Estructura.sTipoElem.SUPERNODO1) + ":</label> " + dr["DES_SN1"].ToString() + "<br>";
                    }
                    sTootTip += "<label style='width:60px'>" + Estructura.getDefCorta(Estructura.sTipoElem.NODO) + ":</label> " + dr["DENOMINACION"].ToString();

                    sb.Append("<tr id='" + dr["IDENTIFICADOR"].ToString() + "' title='" + dr["DENOMINACION"].ToString() + "' ");
                    sb.Append("onclick='mm(event)' ondblclick='insertarItem(this)' onmousedown='DD(event)' ");
                    sb.Append("style='height:20px;noWrap:true;' title=\"cssbody=[dvbdy] cssheader=[dvhdr] header=[<img src='../../../../images/info.gif' style='vertical-align:middle'>  Estructura] body=[" + sTootTip + "] hideselects=[off]\">");

                    sb.Append("<td><nobr class='NBR W320'>" + dr["DENOMINACION"].ToString() + "</nobr></td>");
                    sb.Append("</tr>" + (char)10);
                    break;

                case 22:        // Empresas que facturan
                    if (bool.Parse(dr["t313_estado"].ToString()))
                    {
                        sb.Append("<tr id='" + dr["t313_idempresa"].ToString() + "' title='" + dr["t313_denominacion"].ToString() + "' ");
                        sb.Append("onclick='mm(event)' ondblclick='insertarItem(this)' onmousedown='DD(event)' style='height:20px;'>");
                        sb.Append("<td><nobr class='NBR W320'>" + dr["t313_denominacion"].ToString() + "</nobr></td>");
                    }
                    else
                    {
                        sb.Append("<tr id='" + dr["t313_idempresa"].ToString() + "' title='" + dr["t313_denominacion"].ToString() + "' ");
                        sb.Append("onclick='mm(event)' ondblclick='insertarItem(this)' onmousedown='DD(event)' style='height:20px;'>");
                        sb.Append("<td style='color:gray'><nobr class='NBR W320'>" + dr["t313_denominacion"].ToString() + "</nobr></td>");
                    }

                    sb.Append("</tr>" + (char)10);
                    break;

                case 37:        // Organización comercial
                    sb.Append("<tr id='" + dr["ta212_idorganizacioncomercial"].ToString() + "' title='" + dr["ta212_denominacion"].ToString() + "' ");
                    if (int.Parse(hdnIdTipo.Value) == 41)
                    {
                        sb.Append("ceec=" + dr["ta212_denominacion"].ToString() + " ");
                    }
                    sb.Append("onclick='mm(event)' ondblclick='insertarItem(this)' onmousedown='DD(event)' style='height:20px;'>");
                    sb.Append("<td style='padding-left:5px;'><nobr class='NBR W320'>" + dr["ta212_denominacion"].ToString() + "</nobr></td>");
                    sb.Append("</tr>" + (char)10);
                    break;

                case 38:        // Soporte administrativo
                    sb.Append("<tr id='" + dr["NUM_EMPLEADO"].ToString() + "' title='" + dr["profesional"].ToString() + "' ");
                    sb.Append("onclick='mm(event)' ondblclick='insertarItem(this)' onmousedown='DD(event)' style='height:20px;'>");
                    sb.Append("<td style='padding-left:5px;'><nobr class='NBR W320'>" + dr["profesional"].ToString() + "</nobr></td>");
                    sb.Append("</tr>" + (char)10);
                    break;
                }
            }
            dr.Close();
            dr.Dispose();
            sb.Append("</tbody>");
            sb.Append("</table>");

            sResul = "OK@#@" + sb.ToString();
        }
        catch (System.Exception objError)
        {
            sResul = "Error@#@" + Errores.mostrarError("Error al leer : " + sTitulo, objError);
        }
        return(sResul);
    }