Sunteți pe pagina 1din 6

GESTIN ALMACN ADENDA 21

INTRODUCCIN
Se me ha solicitado una variacin en el ejemplo Gestin
Almacn, consistente en poder filtrar a travs de fecha.
En esta adenda se va a explicar cmo podemos realizar ese
filtro.
Debemos tener presente que esta explicacin presupone
que tenemos completamente desarrollado el ejemplo que se
muestra en Gestin Almacn, y que todo lo que se
indicar en este documento parte de esa base.
As pues, si el querido lector an no ha visto cmo se construye dicha aplicacin no tendr
ms remedio que, antes, echar un vistazo a ese ejemplo (que puede consultar aqu). Si no con
dificultad entender lo que se explicar a continuacin.
Dicho lo anterior... Al ataque!

MODIFICANDO NUESTRO FMENU


Situemos nuestro formulario FMenu en vista diseo. Vamos a aadir un cuadro de texto, al que
pondremos de nombre txtFecha. Seleccionamos dicho TextBox, sacamos sus propiedades y...

Pestaa Otras Nombre, y escribimos txtFecha (esto para el que no se acuerde de


cmo ponemos nombre a los controles).

Pestaa Formato Formato, y seleccionamos Fecha corta


Por qu le aplicamos este formato? Porque aprovechamos las caractersticas de Access en
cuanto a validacin; es decir, que si el valor que se introduce no es una fecha el propio Access
nos lanzar un mensaje de advertencia advirtindonos que el formato introducido no es
correcto. Eso nos ahorra cdigo de verificacin del valor.
La segunda ventaja es que Access, al detectar que es formato fecha, nos muestra
automticamente el tip del calendario, para que podamos seleccionar una fecha mediante el
ratn (esta caracterstica no est disponible en Access 2003 )
Si queremos rizar el rizo podemos irnos a la pestaa Datos Mscara de entrada, y
escribirle la siguiente mscara:
##/##/##
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,
debera quedarnos una cosa as:

La BD de ejemplo os la podis bajar aqu.

Vistame en http://siliconproject.com.ar/neckkito/

MODIFICANDO NUESTRAS CONSULTAS


Situamos nuestra consulta CEntradas en vista diseo y, al
grid de la consulta, aadimos el campo [FechE].
Como filtro escribimos, en la lnea correspondiente a
Criterios:, la siguiente expresin:
<=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. Aadimos el campo [FechS] y le


aplicamos el mismo filtro:
<=SiInm(EsNulo([Forms]![FMenu].[txtFecha].[value]);Ahora();[Forms]![FMenu].[txtFecha].[value])

Es decir:

Vistame en http://siliconproject.com.ar/neckkito/

Guardamos y cerramos la consulta.


Situamos nuestra consulta CStock en vista diseo. Vamos a
tener que manipular la combinacin de la relacin entre las
tres tablas que tenemos ah.
Seleccionamos pues la relacin (la lnea que las une) entre
TProductos y CEntradas2 y click con el botn derecho del
ratn. Seleccionamos la opcin Propiedades de la
combinacin.

En la ventana que nos aparece seleccionamos la combinacin tipo 2 (Incluir TODOS los
registros de TProductos...).
Realizamos la misma operacin con la relacin 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 expresin:
TotE: SiInm(EsNulo([SumaDeEntrada]);0;[SumaDeEntrada])
Ahora pasamos al campo [SumaDeSalida], y lo cambiamos por la siguiente expresin:
TotS: SiInm(EsNulo([SumaDeSalida]);0;[SumaDeSalida])
Finalmente, pasamos al campo [Stock] y lo cambiamos por la siguiente expresin:
Stock: [TotE]-[TotS]

Guardamos y cerramos nuestra consulta.

MANIPULANDO NUESTRO INFORME


Procedamos a situar nuestro informe RStock en vista diseo. Necesitamos reasignar los
campos que antes tenamos en la consulta CStock y que ahora acabamos de manipular.
Seleccionamos pues el campo [SumaDeEntrada] y directamente borramos ese valor y
escribimos TotE.

Vistame en http://siliconproject.com.ar/neckkito/

ANTES
DESPUS
(Como en los anuncios de productos milagrosos
Hacemos lo mismo con
cambindolo por [TotS]

el

campo

[SumaDeSalida],

Vamos a manipular el encabezado del informe. Para ello, aadimos un cuadro de texto en el
mismo, a la derecha del ttulo.
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 expresin:


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

Sin el comparador matemtico 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 Pestaa Formato Formato, y seleccionamos la opcin Fecha corta.

Y como estoy inspirado creamos un rectngulo


alrededor del cuadro de texto y su etiqueta (nos
tapar ambos, inicialmente). Hacemos click con
el botn derecho del ratn sobre ese rectngulo
y seleccionamos la opcin Ubicacin Enviar al
fondo:

Y siguiendo con el rectngulo seleccionado sacamos sus propiedades y nos vamos a la pestaa
4

Vistame en http://siliconproject.com.ar/neckkito/

Formato Efecto especial, y seleccionamos el efecto que ms nos guste. Yo, por ejemplo, he
seleccionado Bajo relieve.

Y si guardamos nuestro informe ya tenemos el ejemplo


desarrollado.

MODIFICANDO NUESTRO CDIGO PARA CHEQUEAR LAS


SALIDAS
Lo anterior nos crea un conflicto con el cdigo 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 diseo, sacamos las propiedades del campo [CantS] y
editamos el cdigo asociado al evento Despus de actualizar (Pestaa Eventos). Vamos a
modificar el cdigo 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 & _
5

Vistame en http://siliconproject.com.ar/neckkito/

" 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 "Atencin! El stock que quedar de este
producto es de " _
& vCantStock & " unidades", vbInformation,
"STOCK CRTICO"

End Select
End With
'Cerramos conexiones y liberamos memoria
rst.Close
Set rst = Nothing
End 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 cuestin que estamos sacando de nuestro almacn.
Y eso es todo. Espero que os sea de utilidad.
Un saludo, y...
suerte!

Vistame en http://siliconproject.com.ar/neckkito/

S-ar putea să vă placă și