• No se han encontrado resultados

08 Desarrollo completo de una aplicación

N/A
N/A
Protected

Academic year: 2021

Share "08 Desarrollo completo de una aplicación"

Copied!
416
0
0

Texto completo

(1)

08

Desarrollo

completo de

una aplicación

(2)
(3)

8.1

Tipos de tabla

Ya hemos visto cómo las tablas son los objetos que usamos para almace-nar la información de manera organizada. También hemos introducido las tablas de tipo maestro de clave numérica y las de tipo estático. A continua-ción vamos a ver el resto de tipos de tablas de datos con los que cuenta Velázquez Visual.

8.1.1. Tabla Submaestra

Son tablas que necesitan de una tabla padre para completarse, estando su código constituido por la unión del código del padre, o padres (no hay lími-te en el número de niveles) más el suyo propio. De esta forma la tabla sub-maestra tendrá un subcódigo propio por cada código padre. Pueden exis-tir dos fichas con el mismo subcódigo mientras la ficha de la tabla padre sea diferente.

Ejemplos de tablas submaestras pueden ser: PROVINCIA, siendo su padre PAIS. POBLACIÓN, siendo su padre PROVINCIA, etc.

Para crear una tabla submaestra debemos pulsar el botón Nueva tabla

sub-maestra , en la barra de herramientas situada a la derecha en la ventana

Esquema de tablas del Editor. Aparecerá la ventana correspondiente a las

propiedades de la tabla submaestra.

08

Desarrollo completo de una aplicación

(4)

Como podemos ver, las propiedades son similares a las vistas para la tabla maestra, con el añadido de que debe indicarse cuál va a ser la tabla de

da-tos padre de la tabla submaestra.

La Longitud-rango que especificamos no es el número máximo de registros de la tabla, sino de registros por cada maestro de la tabla padre.

Ejemplo: creación de una tabla submaestra

En este ejemplo vamos a crear una tabla maestra y a continuación otra tabla, submaestra de la anterior. Para ello debemos seguir los siguientes pasos: Entramos en el Editor de proyectos y creamos un nuevo proyecto. Creamos una tabla maestra (desde el Editor de Esquemas pulsamos sobre el botón Nueva tabla maestra ) con las siguientes propiedades: nombre

plural: Países. Nombre singular: País. Pulsamos el botón Aceptar.

A continuación pulsamos el botón Nueva tabla submaestra y creamos una tabla submaestra con las siguientes propiedades: Tabla de datos padre: PAISES. Nombre plural: Provincias. Nombre singular: Provincia. Pulsamos el botón Aceptar.

VENTANA CREACIÓN DE MAESTRO e

Nueva tabla maestra Nueva tabla submaestra

(5)

Si observamos el Editor de Esquemas podremos ver cómo hay dos tablas: PAISES y PROVINCIAS. También se puede apreciar cómo Velázquez Visual ha enlazado directamente las tablas PAISES y PROVINCIAS. Esto siempre lo hace al crear una tabla submaestra, creándose automáticamente dicho enlace porque la relación que existe entre una tabla submaestra y su tabla padre es muy fuerte (recuerde que el código de la tabla submaestra está compuesto por el código de la tabla padre más el suyo propio).

08

Desarrollo completo de una aplicación

CREACIÓN DE SUBMAESTRO

(6)

Se pueden crear tantos niveles de tablas submaestras como se quiera, es de-cir, en nuestro caso se podría crear otra tabla submaestra que tenga como bla padre a PROVINCIAS (por ejemplo una tabla CIUDADES), y a su vez la ta-bla submaestra creada ahora sería la tata-bla padre de otra submaestra y así in-definidamente. El índice CODIGO de cada una estaría formada como se pue-de suponer, por el campo CODIGO pue-de la tabla padre más el campo CODIGO de la propia tabla. Por lo general, a la hora de realizar un desarrollo con Veláz-quez Visual, no suelen realizarse más de dos niveles de tablas submaestras, no por limitación técnica ni de rendimiento, sino por simplificar la programación.

8.1.2. Tabla Arbolada

Las tablas arboladas son en realidad tablas maestras que se visualizan con una estructura arbolada (al estilo de un árbol de directorios), de modo que su campo CODIGO se abre en nuevas ramas por cada carácter o grupo de

ca-ÍNDICE CÓDIGO DE LA TABLA SUBMAESTRA

e

Cuestiones

1. Crear dos tablas: una de tipo maestro y otra submaestra de la ante-rior. Ver cómo el índice código de la tabla submaestra está com-puesto por el código propio y el de su tabla padre.

2. Crear una tabla de tipo maestro: PAISES, otra submaestra de PAI-SES: COMUNIDADES, y otra submaestra de COMUNIDADES: PRO-VINCIAS. Comprobar cómo Velázquez Visual no sólo enlaza PAISES con COMUNIDADES y COMUNIDADES con PROVINCIAS, sino que también enlaza PAISES con PROVINCIAS. Comprobar también có-mo el índice código de PROVINCIAS está compuesto por el código propio más el de COMUNIDADES y PAISES.

(7)

racteres que añadimos. Es el campo CODIGO el que determina la ramificación, representando cada carácter o grupo de caracteres un piso o nivel del árbol. Veámoslo con un ejemplo de Astronomía: en el Universo encontramos muchos tipos de objetos, por ejemplo galaxias. Pero las galaxias a su vez se clasifican en espirales, barradas, irregulares... y cada uno de estos grupos presenta más subdivisiones aún, y esto ocurre para casi todos los tipos de objeto del Uni-verso, sean galaxias, estrellas, nebulosas... Claramente, si queremos organizar los tipos de objeto del Universo en una tabla, ésta ha de ser de tipo arbolado. Para introducir un registro en la tabla arbolada hemos de especificar su có-digo y su nombre, lo que se hace en ejecución mediante un formulario.

Por ejemplo, para el registro “galaxia” especificamos “G”, y ya tenemos un tipo de objeto: un registro de la tabla.

Metamos ahora otro registro, por ejemplo, galaxia espiral. Las galaxias es-pirales son un subgrupo de las galaxias y esto queremos que se refleje en la estructura de la tabla. Para ello asignamos el código “GS” al tipo “gala-xia espiral”: ya tenemos dos registros, este último colgando del anterior, de modo que las galaxias espirales heredan todas las características de las ga-laxias. De igual modo, al registro “galaxia irregular” podríamos asignarle el código “GI”, reflejando así que las irregulares son un subgrupo de las gala-xias. Ya tenemos tres registros, colgando los dos últimos del primero. El árbol puede seguir creciendo (el límite está en la longitud del código de la tabla), por ejemplo, asociamos el código “GSA” a las “galaxias espirales de tipo A” (y ya tendríamos cuatro registros en la tabla).

08

Desarrollo completo de una aplicación

(8)

Hasta ahora hemos construido cada nivel con un solo carácter del campo código, pero también puede hacerse con más de uno, por ejemplo asig-nando GAL a las galaxias, ES a las espirales, A a las de tipo A...

Al igual que el resto de tablas, cada registro de una tabla arbolada está or-ganizado en campos. Por seguir con este ejemplo, los tipos de objeto del Universo podrían tener los campos Año de descubrimiento, Investigado ? (booleano), Naturaleza del objeto, etc.

Gracias a las tablas arboladas podemos definir el tipo al que pertenecen los registros de otra tabla, histórica de la arbolada. Por ejemplo, supongamos la tabla LIBROS, en la que cada registro se refiere a un volumen en particu-lar. En una tabla arbolada que llamaremos MATERIAS cada registro hará re-ferencia a una materia en particular (historia, historia del siglo XX, historia del siglo XIX, historia militar del siglo XX, historia de la monarquía del siglo XX... es decir, una estructura claramente arbolada). Estableciendo que LI-BROS sea histórica de MATERIAS, podemos capturar desde LILI-BROS la ma-teria a la que pertenece el libro (la mama-teria no es más que un registro de la arbolada MATERIAS).

Cuando presentamos los históricos de una tabla arbolada, podemos hacer que, dado un tipo o nivel de la arbolada, nos presente todos los históricos de todas las ramas contenidas en él. A esto se le denomina herencia

arbo-lada y se consigue activando el botón . Si desactivamos la herencia ar-bolada y pedimos que nos muestre los históricos a un nivel determinado, sólo nos mostrará los registros definidos con el tipo correspondiente a ese nivel (y no todos los contenidos en niveles inferiores).

