Existencias por almacén y precios por cliente

Existencias por almacén y precios por cliente

Conceptos a tratar

Descripción

Realizaremos el análisis de una aplicación de gestión de ventas de artículos, en el que podemos definir existencias por almacén calculadas en cada momento, por un lado y por otro asignar precios a artículos en función del cliente.

Esquema de la aplicación

Los punteros indirectos se utilizan para relacionar la tabla de datos en curso con otra tabla que no es maestra de la actual.

Habitualmente se trata de tablas que carecen de campo ID (Código) y que por tanto no pueden ser definidas 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 memoria. Además, si es virtual no permite actualizar la tabla apuntada, ha de ser un enlace indirecto real para ello.

Puntero indirecto real

El esquema de tablas incluye dos tablas maestras: Almacenes y Artículos, que son tablas que tienen una relación de maestro a plural (1 a n) con Albaranes (por cada Albarán definimos un Almacén) y Líneas de albarán, que es el plural de Albaranes (por cada línea de albarán definimos un Artículo).

Para determinar las existencias de cada Artículo en cada Almacén, tenemos una tabla histórica: Existencias, que guarda un registro por cada Artículo y cada Almacén, y sólo un registro puede tener un valor para ese binomio.

Desde una línea de albarán, usaremos un puntero indirecto real para apuntar al registro correspondiente (en función del Almacén determinado en el Albarán y del Artículo seleccionado en la línea de albarán) y actualizar el valor de la existencia. Como la tabla Existencias es de tipo histórico y no tiene campo ID, no puede ser maestra de la tabla de Líneas de Albarán.

Es necesario establecer un puntero indirecto de tipo real, ya que vamos a usar actualizaciones para escribir el valor, y éstas necesitan persistencia en disco. No podemos usar un puntero indirecto virtual en este caso.

¿Qué es y cómo se establece el puntero indirecto real?

Este enlace se utiliza para relacionar la tabla de datos actual con otra tabla que no es maestra de la actual y que se elige en la propiedad Tabla enlazada . En este caso, desde una línea de albarán queremos actualizar la existencia, por lo que seleccionamos la tabla Existencias.

Este enlace necesita ser resuelto manualmente por el programador; para ello se ha de usar un índice de clave única de la tabla a enlazar.

Índice: En esta propiedad tendremos que seleccionar, de la lista de índices que se muestran de la tabla enlazada, el índice de clave única que queramos usar para resolver el enlace.

Usaremos el índice Almacenes de la tabla Existencias, al que hemos añadido como componente el campo Artículo, configurando el índice como de clave única.

De esta forma garantizamos que únicamente habrá un registro por cada pareja de valores, de Almacén y Artículo, y desde las líneas de albarán apuntaremos a un único registro.

Resolución: Una vez seleccionado el índice en la propiedad anterior en ésta aparecerá la lista de campos que lo componen. En esta propiedad es donde debemos resolver el enlace, para ello situar el foco en la misma y pulsar el botón que aparece a la derecha. Al pulsarlo se desplegará una ventana en la que cada fila se corresponderá con un componente del índice seleccionado:

Cada componente del índice ha de ser resuelto de manera individual, es decir, debemos indicar al sistema qué dato resuelve cada campo componente del índice de la tabla indirecta.

Dicha resolución será definida mediante una fórmula. Para la introducción de la misma se dispone del asistente para edición de fórmulas.

Debemos usar los valores de las líneas de albarán para resolver cuál es el registro de la tabla Existencias con el que queremos enlazar. Para ello usamos el valor del Almacén que obtenemos del Albarán y el Artículo de la propia línea de albarán.

Este puntero será el que usemos en la actualización para apuntar al registro correspondiente a la existencia.

Esta actualización nos permitirá acumular la cantidad del artículo que definamos en tiempo de ejecución para la línea de albarán en curso, y que permitirá calcular la existencia del artículo tras la operación.

Puntero indirecto virtual

El esquema de tablas incluye dos tablas maestras: Proveedores y Artículos, que son tablas que tienen una relación de maestro a plural (1 a n) con Albaranes (por cada Albarán definimos un Proveedor) y Líneas de albarán, que es el plural de Albaranes (por cada línea de albarán definimos un Artículo).

Para determinar el precio de cada Artículo y cada Proveedor tenemos una tabla histórica: Precios, que guarda un registro por cada Artículo y cada Proveedor, y sólo un registro puede tener un valor para ese binomio.

Desde una línea de albarán, usaremos un puntero indirecto virtual para apuntar al registro correspondiente (en función del Proveedor determinado en el Albarán y del Artículo seleccionado en la línea de albarán) y leeremos el valor del precio.

Como la tabla Precios es de tipo histórico y no tiene campo ID, no puede ser maestra de la tabla de Líneas de Albarán. Para ello usaremos puntero indirecto virtual, ya que únicamente vamos a leer un dato y no requiere escritura alguna.

Qué es y cómo se programa un puntero indirecto virtual

Este enlace se utiliza para relacionar la tabla de datos actual con otra tabla que no es maestra de la actual y que se elige en la propiedad Tabla enlazada . En este caso queremos enlazar con la tabla Precios.

Este enlace necesita ser resuelto manualmente por el diseñador; para ello se ha de usar un índice de clave única de la tabla a enlazar.

Este enlace no tiene persistencia en memoria.

El resto de las propiedades a cumplimentar son: Índice: En esta propiedad tendremos que seleccionar, de la lista de índices que se muestran de la tabla enlazada, el índice de clave única que queramos usar para resolver el enlace.

En este caso hemos creado el índice Artículos, compuesto por el campo Artículos y el campo Proveedores, de clave única, por lo que por cada Artículo tendremos un Precio por Proveedor.

Resolución: una vez seleccionado el índice en la propiedad anterior en ésta aparecerá la lista de campos que lo componen: En esta propiedad es donde debemos resolver el enlace, para ello situar el foco en la misma y pulsar el botón que aparece a la derecha. Al pulsarlo se desplegará una ventana en la que cada fila se corresponderá con un componente del índice seleccionado.

Cada componente del índice ha de ser resuelto de manera individual, es decir, debemos indicar al sistema qué dato resuelve cada campo componente del índice de la tabla indirecta.

Dicha resolución será definida mediante una fórmula. Para la introducción de la misma se dispone del asistente para edición de fórmulas. En este caso, resolveremos el Artículo con aquel seleccionado en la Línea de Albarán y el Proveedor que hemos definido en la cabecera de Albarán.

Nota: para que en ejecución se genere el enlace, es necesario que se resuelvan todos componentes del mismo, es decir, que no esté vacío ninguno de los campos usados en su resolución.

La diferencia entre un enlace indirecto real y uno indirecto 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 memoria. Además, tampoco podrán dispararse actualizaciones desde una tabla cuando el enlace indirecto es virtual.