Continuando con el ejemplo que vimos en la primera entrega de los desencadenantes, ahora vamos a aprovechar la macro de datos ‘Antes del cambio’ para comprobar si hay suficientes existencias del artículo para realizar la venta.
Si a la hora de guardar los cambios de la línea de ventas no hay suficientes existencias del artículo para satisfacer la cantidad indicada en la línea de venta, mostraremos un mensaje de error para avisar de la situación y cancelaremos la operación.
Desencadenantes utilizados
| - Antes de insertar una nueva línea de venta y Antes de actualizar una línea de venta
- Utilizando la Macro de Datos: Antes del cambio
|
Lógica de datos
- Antes de insertar una nueva línea de venta:
- Buscaremos en la tabla de artículos el artículo introducido en la nueva línea de venta.
- Comprobaremos si el stock disponible es suficiente para satisfacer la cantidad de artículos que se van a vender.
- En el caso de no haber suficientes existencias cancelaremos la acción de insertar registro.
- Antes de actualizar una venta ya existente:
- Buscaremos en la tabla de artículos el artículo que aparece en la línea de venta.
- Sólo en el caso de que el campo Cantidad haya sido actualizado, comprobaremos si el stock disponible es suficiente para satisfacer la cantidad de artículos que se van a modificar en el caso de que indique una cantidad superior a la anterior.
- En el caso de no haber suficientes existencias cancelaremos la acción de actualizar registro.
La Macro de Datos ‘Antes del cambio’
La macro de datos ‘Antes del cambio’ tomará el ID del artículo y los valores anterior y nuevo del campo cantidad de la línea de venta para realizar la comprobación del stock actual del artículo.
Pasos
- Creará una variable local para almacenar el ID del Artículo.
- Buscará el Stock actual del artículo.
- Comprobará la naturaleza del evento consultando el indicador [EsInsertar]
- Si estamos en un evento de insertar, comprobará si el Stock es mayor o igual a la cantidad solicitada. En el caso de no ser así cancelará el evento.
- Si estamos en un evento de actualizar y sólo en el caso de que se haya actualizado el campo Cantidad, comprobará si la diferencia entre la cantidad actual y la anterior no supera el Stock actual del artículo. En el caso de ser así cancelará el evento.
Diseño
En la ficha DISEÑO de las HERRAMIENTAS DE TABLA, desplegaremos las opciones ‘Crear macros de datos’ y seleccionaremos ‘Antes del cambio’ para la macro que deseemos crear.
- 1. Se nos abrirá la ventana de diseño de macros donde seleccionaremos la acción ‘EstablecerVariableLocal’ de la lista desplegable.
- En la propiedad Nombre introduciremos el nombre de la variable: Articulo
- En la propiedad Expresión introduciremos la expresión: [IDArticulo]
De esta manera tendremos almacenado la ID del artículo que se muestra en la línea de venta, necesaria para realizar el siguiente paso de buscar el Stock actual del artículo.
- 2. Para buscar el artículo del que deseamos conocer su Stock, desplegaremos el cuadro combinado ‘Agregar nueva acción’ y seleccionaremos ‘BuscarRegistro’.
- En la propiedad Buscar un registro en introduciremos el nombre de la tabla Articulos
- En la propiedad Condición WHERE introduciremos la expresión: [Articulos].[ID]=[Articulo]
Para localizar el artículo cuyo ID coincida con el valor de la variable local Articulo creada en el paso anterior.
- 3. Una vez localizado el registro, seleccionaremos la acción ‘EstablecerVariableLocal’ del cuadro combinado de acciones que se muestra dentro del bloque ‘Buscar un registro en’.
- En la propiedad Nombre introduciremos el nombre de la variable: StockArticulo
- En la propiedad Expresión introduciremos la expresión: [Articulos].[Stock]
Es el momento de comprobar que evento es el que se está ejecutando, insertando una condicional ‘If else’ que pregunte por el valor del indicador [EsInsertar].
- 4. Seleccionaremos la acción ‘Si’ de la lista de acciones y nada más insertarla aprovecharemos para añadir la parte correspondiente al else de la condicional pulsando la opción ‘Agregar Si no’ que se muestra en la parte inferior derecha de la acción.
- En la propiedad Expresión condicional introduciremos el nombre del indicador: [EsInsertar]
Dentro del bloque de la condicional Si, agregaremos una nueva condicional que comprueba que hay suficientes existencias para realizar la nueva venta.
- 5. Seleccionaremos de nuevo la acción Si.
- En la propiedad Expresión condicional introduciremos la expresión:
[StockArticulo]<[Cantidad]
Si se cumple la expresión condicional, mostraremos un mensaje de aviso y cancelaremos el evento de inserción.
- 6. Seleccionamos la acción ‘ProvocarError’ que nos permitirá generar un error que muestra un mensaje al usuario.
- En la propiedad Número de error introduciremos un número que identifique el error, que en nuestro caso nos lo vamos a inventar: 112233
- En la propiedad Descripción del error introduciremos el texto del mensaje que deseamos mostrar al usuario: Imposible satisfacer las unidades indicadas del artículo
- 7. A continuación cancelaremos el evento seleccionando la acción ‘DetenerMacro’ de la lista de acciones disponibles.
Ahora que ya hemos diseñado el bloque de acciones para el evento de inserción, vamos a diseñar las necesarias para el evento de actualización utilizando para ello el bloque Si no de la primera condicional.
Añadimos una condicional que compruebe si se ha actualizado el valor del campo Cantidad de la línea de venta.
- 8. Seleccionaremos de nuevo la acción Si.
- En la propiedad Expresión condicional introduciremos la expresión:
Actualizado(“Cantidad”)
En caso afirmativo, es decir; realmente el campo Cantidad ha sido modificado, insertaremos una nueva condicional que compruebe si la diferencia entre las nuevas unidades y las antiguas superan el Stock actual del artículo.
- 9. Insertaremos de nuevo la acción Si
- En la propiedad Expresión condicional introduciremos la expresión:
([Cantidad]-[Antiguo].[Cantidad]) > [StockArticulo]
Si se cumple la expresión condicional, mostraremos un mensaje de aviso y cancelaremos el evento de actualización.
- 10. Seleccionamos la acción ‘ProvocarError’ que nos permitirá generar un error que muestra un mensaje al usuario.
- En la propiedad Número de error introduciremos un número que identifique el error, que en nuestro caso nos lo vamos a inventar: 112233
- En la propiedad Descripción del error introduciremos el texto del mensaje que deseamos mostrar al usuario: Imposible satisfacer las unidades indicadas del artículo
11. Por último sólo nos queda cancelar el evento seleccionando la acción ‘DetenerMacro’ de la lista de acciones disponibles.
Con esta última acción podremos dar por finalizada la macro de datos ‘Antes del cambio’ que nos permita cancelar la inserción o la actualización si no disponemos de suficientes existencias para satisfacer la venta.