Cuando introducimos un nuevo registro en una tabla arbolada hemos de te-ner cuidado a la hora de meter el código. Si un registro tiene por código A, y otro tiene AB, el de código AB se verá incluido en la rama iniciada por el de código A. Ahora bien, si usamos números tengamos cuidado, ya que to-dos los registros cuyo código empiece por 1 (10, 119, 1031...) se verán in-cluidos dentro de la rama iniciada por el de código 1, todos aquellos cuyo código comience por 2 se incluirán en la rama iniciada por el de código 2 y así sucesivamente. Lo más usual es definir el campo código como alfanu-mérico.

Se recomienda utilizar un Alfa40 para el campo código, con el fin de ahorrar espacio en disco.

TRUCO Herencia arbolada

(9)

Las propiedades de la tabla arbolada son las mismas que las de la tabla maestra. Especial mención merece el apartado Longitud-Rango: se refiere al número de niveles que va a tener la tabla arbolada. Por ejemplo, si una tabla arbolada tiene de longitud 2 bytes, el árbol tendrá 3 niveles, si tiene 4 bytes tendrá 6 niveles, etc.

Ejemplo: creación de una tabla arbolada

Vamos a crear una tabla arbolada a la que llamaremos FAMILIAS. Éste es un ejemplo clásico, ya que una familia está compuesta de subfamilias, que a su vez pueden presentar más subniveles.

Dentro del Editor de Esquemas, pulsamos el botón Nueva tabla arbolada . Aparecerá la ventana creación de maestro con clave arbolada, en la que es-cribimos Nombre plural: Familias. Nombre singular: Familia.

Según el número de pisos que vaya a tener el árbol seleccionamos la LON-GITUD-RANGO. En este caso marcamos el radio botón 8 bytes, lo que nos permite alcanzar hasta 12 subniveles.

Pulsamos el botón Aceptar.

En el Editor de Esquemas aparecerá el icono de la tabla arbolada FAMILIAS.

08

Desarrollo completo de una aplicación

CREACIÓN DE MAESTRO CON CLAVE ARBOLADA

e

(10)

8.1.3. Tablas históricas

La característica principal de una tabla histórica es que no tiene campo CO-DIGO que permita apuntar a un registro concreto, pero sí puede tener otros índices de clave única. Se utilizan para almacenar las líneas de una tabla maestra. Las tablas históricas suelen tener un campo enlazado a una tabla maestra y un índice que será usado para declarar el enlace histórico de la tabla maestra.

Sus propiedades son fundamentalmente las vistas hasta ahora para el resto de tablas. Incorpora además la posibilidad de que Velázquez Visual cree automáticamente un campo llamado FECHA y su correspondiente ín-dice. También es posible indicar cuál o cuáles van a ser sus tablas maes-tras (lo normal es no enlazar la tabla a sus maestros desde esta ventana de propiedades).

El árbol, además del código, siempre presenta (y sólo presenta) el campo Nombre. Para incluir más datos definimos el campo Nombre como fórmula alfabética, o con un contenido inicial en función de otros campos, y así podremos mostrar lo que queramos.

TRUCO

Cuestiones

1. Encontrar distintos casos que presenten una estructura arbolada (clasificaciones biológicas, materias de libros, habitaciones de un hotel, estructura de los capítulos de un libro...).

2. Crear una tabla arbolada y construir el árbol de las galaxias espirales. 3. Crear una tabla histórica de la arbolada que hemos creado en la cuestión 2. Dar de alta una serie de registros con distintos tipos de-finidos en la tabla arbolada. Una vez hecho esto comprobar cómo funciona la herencia arbolada.

(11)

Ejemplo: creación de una tabla tipo histórico

Vamos a crear dos tablas: una maestra y otra de tipo histórico, y vamos a establecer un enlace entre ambas.

• En el Editor de Proyectos creamos una nueva tabla maestra con las siguientes propiedades: Nombre plural: Albaranes. Nombre singular: Al-barán.

• Dentro del Editor de Esquemas, pulsamos el botón Nueva tabla

histó-rica .

• Aparecerá la ventana Propiedades de la tabla histórica en la que añadi-mos las siguientes propiedades: Nombre plural: Líneas de Albaranes.

Nombre singular: Línea de Albarán. Pulsamos el botón Aceptar.

08

Desarrollo completo de una aplicación

e

Nueva tabla maestra Nueva tabla histórica

(12)

• Ya tenemos la tabla ALBARANES, que almacenará los datos correspon-dientes a la cabecera del Albarán (número de albarán, fecha, código de cliente, etc.) y la tabla LÍNEAS DE ALBARÁN que contendrá las líneas de un albarán (artículo, cantidad, precio, etc.). Hemos de enlazar ambas ta-blas mediante un enlace singular-plural. Con el ratón pinchamos sobre el enlazador (botón superior izquierdo) del maestro (ALBARANES) y arras-tramos hasta LÍNEAS DE ALBARAN.

Consideremos ahora la situación siguiente: queremos una aplicación con la que llevar el registro de los artículos que tenemos en varios almacenes, de modo que para un almacén sepamos todos los artículos que se guardan en él, mientras que para un artículo sepamos todos los almacenes en los que se guarda. Está claro que en nuestro diseño vamos a contar con dos tablas: ARTÍCULOS y ALMACENES. Ahora bien, ¿cómo las enlazamos? Ya sabe-mos que hesabe-mos de enunciar dos frases que nos ayuden, éstas son: “En un almacén podemos tener muchos artículos” y “un artículo podemos tenerlo en muchos almacenes”. Vemos que este caso difiere de los que nos había-mos encontrado hasta el momento, ahora tenehabía-mos un plural en los dos

sen-tidos o plural múltiple.

Para resolver estos casos hacemos uso de una tabla de tipo histórico que haga de intermediaria. Veámoslo con un ejemplo.

Ejemplo: resolución de un doble plural

El planteamiento es el siguiente: tenemos dos tablas, ALMACENES y ARTÍCU-LOS, que como ya hemos visto están relacionadas mediante un doble plural. Dado un almacén queremos saber todos los artículos que se guardan en él, y dado un artículo queremos saber todos los almacenes en los que está. Comenzamos el diseño de la aplicación creando dos tablas de tipo

maes-tro normal con clave numérica: ALMACENES y ARTÍCULOS. Nos es

sufi-e

(13)

ciente con los campos CODIGO y NOMBRE que Velázquez crea por defec-to en ellas. En ARTÍCULOS llevaremos recuendefec-to de defec-todos los artículos que tenemos, mientras que ALMACENES hará recuento de nuestros almacenes. A continuación vamos a crear una tabla de tipo histórico que resuelva el do-ble plural. Para ello pulsamos el botón Nueva tabla histórica , aparecien-do la ventana Creación de Histórico.

En Plural escribimos Existencias, mientras que en Singular escribimos Existen-cia. También quitamos el check Campo fecha y pulsamos el botón Aceptar. Ahora que ya tenemos creada la tabla de tipo histórico el siguiente paso es crear un enlace a histórico desde las dos tablas maestras creadas anterior-mente. Para ello pulsamos con el ratón sobre el enlazador en la tabla AL-MACENES y arrastramos hasta la tabla histórica. Repetimos el proceso con la tabla ARTÍCULOS.

Al establecer estos enlaces contra la tabla EXISTENCIAS, Velázquez ha creado en ella los campos Almacenes y Artículos, junto con sus correspon-dientes índices, es decir, los registros de la tabla histórica constan de dos campos: Almacenes y Artículos.

08

Desarrollo completo de una aplicación

e

(14)

Hacemos ahora doble clic sobre uno de los dos índices de la tabla EXIS-TENCIAS, hagámoslo sobre el índice Almacenes, por ejemplo. Le añadimos el componente Artículos y le damos el tipo Clave única. Así conseguimos que en esta tabla no se repitan registros (es decir, nunca se repite una mis-ma pareja almis-macén - artículo).

(15)

Este diseño ya nos resuelve el doble plural. Para verlo hemos dado de alta los siguientes registros de la tabla ARTÍCULOS:

También hemos dado de alta los siguientes registros de la tabla ALMACENES:

En EXISTENCIAS cada registro que damos de alta liga un binomio almacén-artículo, de modo que se registran, para cada almacén, todos los artículos que contiene (o visto de otro modo, para cada artículo, todos los almace-nes en los que éste se encuentra).

En nuestro ejemplo hemos creado un formulario para dar de alta los regis-tros de la tabla ALMACENES-ARTÍCULOS.

