GestionAlmacen-Adenda2

6
GESTIÓN ALMACÉN – ADENDA 2 1 INTRODUCCIÓN Se me ha solicitado una variación en el ejemplo “Gestión Almacén”, consistente en poder filtrar a través de fecha. En esta adenda se va a explicar cómo podemos realizar ese filtro. Debemos tener presente que esta explicación presupone que tenemos completamente desarrollado el ejemplo que se muestra en “Gestión Almacén”, y que todo lo que se indicará en este documento parte de esa base. Así pues, si el “querido lector” aún no ha visto cómo se construye dicha aplicación no tendrá más remedio que, antes, echar un vistazo a ese ejemplo (que puede consultar aquí ). Si no con dificultad entenderá lo que se explicará a continuación. Dicho lo anterior... “¡Al ataque!” MODIFICANDO NUESTRO FMENU Situemos nuestro formulario FMenu en vista diseño. Vamos a añadir un cuadro de texto, al que pondremos de nombre txtFecha. Seleccionamos dicho TextBox, sacamos sus propiedades y... Pestaña Otras Nombre, y escribimos txtFecha (esto para el que no se acuerde de cómo “ponemos nombre” a los controles). Pestaña Formato Formato, y seleccionamos “Fecha corta” ¿Por qué le aplicamos este formato? Porque aprovechamos las características de Access en cuanto a validación; es decir, que si el valor que se introduce no es una fecha el propio Access nos lanzará un mensaje de advertencia advirtiéndonos que el formato introducido no es correcto. Eso nos ahorra código de verificación del valor. La segunda ventaja es que Access, al detectar que es formato fecha, nos muestra automáticamente el tip del calendario, para que podamos seleccionar una fecha mediante el ratón (esta característica no está disponible en Access 2003 ) Si queremos “rizar el rizo” podemos irnos a la pestaña Datos Máscara de entrada, y escribirle la siguiente máscara: ##/##/## Eso sí, debemos ser conscientes de que el tip del calendario se va a desactivar. En la etiqueta de ese control podemos escribir algo así como “Filtrar por fecha:”. En definitiva, debería quedarnos una cosa así: 1 La BD de ejemplo os la podéis bajar aquí . 1 Visítame en http://siliconproject.com.ar/neckkito/

description

Almacen en Access

Transcript of GestionAlmacen-Adenda2

Page 1: GestionAlmacen-Adenda2

GESTIÓN ALMACÉN – ADENDA 21

INTRODUCCIÓNSe me ha solicitado una variación en el ejemplo “Gestión Almacén”, consistente en poder filtrar a través de fecha.

En esta adenda se va a explicar cómo podemos realizar ese filtro.

Debemos tener presente que esta explicación presupone que tenemos completamente desarrollado el ejemplo que se muestra en “Gestión Almacén”, y que todo lo que se indicará en este documento parte de esa base.

Así pues, si el “querido lector” aún no ha visto cómo se construye dicha aplicación no tendrá más remedio que, antes, echar un vistazo a ese ejemplo (que puede consultar aquí). Si no con dificultad entenderá lo que se explicará a continuación.

Dicho lo anterior... “¡Al ataque!”

MODIFICANDO NUESTRO FMENUSituemos nuestro formulario FMenu en vista diseño. Vamos a añadir un cuadro de texto, al que pondremos de nombre txtFecha. Seleccionamos dicho TextBox, sacamos sus propiedades y...

– Pestaña Otras Nombre, y escribimos txtFecha (esto para el que no se acuerde de→ cómo “ponemos nombre” a los controles).– Pestaña Formato Formato, y seleccionamos “Fecha corta”→

¿Por qué le aplicamos este formato? Porque aprovechamos las características de Access en cuanto a validación; es decir, que si el valor que se introduce no es una fecha el propio Access nos lanzará un mensaje de advertencia advirtiéndonos que el formato introducido no es correcto. Eso nos ahorra código de verificación del valor.

La segunda ventaja es que Access, al detectar que es formato fecha, nos muestra automáticamente el tip del calendario, para que podamos seleccionar una fecha mediante el ratón (esta característica no está disponible en Access 2003 )

Si queremos “rizar el rizo” podemos irnos a la pestaña Datos Máscara de entrada, y→ escribirle la siguiente máscara:

##/##/##

Eso sí, debemos ser conscientes de que el tip del calendario se va a desactivar.

En la etiqueta de ese control podemos escribir algo así como “Filtrar por fecha:”. En definitiva, debería quedarnos una cosa así:

1 La BD de ejemplo os la podéis bajar aquí.

1Visítame en http://siliconproject.com.ar/neckkito/

Page 2: GestionAlmacen-Adenda2

MODIFICANDO NUESTRAS CONSULTASSituamos nuestra consulta CEntradas en vista diseño y, al grid de la consulta, añadimos el campo [FechE].

Como filtro escribimos, en la línea correspondiente a “Criterios:”, la siguiente expresión:

<=SiInm(EsNulo([Forms]![FMenu].[txtFecha].[value]);Ahora();[Forms]![FMenu].[txtFecha].[value])

¿Qué hace el anterior filtro? Pues lo que hace es evaluar el valor que tenemos en nuestro txtFecha del formulario FMenu. Si no hay valor el filtro resultante es

<= (Fecha actual)

Y si hay valor el filtro resultante es

<= (Fecha del TextBox)

Guardamos la consulta y la cerramos.

Realizamos el mismo proceso en la consulta CSalidas. Añadimos el campo [FechS] y le aplicamos el mismo filtro:

<=SiInm(EsNulo([Forms]![FMenu].[txtFecha].[value]);Ahora();[Forms]![FMenu].[txtFecha].[value])

Es decir:

2Visítame en http://siliconproject.com.ar/neckkito/

Page 3: GestionAlmacen-Adenda2

Guardamos y cerramos la consulta.

Situamos nuestra consulta CStock en vista diseño. Vamos a tener que manipular la combinación de la relación entre las tres tablas que tenemos ahí.

Seleccionamos pues la relación (la línea que las une) entre TProductos y CEntradas2 y click con el botón derecho del ratón. Seleccionamos la opción “Propiedades de la combinación”.

En la ventana que nos aparece seleccionamos la combinación tipo 2 (Incluir TODOS los registros de TProductos...).

Realizamos la misma operación con la relación entre las tablas TProductos y CSalidas2.

Nos centramos ahora en el grid de la consulta. Tenemos un campo llamado [SumaDeEntrada]. Debemos cambiarlo por la siguiente expresión:

TotE: SiInm(EsNulo([SumaDeEntrada]);0;[SumaDeEntrada])

Ahora pasamos al campo [SumaDeSalida], y lo cambiamos por la siguiente expresión:

TotS: SiInm(EsNulo([SumaDeSalida]);0;[SumaDeSalida])

Finalmente, pasamos al campo [Stock] y lo cambiamos por la siguiente expresión:

Stock: [TotE]-[TotS]

Guardamos y cerramos nuestra consulta.

MANIPULANDO NUESTRO INFORMEProcedamos a situar nuestro informe RStock en vista diseño. Necesitamos “reasignar” los campos que antes teníamos en la consulta CStock y que ahora acabamos de manipular.

Seleccionamos pues el campo [SumaDeEntrada] y directamente borramos ese valor y escribimos TotE.

3Visítame en http://siliconproject.com.ar/neckkito/

Page 4: GestionAlmacen-Adenda2

ANTES DESPUÉS (Como en los anuncios de “productos milagrosos” )

Hacemos lo mismo con el campo [SumaDeSalida], cambiándolo por [TotS]

Vamos a manipular el encabezado del informe. Para ello, añadimos un cuadro de texto en el mismo, a la derecha del título.

En la etiqueta de ese cuadro de texto podemos escribir algo parecido a: “Datos a fecha:”.

Es decir, en principio yo he creado una cosa así:

Dentro del TextBox escribimos nuestra maravillosa expresión:

=SiInm(EsNulo([Forms]![FMenu].[txtFecha].[value]);Ahora();[Forms]![FMenu].[txtFecha].[value])

Sin el comparador matemático “menor que” (<), puesto que ahora no estamos aplicando un filtro. Simplemente lo que hacemos es decirle que nos coja el valor que hay en txtFecha de FMenu, y que si no hay valor nos escriba la fecha actual.

