Entornos de configuración

No sabí­a si llamarlo entorno o ambiente, el caso es que en aplicaciones de las llamadas _de escritorio_, que hayan de funcionar en una red manejando datos que residan en un servidor, son necesarias varias configuraciones:

* *Local*: Son datos referentes a la máquina: que impresora se ha elegido para las facturas, cual para los recibos, que rutas de acceso a datos compartidos, etc.
* *Usuario*: si en nuestra aplicación el usuario puede configurarse cosas, muchas de esas configuraciones deben acompañar al usuario de forma independiente a la máquina: Preferencias de colores, vistas de documentos, filtros personalizados, etc.
* *Global*: Hay configuraciones que afectan de forma general al programa: los permisos de acceso, ruta de instalación, nº de serie, etc.
* *Documento/empresa*: Si el programa maneja documentos o es multiempresa, para cada uno de ellos habrán configuraciones o datos que se han de tener en cuenta de forma independiente a la máquina y al usuario.

Normalmente utilizo una única tabla para almacenar estas configuraciones, con la siguiente estructura:

{background:#def}. |ID|Identificador único|
{background:#fed}. |TABLA|A que tabla o entorno pertenece el dato: GLOBAL, USER, LOCAL, etc.|
{background:#def}. |ID_TABLA|Identificador del usuario, empresa, documento, etc o NULL si es global|
{background:#fed}. |DATO|Nombre/código del dato, por ejemplo: PATH_PDF o PATH_CONTAPLUS o COLOR_WARNING|
{background:#def}. |TIPO|Tipo del dato: I=integer, F=float, D=fecha, S=cadena, B=bit, etc.|
{background:#fed}. |VALOR|Valor almacenado convertido en cadena|

Luego al entrar en el programa lo cargo en listas de objetos para no tener que ir haciendo consultas cada vez que necesito algo de la configuración.