Supongamos entonces que en la tabla ARTÍCULOS elegimos un artículo determinado, por ejemplo “camisetas”. Podemos navegar hacia histórico con la opción Navegante/Históricos del menú del ejecutor.

08

Desarrollo completo de una aplicación

(16)

Al pulsar sobre la opción del menú Navegante/Históricos, Velázquez mues-tra la ventana Navegante: Selección de Histórico. En ella hemos de especifi-car hacia qué histórico de la tabla ARTÍCULOS nos vamos a mover. En este caso sólo aparece EXISTENCIAS por ser su único histórico. A la derecha hemos de seleccionar la rejilla en la que vamos a ver los registros históricos.

Le damos al botón Aceptar y aparecerán en la rejilla todos los registros de la tabla EXISTENCIAS que son históricos del artículo.

Una vez obtengamos estos registros de histórico, podemos navegar hacia el maestro ALMACENES, obteniendo todos los almacenes en los que se en-cuentra el artículo. Para ello hemos de seleccionar la opción

Navegante/Maes-tros, apareciendo la ventana Navegante: Selección de Maestro, en la que

he-mos de indicar hacia qué maestro nos movehe-mos, en este caso Almacén.

(17)

Al aceptar obtendremos una lista de todos los almacenes en los que se en-cuentra el artículo. Ya tenemos uno de los sentidos del plural: los almace-nes del artículo.

Con el otro sentido del plural el proceso es idéntico: partimos ahora de un registro de la tabla ALMACENES, un almacén en concreto, y navegamos hacia histórico obteniendo todos los registros de la tabla EXISTENCIAS en los que aparece el almacén. Si navegamos hacia el maestro ARTÍCULOS obtendremos todos los artículos que se guardan en el almacén (éste es el otro sentido del plural, los artículos del almacén).

08

Desarrollo completo de una aplicación

e

Cuestiones

1. Sugerir distintos ejemplos en los que aparezca el doble plural (AUTO-RES-LIBROS, ALUMNOS-PROFESORES, LADRONES-ROBOS). 2. Siguiendo el ejemplo anterior resolver el doble plural

AUTORES-LI-BROS (caso particular de que un libro tenga más de un autor). Dar de alta registros en las tablas AUTORES, LIBROS y LIBROS-AUTO-RES. Moviéndose por las tablas encontrar todos los libros de un au-tor y todos los auau-tores de un libro.

(18)

8.1.4. Maestro de segundo nivel con clave numérica

Supongamos una aplicación en la que tenemos dos tablas: POBLACIONES y CLIENTES, ambas de tipo maestro normal con clave numérica, siendo CLIENTES histórica de POBLACIONES. A la tabla CLIENTES, que se en-cuentra jerárquicamente por debajo de la tabla POBLACIONES, se la deno-mina maestro de segundo nivel con clave numérica.

Podemos relacionar ambas tablas como es habitual: creando POBLACIO-NES y CLIENTES y enlazándolas a continuación, pulsando sobre el enlaza-dor de la maestra y llevando el puntero del ratón hasta la histórica. Pero Ve-lázquez nos ofrece otra posibilidad: si ya tenemos creada la tabla POBLA-CIONES y queremos crear CLIENTES, podemos usar el asistente para la creación de maestros de segundo nivel con clave numérica, para lo cual en la Galería de objetos seleccionamos tabla de datos, apareciendo la ventana

Asistente: Creación de una tabla de datos.

Seleccionamos Maestro 2º nivel con clave numérica y aparecerá la ventana de creación de maestro 2º nivel con clave numérica. Declaramos las pro-piedades de la tabla CLIENTES, así como las tablas maestras a las que apunta.

(19)

Pulsamos el botón Aceptar, creándose automáticamente la tabla CLIEN-TES, enlazada a su maestro POBLACIONES. En CLIENTES se ha creado un campo de enlace por cada una de las tablas maestras apuntadas, con su índice correspondiente (Poblaciones).

08

Desarrollo completo de una aplicación

(20)

Si alguna de las tablas maestras enlazadas es submaestra de otra, Veláz-quez Visual genera un nuevo campo de enlace para completar el código de enlace. De hecho, generará tantos campos de enlace como sean necesa-rios, hasta llegar al padre de una relación Maestro - Submaestro multinivel. Veámoslo con un ejemplo:

Ejemplo: creación de un maestro de 2º nivel, histórico de una tabla submaestra

Supongamos una estructura en la que la tabla POBLACIONES es sub-maestra de PROVINCIAS y ésta, a su vez, es subsub-maestra de PAISES.

Si ahora añadimos la tabla CLIENTES, seleccionando como maestro de la misma POBLACIONES, en CLIENTES se creará automáticamente un campo enlazado a la tabla de PAISES, otro a la de PROVINCIAS y otro a la de POBLACIONES. Asimismo, se crea un índice de POBLACIONES, que estará compuesto por el código del país, el de la provincia y el de la población.

(21)

CREACIÓN DE MAESTRO DE 2º NIVEL

08

Desarrollo completo de una aplicación

(22)

También quedan establecidos los enlaces históricos que relacionan cada una de las tablas maestras con el Maestro de 2º nivel recién creado. Si ahora redefinimos la tabla CLIENTES como submaestra de CIONES, se modificará su índice Código, añadiendo la clave de POBLA-CIONES.

También hemos de tener en cuenta la longitud del campo código de la ta-bla. Por ejemplo, si cambiamos el tipo de una tabla maestra por submaes-tra, ya que la longitud del código de las submaestras suele ser menor que el de las maestras.

Cuando cambiamos una tabla de un tipo a otro hemos de ser cuidadosos con las propiedades del campo código. Por ejemplo, al cambiar del tipo maestro arbolado (que tiene un código de tipo alfanumérico) a cualquier otro tipo de tabla (con código numérico), Velázquez no cambia automáticamente el tipo, sino que hemos de cambiarlo nosotros.

ADVERTENCIA

PROPIEDADES DEL ÍNDICE POBLACIONES e

(23)

8.1.5. Histórico doble

A la hora de diseñar una aplicación es habitual encontrarse con la estructu-ra cabeceestructu-ra-líneas. La llamamos así ya que un ejemplo representativo se da en aplicaciones de gestión, en las que las facturas se detallan en dos tablas: CABECERAS (de las facturas) y LINEAS (de una factura), LINEAS es histó-rica de CABECERAS. Cada registro de CABECERAS guarda datos genera-les acerca de una factura, siendo histórica de CLIENTES, mientras que en cada registro de LÍNEAS se hace referencia a un artículo, luego LINEAS es histórica de ARTICULOS.

08

Desarrollo completo de una aplicación

El asistente para la creación de maestros de 2º nivel sólo aparece cuando seleccionamos tabla de datos en la Galería de objetos. ADVERTENCIA e

(24)

Velázquez Visual cuenta con un asistente gracias al que podemos crear di-rectamente estructuras del tipo cabecera-líneas. Para acceder a él selec-cionamos tabla de datos en la Galería de objetos, apareciendo la ventana

Asistente: Creación de una tabla de datos. En ella seleccionamos Histórico doble-> Cabeceras y Líneas.

Aparecerá entonces la ventana Creación de histórico con cabeceras y

lí-neas, en la que hemos de declarar el nombre de la tabla que hace las

ve-ces de cabecera, en este caso FACTURAS. También hemos de seleccio-nar la tabla que hace las veces de maestro de la cabecera, en este caso CLIENTES, así como el maestro de las líneas de la cabecera, en este ca-so ARTÍCULOS.

El asistente para la creación de histórico con cabeceras y líneas sólo aparece cuando seleccionamos tabla de datos en la Galería de objetos.

(25)

Aceptamos y Velázquez nos crea el esquema que hemos presentado antes. El asistente ha creado automáticamente los campos de enlace entre las ta-blas FACTURAS y LINEAS DE FACTURA, así como los índices correspon-dientes. También genera los campos de enlace con los maestros.

8.1.6. Creación de una tabla igual a una base

8.1.6.

de datos externa

En un proyecto de Velázquez Visual es posible declarar Bases de datos externas, a las que podemos hacer referencia tanto para importar como

para exportar información. Además, podemos crear tablas de datos de Velázquez Visual con la misma estructura de campos y tipos de campos que esas bases de datos externas que hayamos declarado en el pro-yecto. Posteriormente, con ayuda de otro objeto, el Tubo de lista, po-dremos importar y exportar datos entre nuestra aplicación y la base de datos externa.

Como todavía no hemos visto las bases de datos externas ni los tubos, de-jaremos para más adelante la creación de tablas iguales a bases de datos externas.