Para que la fecha se nos visualice correctamente sacamos las propiedades de ese cuadro de texto y nos vamos a la Pestaña Formato Formato, y seleccionamos la opción “Fecha corta”.→

Y como estoy inspirado creamos un rectángulo alrededor del cuadro de texto y su etiqueta (nos tapará ambos, inicialmente). Hacemos click con el botón derecho del ratón sobre ese rectángulo y seleccionamos la opción “Ubicación” Enviar al→ fondo:

Y siguiendo con el rectángulo seleccionado sacamos sus propiedades y nos vamos a la pestaña

4Visítame en http://siliconproject.com.ar/neckkito/

Page 5: GestionAlmacen-Adenda2

Formato Efecto especial, y seleccionamos el efecto que más nos guste. Yo, por ejemplo, he→ seleccionado “Bajo relieve”.

Y si guardamos nuestro informe ya tenemos el ejemplo desarrollado.

MODIFICANDO NUESTRO CÓDIGO PARA CHEQUEAR LAS SALIDAS

Lo anterior nos crea un conflicto con el código que nos sirve para, en el formulario FSalidas, chequear si podemos sacar la cantidad que queremos sacar. Vamos a arreglar eso.

Abrimos el formulario FSalidas en vista diseño, sacamos las propiedades del campo [CantS] y editamos el código asociado al evento “Después de actualizar” (Pestaña Eventos). Vamos a modificar el código de la siguiente manera:

…Private Sub CantS_AfterUpdate() 'Declaramos las variables Dim vProd As Long Dim vCant As Integer, vCantStock As Integer Dim miSql As String Dim rst As DAO.Recordset 'Cogemos el identificador del producto vProd = Nz(Me.IdProd.Value, 0) 'Cogemos la cantidad introducida vCant = Nz(Me.CantS.Value, 0) 'Si no hubiera cantidad introducida salimos del proceso If vCant = 0 Then Exit Sub 'Guardamos el registro (necesario) DoCmd.RunCommand acCmdSaveRecord 'Creamos la SQL para comprobar el stock miSql = "SELECT C1.[TotE]-C2.[TotS] AS Stock FROM" _ & " (SELECT TEntradas.IdProd, Sum(TEntradas.CantE) As TotE FROM TEntradas" _ & " GROUP BY TEntradas.IdProd HAVING TEntradas.IdProd=" & vProd & ") AS C1," _ & " (SELECT TSalidas.IdProd, Sum(TSalidas.CantS) AS TotS FROM TSalidas" _ & " GROUP BY TSalidas.IdProd HAVING TSalidas.IdProd=" & vProd & ") AS C2" 'Creamos el recordset sobre la SQL Set rst = CurrentDb.OpenRecordset(miSql) With rst 'Cogemos el stock existente vCantStock = Nz(.Fields("Stock").Value, 0) 'Le restamos la cantidad que estamos sacando Select Case vCantStock 'Si el resultado es negativo no permitimos sacar esa cantidad Case Is < 0 MsgBox "No hay stock suficiente de este producto" & vbCrLf & vbCrLf _ & "El stock actual del producto es " & vCantStock + vCant & _

5Visítame en http://siliconproject.com.ar/neckkito/

Page 6: GestionAlmacen-Adenda2

" unidades", vbCritical, "SIN STOCK" 'Borramos la cantidad introducida Me.CantS.Value = Null 'Es necesario hacer un rebote de foco para volver a situar 'el enfoque en CantS Me.IdProd.SetFocus Me.CantS.SetFocus 'Si queda stock, pero es inferior a 10 unidades, lanza un aviso Case Is <= 10 MsgBox "¡Atención! El stock que quedará de este producto es de " _ & vCantStock & " unidades", vbInformation, "STOCK CRÍTICO"

End Select End With 'Cerramos conexiones y liberamos memoria rst.Close Set rst = NothingEnd Sub…

Como veis, hemos tenido que utilizar una SQL un poco “enrevesada”, que no explicaré aquí, pero que os hace el trabajo de “sintetizar en una” varias consultas, a la vez que ya nos filtra por el producto en cuestión que estamos sacando de nuestro almacén.

Y eso es todo. Espero que os sea de utilidad.

Un saludo, y...

¡suerte!

6Visítame en http://siliconproject.com.ar/neckkito/