Extensión de ficha
Una extensión de ficha nos permite acceder a una ficha de una tabla distinta a la tabla asociada al formulario principal.
Un uso habitual será el de editar maestros de extensión, aunque no es obligatorio, pues también podremos usarlo para editar maestros normales de la ficha actual, e incluso de otra tabla no relacionada.
Se trata de un sub-objeto de formulario, por lo que lo crearemos a través del panel de sub-objetos del editor de formularios.
El formulario estará asociado a una tabla y mediante un sub-objeto extensión de ficha declarado en el mismo, resolveremos cuál será la otra tabla que va a ser editada en el formulario.
Propiedades
Identificador
Etiqueta alfanumérica que identifica de forma unívoca al sub-objeto. Este identificador será el que usemos en fórmulas y para referenciarlo en otras propiedades.
Constará de mayúsculas y números exclusivamente. Al identificar de forma unívoca una variable no puede haber duplicidad.
Nombre
Etiqueta alfanumérica que servirá como descriptor del sub-objeto. Se usará para presentar información de la misma en objetos e inspectores.
Podemos definir una etiqueta por cada idioma presente en el proyecto.
Estilos
Podemos definir el estilo siguiente:
Privado
Limita el acceso del usuario final al sub-objeto desde puntos donde no se haya programado el acceso al mismo.
Comentarios
Esta propiedad nos permite documentar el uso del sub-objeto.
Modo
Nos permite definir el modo en el que se cargará la otra ficha. Hay dos valores posibles:
Campo puntero
Lo usaremos cuando queramos que la ficha de extensión sea un maestro de la tabla asociada al formulario.
Proceso
Lo usaremos cuando queramos que la ficha de extensión sea una ficha de otra tabla que no esté enlazada con la actual.
Tabla
Esta propiedad podremos editarla si en la propiedad modo hemos asignado el valor campo puntero.
Proceso
Esta propiedad estará disponible si en la propiedad modo hemos asignado el valor proceso. en ella seleccionaremos el proceso que resolverá la ficha que queremos usar como extensión de la ficha asociada al formulario. El proceso, tendrá que tener como salida una ficha de la tabla que usaremos como extensión de la ficha. En este caso, en la propiedad tabla se rellenará automáticamente con la tabla de salida de dicho proceso.
Alta ficha principal
Esta propiedad nos permite definir el comportamiento de la ficha de extensión en el caso de un alta de registro de la ficha principal. Las opciones posibles son:
Previo a la operación principal
Si esta opción está activada, cuando se mande guardar la ficha principal, el sistema forzará antes la grabación de la ficha de extensión.
Alta ficha de extensión permitida
Si esta opción está activada, dará de alta la ficha de extensión al grabar la ficha principal. Si no está activada, no dará de alta la ficha de extensión.
Modificación ficha de extensión permitida
Si esta opción está activada, modificará la ficha de extensión al grabar la ficha principal. Si no está activada, no modificará la ficha de extensión.
Baja ficha principal
Esta propiedad nos permite definir el comportamiento de la ficha de extensión en el caso de una baja de la ficha principal. Las opciones posibles son:
Previo a la operación principal
Si esta opción está activada, cuando se mande borrar la ficha principal, el sistema forzará antes el borrado de la ficha de extensión.
Baja ficha de extensión permitida
Si esta opción está activada, borrará la ficha de extensión al borrar la ficha principal. Si no está activada, no borrará la ficha de extensión.
Modificación ficha principal
Esta propiedad nos permite definir el comportamiento de la ficha de extensión en el caso de una modificación del registro de la ficha principal. Las opciones posibles son:
Previo a la operación principal
Si esta opción está activada, cuando se mande guardar la ficha principal, el sistema forzará antes la grabación de la ficha de extensión.
Alta ficha de extensión permitida
Si esta opción está activada, dará de alta la ficha de extensión al grabar la ficha principal. Si no está activada, no dará de alta la ficha de extensión.
Modificación ficha de extensión permitida
Si esta opción está activada, modificará la ficha de extensión al grabar la ficha principal. Si no está activada, no modificará la ficha de extensión.
Para editar un campo de una extensión de ficha añadiremos al formulario el control de edición correspondiente y, en la propiedad ficha extensión, seleccionaremos el sub-objeto extensión de ficha declarado en el formulario del que va a alimentarse. Una vez hecho esto, si editamos la propiedad contenido del mismo y abrimos el asistente de fórmulas, veremos que al abrir la lista de campos nos presentará directamente los campos de la extensión de ficha y no de la ficha asociada al formulario.
En los formularios pueden convivir tanto controles que visualicen/editen el maestro como hasta ahora, como un maestro, con controles que usando la extensión de ficha editen directamente el maestro.
Debemos de tener en cuenta que si usamos controles de ficha de extensión para editar un maestro, para dar de alta un nuevo maestro, debemos limpiar previamente el puntero #ID, poniéndolo a 0, porque si no, lo que haríamos sería editar directamente la última ficha seleccionada, en lugar de dar de alta un nuevo maestro de extensión.
Nuestra recomendación es usar un botón o check que permita alternar entre ambos métodos y que mediante manejador de evento se encargue de limpiar el maestro en el caso de alta.
Tanto las extensiones de ficha como los maestros de extensión como los índices complejos son elementos independientes, pueden existir sin los demás, aunque es cierto que se complementan, pueden usarse independientemente del resto.
Un formulario que esté asociado a una tabla de tipo maestro de extensión podremos usarlo para resolver herencia inversa en un formulario de su tabla padre. Ver el capítulo dedicado al sub-objeto inserción para ampliar información al respecto.
Veamos un ejemplo práctico, podremos definir un formulario de origen FACTURA (ficha principal) y declarar como ficha de extensión el puntero a la tabla CLIENTE (ficha de extensión). En el formulario podremos poner controles tanto de la tabla FACTURA como de la tabla CLIENTE y el usuario podrá editar campos de ambas tablas en el mismo formulario. Velneo se encarga de almacenar la información de ambas tablas tras un alta, baja o modificación según la configuración que el desarrollador haya definido en la ficha de extensión.
Para declarar una ficha de extensión en el formulario tan sólo tenemos que crear el subobjeto y rellenar las siguientes propiedades:
Campo puntero
Nos permite editar en el formulario, subformulario o vista de datos la información de cualquier maestro, incluso dar de alta el registro si no existe, modificarlo e incluso podríamos llegar a eliminar un maestro directamente desde la ficha de extensión.
Proceso
Nos permite mostrar y editar en el formulario, subformulario o vista de datos cualquier registro de cualquier tabla ya dentro del proceso podremos obtener y alimentar la ficha de salida del proceso con el registro de la tabla que nos interese. Al igual que ocurría con el campo puntero, la ficha de extensión editada podemos usarla para realizar cualquier operación de base de datos, alta, modificación o baja.
La ficha de extensión permite alimentar no sólo a los controles del formulario principal, también podemos aplicar fichas de extensión en subformularios e incluso en formularios incrustados en el control vista de datos del formulario.
Velneo gestiona automáticamente como se comportarán las fichas de extensión respecto a las operaciones de la ficha principal. Hay tres propiedades importantes que debes revisar cuando creas una ficha de extensión ya que de esta configuración depende las operaciones que Velneo realizará de forma automática de las fichas de extensión cuando realice las operaciones de alta, baja o modificación de la ficha principal del formulario:
Alta ficha principal Baja ficha principal Modificación ficha principal
Se pueden marcar de forma independiente los check de alta, modificación o baja indicando si debe realizarse esa operación para el registro de la ficha de extensión. Hay que tener en cuenta que cuando se produce el alta de la ficha principal, la ficha de extensión puede ya existir, por ese motivo se contempla en alta y modificación la posibilidad de que la ficha de extensión pueda estar en cualquiera de los dos estados. Además, es importante marcar o desmarcar el check de previo a la operación principal para garantizar el orden en que se realizan las operaciones, algo fundamental cuando por ejemplo la extensión de ficha es maestra de la ficha principal, en ese caso el alta o modificación debe ser previo y lo contrario sucede si la ficha de extensión corresponde a una tabla histórica. En las bajas debemos proceder de forma inversa.
Cuando creamos un formulario de una tabla de extensión Velneo nos creará automáticamente la ficha de extensión de la tabla padre y le pondrá el identificador ID a la ficha de extensión.
Una vez declarada la ficha de extensión podremos crear controles en el formulario editando información tanto de la ficha principal como de cualquiera de las fichas de extensión. Para hacerlo tendremos que cubrir adecuadamente la nueva propiedad “Ficha extensión” que encontraremos en los controles del formulario. Por defecto esta propiedad asume el valor ".ninguno" lo que permite usar los datos de la ficha principal o podemos elegir cualquier de las fichas de extensión.
Cuando editemos propiedades de los controles del formulario veremos como en el editor de fórmulas nos permitirá diferentes posibilidades, por ejemplo:
En la propiedad contenido podremos utilizar datos de la ficha principal o de la ficha de extensión seleccionada.
En las propiedades condición de visible o condición de activo, por ejemplo, veremos que la ventana de selección de campo para la fórmula nos mostrará el árbol con todas las fichas de extensión más la ficha principal. Es decir, podremos condicionar un control a que se cumplan condiciones en cualquiera de la fichas que tengamos declaradas en el formulario.
Velneo gestionará automáticamente la sincronización de la información entre todas las fichas presentes en el formulario, de tal forma que cuando editemos un dato de un maestro podremos ver como cambia en tiempo real en todos los lugares donde se usa. Todo esto sin necesidad de que el desarrollador escriba ni una sola línea de código.
Otros temas importantes a tener en cuenta
Si en el formulario de clientes declaramos un edit con el contenido #ID.NAME, ese edit te servirá para hacer la selección de la entidad del cliente, pero no te servirá para modificar directamente el nombre de la entidad.
Si deseamos permitir el nombre de la entidad que es una ficha de extensión en el formulario del cliente debemos insertar un control de edición con la propiedad “Ficha extensión” ID y en el contenido declararemos #NAME, pues el control pertenece al registro de entidad.
Si declaramos en el mismo formulario los dos controles anteriores, es decir un edit sobre la ficha principal (cliente) con el contenido #ID.NAME que nos permitirá seleccionar la entidad y declaramos también un control de edición para la ficha de extensión ID (entidad) con el contenido #NAME que nos permitirá crear una nueva entidad. Tendremos que gestionar el modo en el que esté trabajando el usuario que podrá ser de selección o de alta. ¡Atención! debemos tener la precaución de controlar que si el usuario pasa del modo selección al modo alta debemos limpiar el campo ID la tabla clientes para que no apunte a ninguna entidad, ya que de lo contrario lo que escribiese el usuario en el edit será el nombre con el que se modificaría la ficha seleccionada previamente.