Resumen

Las tablas submaestras necesitan de una tabla padre para completarse, es-tando su código constituido por la unión del código del padre más el suyo propio.

Las tablas arboladas se usan para guardar registros que presentan una es-tructura arbolada, como en las distintas materias de los libros en una bi-blioteca. Gracias a ellas podemos definir el tipo al que pertenecen los re-gistros de una tabla histórica de la arbolada.

Las tablas de tipo histórico no necesitan campo CODIGO, utilizándose pa-ra almacenar los registros históricos de una tabla maestpa-ra.

Al analizar un problema es frecuente encontrarse con tablas relaciona-das por un doble plural. Para resolverlo hacemos uso de tablas de tipo histórico.

Velázquez Visual cuenta con asistentes para la creación de tablas maestras de 2º nivel (tablas maestras que son históricas de otras tablas), y para la creación de históricos dobles (estructuras del tipo cabecera-líneas). En Velázquez Visual podemos declarar una tabla de datos igual a una base de datos externa que hayamos definido en el proyecto.

08

Desarrollo completo de una aplicación

Para esquemas de facturas con líneas, albaranes con líneas, etc., se suele usar también la estructura Maestro-Submaestro, ya que posibilita la cuenta y ordenación de las líneas pertenecientes a una cabecera (Maestro).

(26)

8.2

Tipos de enlace

Hasta ahora hemos visto los enlaces más sencillos: el enlace a tabla de da-tos maestra (singular y plural) y el enlace a tabla de dada-tos estática. En este capítulo vamos a centrarnos en el resto de enlaces que podemos estable-cer en Velázquez Visual, y que son un poco más complejos que los vistos hasta ahora.

8.2.1. Asistentes para la creación de enlaces

Para facilitar la creación de enlaces el editor incorpora una serie de asis-tentes que podemos ejecutar desde el menú de contexto que se presenta al hacer clic con el ratón sobre el panel de estructura de datos de la

Venta-na principal del editor de proyectos.

En este caso la tabla que tomemos como referencia será sobre la que ha-yamos obtenido el menú de contexto.

También estará disponible en la Ventana de esquemas en el menú de con-texto que se presenta al pulsar el botón derecho del ratón sobre una tabla.

(27)

Otra posibilidad es seleccionar una tabla en el esquema y pulsar el botón

Crear punteros.

8.2.2. Enlace a hermano contiguo

Permite crear un enlace a un registro de la misma tabla de datos, de modo que podemos obtener los valores de sus campos o movernos por los re-gistros a través de un índice determinado. En ese índice no sólo podemos indicar los campos por los que queremos establecer el orden de movimien-to, sino que también podemos forzar a que sólo nos podamos mover por registros que contengan un valor determinado en un campo. Desde un re-gistro podemos obtener los valores de los campos del anterior o del si-guiente, lo que podemos usar para inicializar campos, cálculos a partir del valor del registro anterior, etc. Se trata de un puntero virtual, que no ocupa espacio en disco.

Veamos con un ejemplo cómo funciona este enlace:

08

Desarrollo completo de una aplicación

(28)

Ejemplo: Creación de un enlace a hermano contiguo

Supongamos una tabla en la que guardamos registros de personas, tenien-do cada registro los campos nombre, primer apellitenien-do y edad. Queremos que nuestra aplicación nos dé la posibilidad de fijar una edad y recorrer aque-llos registros cuyo campo edad coincida con el que nosotros hayamos fija-do. Además queremos que la ordenación se realice por apellido y nombre. Para ello seguimos los siguientes pasos:

Creamos otros dos campos en nuestra tabla de datos: anterior y siguiente, y creamos un índice en el que añadimos los campos edad, apellido y nom-bre en el cuadro Fórmula partes. El índice podemos definirlo de tipo

acep-ta repetidas, por si hay más de una persona en la que coincidan los tres

campos. Al índice lo hemos llamado Hermano.

Pinchamos en el campo siguiente y seleccionamos el enlace dentro del apartado ¿Enlazado? en la ventana de Propiedades de campo. En este ca-so seleccionaremos el enlace Hermano contiguo.

(29)

Veremos cómo al seleccionar el enlace Hermano contiguo se activa el bo-tón Resolución. Esto se debe a que hemos de indicarle a Velázquez Visual una serie de parámetros que necesita conocer para que pueda utilizar di-cho enlace.

Si pulsamos el botón Resolución nos aparecerá una ventana correspon-diente a la Resolución de puntero a hermano: Las propiedades que apare-cen en dicha ventana son las siguientes:

Índice por el cual va a realizar el enlace. En nuestro caso es el índice que

hemos llamado Hermano.

Nº de partes comunes del índice que tienen los registros a enlazar. Será el

campo o los campos que tendrán en común los registros por los que nos queremos mover. En nuestro caso nos movemos por registros que tienen una edad fija, luego el número de partes comunes es uno (si quisiéramos fi-jar edad y nombre, entonces sería dos). Si quisiéramos movernos por los re-gistros sin fijar una edad, sino según el orden de edad, el número de partes comunes sería cero.

Dirección: Anterior/Siguiente: Marcaremos una de las dos opciones, sirve

para indicar si se enlazará con el registro anterior o con el siguiente. En nuestro caso esta opción determina si los registros por los que nos move-mos se ordenan por orden alfabético de apellidos y nombre hacia la Z o ha-cia la A.

Este proceso que hemos hecho con el campo siguiente, hemos de repetir-lo con el campo anterior, con la diferencia de que la dirección es Anterior. Llegados a este punto, el enlace ya está hecho. Ahora nos vamos a un for-mulario y creamos dos botones, llamémoslos por ejemplo Anterior Persona

08

Desarrollo completo de una aplicación

(30)

y Siguiente Persona. Para el botón Siguiente Persona, en las propiedades

del botón le especificamos que el comando asociado al pulsar el botón sea moverse a hermano contiguo, y le decimos que el campo es siguiente.

Re-petimos la operación con el botón Anterior Persona, siendo en este caso el campo anterior. De este modo, una vez que estemos viendo un registro de-terminado en el formulario, podremos movernos a los registros siguiente y anterior que coincidan en edad con la de la ficha que estemos viendo. Podemos agilizar el proceso de creación de enlace a hermano usando el asistente Creación de campo puntero: Hermano, presentándose el siguien-te cuadro de diálogo:

En el asistente encontramos la opción Dirección: Ambas, que nos crea los dos enlaces, anterior y siguiente, de una sola vez.

e

Cuestiones

1. Rehacer el diseño del ejemplo anterior. Para el índice hermano indi-car que el número de partes comunes sea cero: ¿cómo nos move-mos por los registros?

2. Siguiendo con el ejemplo anterior. Rehacer el índice hermano, de modo que se componga de las partes Nombre, Apellidos y Edad (por este orden).

(31)

8.2.3. Singular de plural por posición

Permite crear un enlace singular a una tabla histórica de la tabla actual (es decir, elegimos un solo registro entre varios, de ahí singular de plural: uno entre muchos). Tendremos que elegir entre los distintos enlaces históricos definidos en la tabla maestra y se resolverá la posición fija del histórico con el que establecemos el enlace (de ahí por posición).

En el esquema, el enlace aparecerá dibujado como una flecha verde .

Por ejemplo, supongamos una aplicación en la que tenemos la tabla ma-estra TRABAJOS y la tabla TRABAJADORES, histórica de la anterior. En la tabla maestra podemos añadir un campo llamado último trabajador enla-zado a la tabla TRABAJADORES mediante un enlace singular de plural por

posición.

Para realizar este enlace basta con seleccionar el enlace Singular de plural por posición y en el campo Identificador elegir el histórico al que queremos

08

Desarrollo completo de una aplicación

Indicar que el número de partes comunes sea uno. ¿De qué modo nos movemos por los registros?

3. Tenemos una aplicación para la gestión de presupuestos, con una tabla de las distintas cuentas presupuestadas (PGC) y otra de presupuestos anua-les (PRESUPUESTOS). ¿Cómo haríamos para que al crear una ficha nue-va, al elegir la cuenta presupuestada nos inicialice el campo del importe con el valor que tuvo el presupuesto de esa misma cuenta el año anterior? ¿Cómo haríamos para que, a partir de los presupuestos del año anterior y con un proceso, el valor del importe sea el del año anterior de esa misma cuenta incrementado en un tanto por ciento escogido por nosotros?

(32)

apuntar. Como contenido de Fórmula escribimos n, que es el identificador que Velázquez Visual da a la variable de sistema número de elementos de

