====== Protección de campo ====== Es posible proteger un campo para que uno o varios usuarios no puedan cambiar su contenido. La protección se aplica tanto en las fichas donde aparece el campo, como en las rejillas. Proteger un campo: - Situarse en el campo a proteger. - Seleccionar //Edición/Protección de campo//. Se abre una rejilla donde podemos meter los datos relevantes. ^Campo ^Descripción ^ |Usuario | Poner el código del usuario para el que se quiere proteger el campo. También se puede poner el usuario ''PUBLIC'' que afecta a todos los usuarios que no tengan un registro para si mismo (ver abajo). | |Escritura |Poner 'N' para impedir los cambios sobre el campo. | |Lectura |Sin usar. | |Condición |Este campo se puede editar con //F6//, terminando la edición con la tecla //Intro//. Aquí se puede poner una condición que tiene que cumplir el registro actual para que esté activo la protección. Se explica más detallado abajo. | ===== El usuario PUBLIC ===== Con el usuario ''PUBLIC'' se puede denegar la escritura de un campo a todos los usuarios. Luego se puede definir por separado los usuarios que sí deberían poder modificar el campo. El ejemplo a continuación prohibe la escritura de un campo a todos los usuarios menos a ''SMART''. ^Usuario ^Escritura ^Lectura ^Condición ^ |PUBLIC |N |N | | |SMART |N |S | | ===== Condiciones ===== En algunos casos, es necesario poner una condición para refinar los registros a los que el usuario no debería tener acceso. Un ejemplo son todos los campos de las fichas basadas en la tabla de los terceros, por ejemplo clientes, proveedores, bancos, empleados.\\ Si queremos proteger el campo //Forma de pago// solo para los proveedores, tenemos que poner lo siguiente en el campo //Condición//: TIPO = 'PR' Otras condiciones permitidas son TIPO in ('CL', 'PR') TIPO = 'CL' or TIPO = 'PR' ===== Cambio masivo (obsoleto) ===== Para hacer un cambio masivo para proteger un campo para varios usuarios de golpe, se puede adaptar la siguiente instrucción y ejecutarla en la base de datos. Esto siempre se debería hacer como usuario SYSDBA y después de hablarlo con el servicio técnico de Smart. insert into Z_CAMPOS_PROTEGIDOS (NOMBRE_TABLA, NOMBRE_CAMPO, USUARIO, LECTURA, ESCRITURA, CONDICION) select 'TERCERO', 'COD_FORMA_PAGO', a.CODIGO, 'N', 'N', 'TIPO = ''PR''' from USUARIO a left join Z_CAMPOS_PROTEGIDOS b on a.CODIGO = b.USUARIO and b.NOMBRE_TABLA = 'TERCERO' and b.NOMBRE_CAMPO = 'COD_FORMA_PAGO' where b.NOMBRE_TABLA is null and a.CODIGO not in ('SYSDBA', 'Poner aquí los códigos de usuarios que deben de tener acceso');