la lista. De este modo, desde el campo último trabajador de la tabla

TRA-BAJOS podremos atrapar el registro que se encuentra en la posición n de la tabla histórica TRABAJADORES, es decir, el último trabajador de la lista. También podemos construir un enlace a hermano usando el asistente, el cual nos presenta el siguiente cuadro de diálogo en el que definir las pro-piedades del enlace:

8.2.4. Singular de plural por índice

Permite crear un enlace singular a una tabla histórica de la tabla actual, usando para su resolución el índice utilizado en el enlace histórico. El pro-gramador únicamente tendrá que resolver aquellas partes del índice utiliza-do en enlace histórico que no sean el campo enlazautiliza-do a la tabla actual. Veá-moslo con un ejemplo:

Ejemplo: singular de plural por índice

Supongamos una aplicación de gestión en la que llevamos registro de las facturas de nuestros clientes. Queremos saber cuál es la última factura de un cliente determinado.

Para resolver este problema necesitamos dos tablas, una maestra que lla-maremos CLIENTES, y otra histórica de la anterior que llalla-maremos FACTU-RAS. Al enlazar ambas tablas con un enlace a tabla maestra, en la tabla

e

Cuestiones

1. Diseñar una aplicación que lleve el registro de los ganadores de ca-da etapa del Tour de Francia.

(33)

CLIENTES se creará el histórico facturas, mientras que en la tabla FACTU-RAS se crea un campo llamado cliente, así como el índice cliente. En la tabla FACTURAS vamos a añadir el campo fecha, que nos indicará cuál es la fecha correspondiente a cada registro. Queremos saber cuál ha sido la última factura que le hemos hecho a un cliente determinado. Para ello añadimos el campo fecha al índice cliente de la tabla FACTURAS.

Una vez hecho esto, en la tabla CLIENTES añadimos un campo llamado

úl-tima factura. A este campo le asociamos un enlace singular de plural por ín-dice, escogemos el histórico que vamos a usar (facturas-clientes) y

pincha-mos en el botón Resolución para resolver el enlace.

08

Desarrollo completo de una aplicación

(34)

Al pinchar en el botón Resolución se muestra el enlace histórico seleccio-nado; en el apartado Resolución partes se muestran aquellas partes del ín-dice utilizado en el enlace histórico que el programador debe resolver. Pa-ra ello basta con hacer doble clic sobre cada una y, a tPa-ravés del Asistente

para la edición de fórmulas, establecer la fórmula de su resolución. En

nuestro caso, el índice que usa es cliente creado por Velázquez en la tabla FACTURAS cuando hicimos el enlace a tabla de datos maestra. A ese ín-dice le añadimos el campo Fecha de la factura, siendo esa fecha la parte que hemos de resolver, cosa que hacemos con el Asistente para edición de fórmulas, especificando que el contenido debe rellenarse con la función

fHoy().

Por último, hemos de especificar el modo de búsqueda del registro históri-co (modo buscar), que podrá ser: Igual, Igual o mayor, Igual o menor, Mayor,

Menor, Primero y Último. En nuestro caso, como nos interesa saber la

últi-ma factura, el modo de buscar será igual o menor, ya que la fecha de la úl-tima factura puede ser hoy o algún día ya pasado.

De este modo, en el campo última factura de la tabla CLIENTES podemos capturar la última factura que le hemos hecho a un cliente determinado. Como en los casos anteriores, también podemos crear este enlace me-diante el asistente, presentándose el siguiente cuadro de diálogo:

Cuando entre dos tablas existe un enlace singular de plural, éste se visua-liza en el esquema de tablas como una flecha de color verde .

e

Cuestiones

1. Trabajando sobre el esquema del ejemplo anterior, obtener la factura de un cliente cuyo importe sea igual o inmediatamente superior a una cantidad determinada.

(35)

8.2.5. Enlace a tabla de datos indirecta real

y virtual

Los punteros indirectos se utilizan para relacionar la tabla de datos en cur-so con otra tabla que no es maestra de la actual. Habitualmente se trata de tablas que carecen de campo CODIGO y que por tanto no pueden ser de-finidas como maestras de otras tablas.

Existen dos tipos de enlaces a tabla datos indirecta: el enlace indirecto

real y el enlace indirecto virtual . La diferencia entre el enlace real y virtual radica en que el primero ocupa espacio en disco y el segundo no, es decir, el real tiene persistencia en disco y el virtual en me-moria. Además, si es virtual no permite actualizar la tabla apuntada, ha de ser un enlace indirecto real para ello.

Veamos mediante un ejemplo cómo crear un enlace a tabla de datos indirecta.

Ejemplo: creación de un enlace a tabla de datos indirecta

Con el siguiente ejemplo de gestión veremos cómo se establecen los enla-ces a tablas de datos indirectas en Velázquez Visual. Para entender este ejemplo, sepamos que al realizar una venta o una compra, la operación se detalla en un albarán. Éste consta de una cabeza en la que se indica el cliente o el proveedor, fecha, número del documento, importe total, etc., y de una serie de líneas de albarán, en cada una de las cuales indicamos el artículo y la cantidad, precio, descuento, importe, etc., de éste.

En ARTÍCULOS cada registro hace referencia a un artículo en particular mientras que ALMACENES lleva recuento de cada uno de nuestros alma-cenes. Ambas tablas están enlazadas por un doble plural (los artículos del almacén, los almacenes del artículo) que resolvemos mediante una tabla de

08

Desarrollo completo de una aplicación

(36)

tipo histórico, EXISTENCIAS, en la que incluiremos un campo que llevará las existencias de un artículo en cada almacén.

Cada vez que hacemos una venta en un almacén, ésta se verá reflejada en un albarán, luego en la tabla ALBARANES llevamos recuento de todas las cabezas de albarán de un almacén en particular. Por lo tanto, ALBARANES es histórica de ALMACENES.

Cada albarán constará de una serie de líneas en cada una de las cuales in-dicamos el número de artículos vendidos de cada tipo. Estas líneas se guardan en la tabla LÍNEAS DE ALBARANES, que lógicamente es histórica de ALBARANES (las líneas del albarán).

Por otro lado, LÍNEAS DE ALBARANES también es histórica de ARTÍCU-LOS, ya que un mismo artículo puede repetirse en varias líneas.

Ahora bien: nuestro objetivo es crear en LINEAS DE ALBARANES un pun-tero enlazado a la tabla EXISTENCIAS.

En nuestra aplicación hemos creado una rejilla para cada tabla, formula-rios de altas, bajas y modificaciones, búsquedas completas para cada ta-bla y un menú, llamado AUTOEXEC, que es el que se presenta al ejecutar el mapa.

Además, se han incluido botones para acceder a campos enlazados desde los formularios de altas y modificaciones de las tablas: EXISTENCIAS, AL-BARANES y LINEAS DE ALBARAN, así como rejillas de histórico en formu-larios de modificaciones maestros.

(37)

La tabla EXISTENCIAS recogerá las existencias de cada artículo en cada al-macén, por ello hemos añadido el campo Stock de tipo numérico, mientras que al índice Artículos de la tabla EXISTENCIAS hemos añadido el compo-nente almacenes y hemos definido como de clave única. Esto será necesa-rio para la resolución del puntero indirecto desde la tabla LINEAS DE AL-BARANES.

A la tabla de datos LINEAS DE ALBARANES hemos añadido el campo

Can-tidad (numérico) para anotar las canCan-tidades vendidas de cada artículo.

Lo que se quiere es que, cada vez que se dé de alta una nueva línea de al-barán, se acumule en negativo el campo Stock de la tabla EXISTENCIAS, con la Cantidad de unidades anotadas en la tabla LINEAS DE ALBARANES (es decir, si en una línea se indica la venta de dos camisetas, las existencias de camisetas deben reducirse en dos unidades).

Como podemos observar en el esquema de tablas, EXISTENCIAS es una tabla histórica y no está relacionada con la tabla LINEAS DE ALBARANES, tenemos que crear un puntero indirecto que enlace las dos tablas. Para ello

08

Desarrollo completo de una aplicación

(38)

añadimos un campo a la tabla LINEAS DE ALBARAN que llamaremos

Pu-nexist (puntero a EXISTENCIAS). Editamos el cuadro de propiedades del

campo y especificamos que éste debe estar enlazado a tabla de datos in-directa, siendo EXISTENCIAS el identificador de la tabla enlazada.

Nos aparecerá el siguiente mensaje: “Los punteros indirectos a tablas de datos deben ser resueltos”. Para resolver el puntero, en el cuadro de pro-piedades de campo pulsamos el botón Resolución. Como índice de la tabla EXISTENCIAS seleccionamos ARTICULOS (el índice al que antes añadimos el artículo del almacén).

Tras seleccionar el índice aparecerán los campos a resolver de la tabla EXISTENCIAS. Esta resolución la haremos desde la tabla LINEAS DE AL-BARANES. Seleccionamos el primero de los campos a resolver (Artículo), y de la lista de campos que aparece bajo el epígrafe Resolución desde origen

actual (líneas de albarán) pinchamos en el campo ARTICULO. Con esto le

estamos diciendo que el artículo es el que aparece en el campo Artículo de la tabla LINEAS DE ALBARANES.

Seleccionamos el segundo campo a resolver (Almacén), y de la lista de campos de EXISTENCIAS pinchamos en el campo Albarán. Tendremos ac-ceso de este modo a los campos de la tabla ALBARANES y elegimos el campo Almacén (hemos seleccionado el almacén del albarán de la línea).

(39)

Por último, en el cuadro de propiedades del campo activamos la opción Dar

alta si no existe, así, si damos de alta un albarán de un almacén que

con-tenga un artículo en las líneas que no estuviese dado de alta en la tabla EXISTENCIAS, lo creará automáticamente.

Ahora ya tenemos creado el enlace con la tabla EXISTENCIAS. Éste se vi-sualiza en el esquema de tablas como una flecha ondulada que une ambas tablas.

Para crear un puntero indirecto podemos hacer uso del asistente de

crea-ción de campo puntero. Para ello hacemos clic con el botón derecho

es-tando seleccionada la tabla en la que queremos crear el campo. Se pre-sentará la siguiente ventana con las propiedades del puntero.

08

Desarrollo completo de una aplicación

(40)

Ya hemos comentado cómo la opción Dar de alta si no existe permite que, si el registro con el que se ha de enlazar el registro actual no existe en la tabla indirecta, sea dado de alta. Si queremos que sea el propio usuario el que confirme o no el alta del registro en la tabla indirecta, seleccionamos un formulario de altas en el parámetro Formulario para dar alta. Esta op-ción no estará disponible para los enlaces virtuales, y no funcionará si al-guno de los campos a resolver en el índice tiene valor 0 (por ejemplo, un campo booleano cuyos valores posibles son 0 o 1); el motivo radica en que si el campo tiene valor 0, se toma como campo vacío y, por tanto, no es resuelto.

Si el proyecto va a ser ejecutado con la versión cliente-servidor, no es posible la especificación del formulario de altas, el motivo es que este ti-po de operaciones son realizadas en el Servidor, no en el Cliente, y, si se tuviese que mostrar el formulario, éste aparecería en el Servidor. Por es-te motivo, si en un enlace de eses-te tipo se hubiese especificado la peti-ción de formulario, en tiempo de ejecupeti-ción, esta petipeti-ción sería obviada por el Servidor.

8.2.6. Las actualizaciones

Se encargan de modificar el contenido de los campos de un registro de una tabla enlazada, cada vez que se produce un alta, una baja o una modifica-ción en la tabla de origen, donde están definidas. Por ejemplo, desde una tabla de LINEAS DE ALBARAN (histórico) podemos actualizar el contenido del campo STOCK de su maestro ARTICULOS.

Se crean pulsando el botón Nueva actualización de la barra de he-rramientas. Al pulsarlo se muestra la ventana Actualización desde. En la lista desplegable Campo enlazado seleccionaremos un campo enlazado a la tabla de datos donde se quiere actualizar. Una vez seleccionado, en el control Tabla a actualizar se mostrará el nombre de la tabla de datos que va a ser actualizada. Si el campo enlazado seleccionado fuese un campo enlazado a un hermano contiguo, en el control Campo hermano

contrario se mostrará el campo enlace a hermano contrario al

seleccio-nado. Nueva actualización

(41)

Los distintos componentes de actualización que se vayan creando se mos-trarán en el control situado bajo la barra de botones de la actualización. Las funciones de estos botones son:

Crear un nuevo componente de actualización. Eliminar el componente de actualización seleccionado.

Mover una posición hacia arriba el componente de actualización selec-cionado.

Mover una posición hacia abajo el componente de actualización selec-cionado.

Editar el componente de actualización seleccionado.

Asimismo, se incluyen botones para cortar, copiar y pegar componentes de actualización.

En el cuadro de diálogo Componente de actualización define qué campo de la tabla de destino ha de ser actualizado, en función o no de una con-dición, y cómo va a ser actualizado. Simplemente se definirá lo que debe hacerse en caso de alta, ya que el programa automáticamente “sabe” lo que se debe hacer en una baja o en una modificación de ficha. El cuadro aparece cuando pinchamos en el botón insertar de la ventana Actualizar

desde.

08

Desarrollo completo de una aplicación

Crear un nuevo componente Eliminar el componente Mover una posición hacia arriba Mover una posición hacia abajo Editar el componente

(42)

Cada componente de actualización consta de los parámetros siguientes, excepto para los enlaces a Hermanos contiguos:

• Comentarios: comentario para el diseñador.

• Fórmula condición para modificar: expresión fórmula condicional que debe cumplirse para realizar la actualización. Disponemos del asistente

de fórmulas para simplificar el uso de éstas.

• Campo: campo de la tabla de datos a modificar.

• Fórmula: expresión fórmula de donde se obtiene el contenido a actualizar. • Modo de modificar: se refiere a cómo vamos a actuar sobre el campo a

modificar. Puede ser de uno de los dos modos siguientes:

• Acumular: acumula en el campo destino el contenido del cuadro de edi-ción Fórmula, siempre que se cumpla la condiedi-ción dada en el cuadro de edición Fórmula condición para modificar.

• Absoluto: sustituye en el campo destino el contenido del cuadro de edi-ción Fórmula, siempre que se cumpla la condiedi-ción dada en el cuadro de edición Fórmula condición para modificar.

Las actualizaciones son disparadas cuando se crean, modifican o eliminan registros. En el caso de modificar o de eliminar registros, Velázquez Visual deduce el tipo de modificación que ha de realizar la actualización. Por ejem-plo, se puede declarar una actualización en la tabla de líneas de albarán de venta para que, al crear una línea de albarán de venta, se descuenten las

(43)

unidades vendidas de las existencias del artículo. Al borrar una línea del al-barán se actualizará, automáticamente, las unidades de la línea borrada a las existencias del artículo.

También podemos borrar un registro sin desactualizar (p. e. líneas de alba-rán con más de 5 años), para ello hemos de usar la función de Procesos

Re-correr lista eliminando fichas sin desactualizar.

Ejemplo: Creación de una actualización

Continuaremos con el ejemplo anterior, de modo que vamos a actualizar las existencias de un artículo (campo Stock de EXISTENCIAS) con el conteni-do del campo Cantidad de las líneas de venta de la tabla LINEAS DE AL-BARANES. Es decir, si en una línea de venta se indica que la cantidad ven-dida de un artículo es de cinco unidades, el stock de ese artículo debe dis-minuir en cinco unidades. Para ello aprovechamos el puntero que hemos creado en la tabla LINEAS DE ALBARANES.

Nos situamos en la carpeta Actualizaciones de la tabla LINEAS DE ALBA-RANES. Con la tecla Insertar nos aparecerá la ventana de propiedades de la actualización, en la que seleccionaremos como Campo enlazado el cam-po Punexist (el camcam-po enlazado a la tabla EXISTENCIAS).

Pulsamos el botón Añadir para crear el componente de actualización, mos-trándose la ventana Componente de actualización. En ella especificamos:

Comentarios: “Acumula el stock de las existencias”, es una explicación de

la actualización.

Fórmula condición para modificar: condición para que se produzca

actuali-08

Desarrollo completo de una aplicación

Tengamos en cuenta la siguiente nota para la versión cliente - servidor: no hemos de incluir en componentes de actualización nada que implique la intervención del usuario, por ejemplo, visualizar un mensaje, mostrar un formulario, una pregunta, petición de un dato, etc. El motivo es que este tipo de operaciones se llevan a cabo en el Servidor, por lo que el mensaje o el formulario no serían presentados en el Cliente, sino en el propio Servidor. Para evitar esto, el mensaje, formulario, etc. a presentar, será obviado por el Servidor.

ADVERTENCIA

(44)

zación. En este caso no habrá que especificar condición para que acumule el stock, pues éste debe acumularse siempre que entre nueva mercancía.

Campo: Stock (campo de EXISTENCIAS que vamos a modificar).

Modo de modificar: acumular (pues ha de acumular las existencias de cada

artículo en cada almacén en tantas unidades como se especifica en el cam-po Cantidad de los albaranes).

Fórmula: aquí se ha de utilizar el campo de la tabla LINEAS DE ALBARAN que

va a acumular el campo Stock en la tabla EXISTENCIAS. Es el campo Cantidad.

8.2.7. Componente de actualización a un hermano

contiguo

Las actualizaciones a hermano contiguo nos permiten ir recorriendo los re-gistros de una tabla que estén relacionados por un enlace de hermano

con-e

Cuestiones

1. En el ejemplo anterior, ¿qué diferencia hay entre el modo de modifi-car Acumular y Valor Absoluto?

2. Siguiendo con el ejemplo anterior, ¿cómo haremos para que la ac-tualización del campo Stock tenga lugar sólo cuando la cantidad de la línea sea superior a cinco unidades?

3. ¿Cómo haríamos para pasar de un albarán a otro del mismo distri-buidor?

(45)

tiguo, de modo que podemos obtener un acumulado final con el valor de un determinado campo de cada registro.

Al crear la actualización a un enlace a Hermano contiguo, se activará el combo box de Campo hermano contrario. En el mismo sólo aparecerán campos que haya definido en esta tabla de datos que sean contrarios al

campo enlazado. Por ejemplo, si en una tabla de facturas hemos creado

los campos FACTURA-ANTERIOR y FACTURA-SIGUIENTE, enlazados a hermano anterior y siguiente, respectivamente, seleccionando como cam-po enlazado FACTURA-ANTERIOR, sólo aparecerá en la lista de camcam-pos a actualizar el campo FACTURA-SIGUIENTE. Cuando añadimos un compo-nente a una actualización de este tipo, se presentará el siguiente cuadro de diálogo:

Los parámetros del cuadro Componente de Actualización son:

• Campo valor acumulable: campo numérico que contendrá el valor a acu-mular de cada registro (por ejemplo, el importe total de cada una de las facturas).

• Campo a modificar (acumulador): campo en el que se va a acumular el valor del campo especificado en el parámetro anterior (aquí se iría acu-mulando el total de cada una de las facturas).

• Contenido inicial del acumulador: es un control de solo lectura y muestra la fórmula resultante de la especificación de los dos campos anteriores. • Comentarios: texto explicativo acerca de lo que realiza la actualización. En el contenido inicial del campo a modificar se creará automáticamente la fórmula a ejecutar para llevar a cabo la actualización.

08

Desarrollo completo de una aplicación

(46)

Este tipo de enlaces, con sus correspondientes actualizaciones, son muy útiles en programas de contabilidad para llevar en un campo determinado el arrastrado de los movimientos de una cuenta.

Ejemplo: Actualización a hermano contiguo

Tenemos una aplicación de gestión con dos tablas: CLIENTES y FACTU-RAS. Buscamos el acumulado total de los importes de las facturas.

En la tabla FACTURAS tenemos los campos Factura-Anterior y

Factura-Si-guiente, que están enlazados a hermano contiguo y que son los que

usare-mos para realizar la actualización. El campo Total guarda el importe de ca-da factura, mientras que en el campo Total-Ventas acumularemos el total de cada factura.

Pinchamos en el botón Nueva Actualización , apareciendo la ventana

Ac-tualización desde: FACTURAS. En ella especificamos que el campo

enlaza-do es Siguiente y automáticamente Velázquez Visual toma

Factura-Anterior como campo hermano contrario.

A continuación pinchamos en el botón insertar , apareciendo la ventana

Componente de Actualización. Como Campo valor acumulable elegimos Total (es el importe de cada factura), el Campo a modificar (modificador) es Total-Ventas.

e

Nueva Actualización Insertar

(47)

Pulsamos el botón Aceptar y en la ventana Actualización desde: FACTURAS aparecerá Total-Ventas como campo a modificar. Pulsamos Aceptar de nue-vo y ya tenemos terminada la actualización a hermano contiguo. Ésta apa-recerá dentro de la carpeta Actualizaciones de la tabla FACTURAS.

08

Desarrollo completo de una aplicación

(48)

8.2.8 Enlace a maestro de una tabla contra sí misma

En todas las ocasiones en las que hemos hablado del enlace singular-plu-ral, lo hemos establecido entre dos tablas: una histórica y otra maestra. Ahora bien, es posible que una misma tabla sea maestra e histórica de sí misma. Veámoslo con un ejemplo:

Supongamos una tabla que se encarga de llevar el registro de socios de una agrupación, de modo que para ingresar es necesario que un socio avale al solicitante. Cuando se acepta al nuevo socio, su ficha llevará el campo

So-cio principal, que apunta al registro del soSo-cio que lo avala.

De este modo un registro de la tabla puede ser maestro de una serie de so-cios a los que ha avalado (sus históricos). Éste sería el enlace a histórico. Por otro lado, cada registro de la tabla apuntará a un único registro de la misma tabla (el que lo avala), que será su maestro. Éste es el enlace a maestro.

Ejemplo: Enlace de una tabla contra sí misma

A continuación veremos los pasos a seguir para enlazar la tabla SOCIOS contra sí misma mediante un enlace a maestro.

En la tabla SOCIOS, que será en la que guardemos el registro de socios, creamos el campo Socio Principal, declarándolo en sus propiedades como enlazado a tabla de datos maestra, siendo SOCIOS la tabla enlazada. Este campo será el que apunte al registro correspondiente al socio que avala.

(49)

A continuación creamos el índice correspondiente al campo, para ello si-tuamos el foco sobre el campo Socio Principal y pulsamos el botón Nuevo

índice del campo .

Ahora nos falta declarar el enlace a histórico en la tabla SOCIOS. Para ello pulsamos el botón Nuevo enlace histórico , apareciendo la ventana

En-lace a histórico desde SOCIOS. En ella especificamos que la tabla

enlaza-da es SOCIOS, mientras que el índice es Socio Principal.

Con esto ya tendríamos enlazada la tabla SOCIOS contra sí misma.

08

Desarrollo completo de una aplicación

e

Nuevo índice del campo Nuevo enlace histórico

(50)

Resumen

El enlace a hermano contiguo permite acceder a los valores de los registros anterior y siguiente de una tabla o movernos a esos registros, de modo que podemos recorrer los registros a través de un índice determinado. No sólo podemos indicar los campos por los que queremos establecer el orden de movimiento, sino que también podemos forzar a movernos por registros que contengan un valor determinado en esos campos.

Mediante el enlace singular de plural por posición podemos crear un enla-ce una tabla histórica de la tabla actual y elegir uno de los registros del his-tórico resolviéndolo por su posición.

El enlace singular de plural por índice permite crear un enlace singular a una tabla histórica de la actual, capturando uno de los registros del histórico. Para su resolución se usa el índice utilizado en el enlace histórico y sólo de-ben resolverse aquellas partes del índice que no sean el campo enlazado a la tabla actual.

Mediante los punteros indirectos podemos enlazar la tabla de datos en cur-so con otra tabla que no guarda una relación directa. Existen dos tipos: el

enlace indirecto real (con persistencia en disco) y el virtual (con persistencia

en memoria).

Las actualizaciones modifican el contenido de los campos de un registro de una tabla enlazada, cada vez que se produce un alta, una baja o una modi-ficación en la tabla de origen, donde están definidas.

Con las actualizaciones a hermano contiguo recorremos los registros de una tabla que estén relacionados por un enlace de hermano contiguo, obte-niendo un acumulado final con el valor de un determinado campo de cada registro hermano.

8.3

Análisis de la información: ejemplos

8.3.1. Un centro de enseñanza

Conceptos a tratar

• Enlace singular y plural.

Descripción

Buscamos una aplicación para un centro de enseñanza que se encargue de gestionar sus alumnos y los cursos que realizan, con la condición de que cada alumno sólo puede estar matriculado en un curso.

Esquema de la aplicación

Este ejemplo se resuelve de forma sencilla creando dos tablas: ALUMNOS y CURSOS, ambas de tipo maestro normal con clave numérica. Ahora bien:

(51)

¿Cómo las enlazamos? Para verlo hemos de enunciar las siguientes frases: “Varios alumnos pueden pertenecer a un curso”, “Un alumno pertenece a un único curso”. Está claro que ALUMNOS (plural) va a ser un histórico de CURSOS (singular), de modo que enlazaremos ambas tablas mediante un enlace singular - plural.

Al establecer el enlace, Velázquez crea automáticamente el campo Cursos y el índice Cursos en la tabla ALUMNOS, mientras que en la tabla CURSOS crea el histórico Alumnos.

8.3.2. Empresa de instalación de cristalería

8.3.2.

para vehículos

Conceptos a tratar • Doble plural • Tablas submaestras • Tablas históricas Descripción

Necesitamos una aplicación de gestión para una empresa que se dedica a instalar cristales en automóviles. Hemos de tener en cuenta los siguientes puntos:

• Un vehículo se identifica por una marca, una serie y un modelo. Por ejemplo: marca Opel, serie Corsa, modelo 2000.

• La empresa dispone de diversos tipos de cristales que son suministra-dos por distintos fabricantes.

• Un determinado tipo de cristal puede ser suministrado por más de un fa-bricante.

• Un tipo concreto de modelo puede tener varios tipos de cristales.

08

Desarrollo completo de una aplicación

(52)

Esquema de la aplicación

Empezaremos por crear las tablas MARCAS, SERIES y MODELOS, ya que éstas identifican inequívocamente a un vehículo. Está claro que una serie no puede existir sin una marca, de igual modo que un modelo no puede exis-tir sin una serie. Es por esto que definimos la tabla MARCAS como maes-tro normal con clave numérica, SERIES será submaestra de MARCAS y MODELOS será submaestra de SERIES.

Al crear las tablas, Velázquez Visual crea directamente los enlaces entre ellas por haber definido SERIES y MODELOS como submaestras: SERIES será histórica de MARCAS, mientras que MODELOS será histórica tanto de SERIES como de MARCAS.

Por otro lado, la empresa dispone de diversos tipos de cristales que son su-ministrados por diversos fabricantes. Esto justifica la creación de las tablas ARTÍCULOS y FABRICANTES. Ahora bien, ¿cómo las enlazamos? Volva-mos a enunciar las frases: “los artículos del fabricante”, “los fabricantes del artículo”. En este caso nos encontramos con un plural en los dos sentidos, lo que nos impide enlazar directamente ambas tablas mediante un enlace singular - plural.

Para resolver un doble plural creamos una tabla en medio de las otras dos. En este caso crearemos una tabla de tipo histórico que llamaremos ARTIFAB.

Cada uno de los registros de la tabla ARTIFAB consistirá en una pareja Ar-tículo - Fabricante, de modo que en ella guardamos todos los arAr-tículos de cada fabricante (o de otro modo, todos los fabricantes de cada artículo). En-tonces, dado un fabricante podemos navegar hacia sus históricos, que son todos los registros de la tabla ARTIFAB, y una vez cargados éstos, obtener todos sus maestros de la tabla ARTÍCULOS. De este modo obtenemos to-dos los artículos del fabricante de partida. De igual modo procederíamos para obtener todos los fabricantes de un artículo.

Aún nos queda por integrar en el diseño un detalle: en un modelo pueden instalarse distintos artículos (cristales), y un cristal puede instalarse en dis-tintos modelos. Nos encontramos de nuevo con doble plural, luego hemos de enlazar las tablas ARTÍCULOS y MODELOS mediante una tabla inter-mediaria de tipo histórico a la que llamaremos ARTIMODEL.

(53)

8.3.3. Aplicación de análisis para obras literarias

Conceptos a tratar

• Doble plural

Descripción

Supongamos un estudiante que, haciendo un estudio acerca de Lope de Vega, necesita saber todas las obras en las que aparece un determinado personaje y todos los personajes que aparecen en una obra determinada. Este problema es de resolución inmediata en Velázquez Visual.

Esquema de la aplicación

Declararemos dos tablas principales: PERSONAJES y OBRAS. Tanto las obras como los personajes necesitan estar identificados uno a uno de forma inconfundible, por lo que deben tener una clave de acceso única, es decir, deben declararse como tablas de tipo maestro normal con clave numérica. Ahora bien: ¿cómo las enlazamos? Volvemos a enunciar las dos frases: “En una obra aparecen varios personajes”, y en el caso más general, la segun-da frase es: “Un personaje puede aparecer en varias obras”. Es decir, nos encontramos con un plural en los dos sentidos que resolvemos con una ta-bla histórica que haga de intermediaria: REPARTOS.

08

Desarrollo completo de una aplicación

(54)

Los registros de la tabla REPARTOS consisten en parejas Obra-Personaje, de manera que asociamos todas las obras con cada uno de sus persona-jes (o visto de otro modo, todos los personapersona-jes con cada una de las obras en las que aparece). Entonces, si nos situamos en la tabla OBRAS (por ejemplo), moviéndonos hacia histórico obtendremos todos los registros Obra-Personaje en los que la obra es la seleccionada de la tabla OBRAS. Una vez cargadas todos esas parejas, nos movemos hacia maestro en la di-rección de PERSONAJES, de modo que cargamos todos los personajes que aparecen en la obra. El mismo procedimiento seguiremos para, dado un personaje, obtener todas las obras en las que aparece.

8.3.4. Una galería de arte

Conceptos a tratar

• Enlace singular y plural • Doble plural

Descripción

El siguiente esquema de tablas gestionará una galería de arte bajo los si-guientes supuestos:

• Un artista de la galería puede tratar distintos temas, mientras que un te-ma en particular puede ser tratado por distintos artistas. Además, una obra de un artista puede ser expuesta en distintas exposiciones, mientras que varias obras del artista pueden exponerse en la misma exposición. • Cada artista tiene un representante (contacto), mientras que un

repre-sentante puede trabajar para distintos artistas.

Esquema de la aplicación

Comenzaremos creando las tablas ARTISTAS, TEMAS y OBRAS y enlazán-dolas.

Tal y como se expuso el problema, entre TEMAS y ARTISTAS existe un do-ble plural. Para resolverlo introducimos una tabla intermedia: OBRAS. De este modo no sólo resolvemos el doble plural, sino que aprovechamos pa-ra guardar en la tabla intermedia las obpa-ras de cada artista (claro, una obpa-ra pertenecerá a un artista y tratará un tema en particular). En la tabla OBRAS añadimos los campos Foto, Precio, Título, etc.

(55)

Las tres tablas se han definido con el tipo maestro normal con clave numé-rica. En este caso OBRAS también ha sido definida así (y no de tipo histó-rico) ya que nos interesa que cada obra tenga una clave única e irrepetible. Creamos ahora la tabla EXPOSICIONES, en la que incluimos los campos

Fecha inicio, Fecha fin, Motivo, etc. Nos encontramos con otro plural en los

dos sentidos entre esta tabla y OBRAS, de modo que hemos de crear otra tabla intermedia que lo solucione: OBRAS EXPUESTAS.

Por último, añadimos la tabla CONTACTOS, en la que guardaremos los da-tos de los representantes. Esta tabla es maestra de ARTÍCULOS.

8.3.5. Gestión de un colegio

Conceptos a tratar • Enlace singular-plural. • Tablas arboladas. • Tablas estáticas. Descripción

Supongamos que nos piden el diseño de una aplicación que gestione la or-ganización de un colegio. Dicha aplicación debe relacionar los aspectos fundamentales de un colegio: alumnos, profesores, materias, asignaturas, cursos, secciones, aulas, días lectivos y horarios.

08

Desarrollo completo de una aplicación

Referencias

Documento similar

Ponemos un ejemplo: Vamos a buscar la revista: International Journal of Business. Escribimos en el cajetín de búsqueda el nombre de

En este proyecto se ha unificado el desarrollo de aplicaciones para dispositivos móviles S40 de Nokia con la tecnología NFC, dando como resultado la aplicación “Smart-Info UPCT”,

"No porque las dos, que vinieron de Valencia, no merecieran ese favor, pues eran entrambas de tan grande espíritu […] La razón porque no vió Coronas para ellas, sería

Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en

La siguiente y última ampliación en la Sala de Millones fue a finales de los años sesenta cuando Carlos III habilitó la sexta plaza para las ciudades con voto en Cortes de

Ciaurriz quien, durante su primer arlo de estancia en Loyola 40 , catalogó sus fondos siguiendo la división previa a la que nos hemos referido; y si esta labor fue de

Para referirnos a las dinámicas de posguerra y a la situación actual, nos pueden servir algunas cosas que escribimos veinte años atrás: “Puede decirse que el tipo

En la parte central de la línea, entre los planes de gobierno o dirección política, en el extremo izquierdo, y los planes reguladores del uso del suelo (urbanísticos y