Access - Comprobar si un equipo esta dentro del periodo de garantía de reparación.

 
Vista:
sin imagen de perfil
Val: 14
Ha disminuido su posición en 8 puestos en Access (en relación al último mes)
Gráfica de Access

Comprobar si un equipo esta dentro del periodo de garantía de reparación.

Publicado por Roberto (9 intervenciones) el 19/02/2013 20:30:07
Hola, me gustaría plantear una duda que os pediría me pudierais solucionar:

Tengo los siguientes campos en una base de datos:

numSerieEq = es un numero de serie del equipo que se envía a reparar. Formato Texto.
fechaRecepcion = es la fecha en la que se recepciona el equipo una vez reparado. Formato Fecha.

La garantía de reparación de un equipo es de 12 meses a contar a partir de la fecha de recepción.

Lo que quisiera es comprobar que tras introducir un numero de serie de un equipo en la caja de texto, este me avisara con una alerta que el numero de equipo introducido ya ha sido grabado anteriormente y han pasado menos de 12 meses desde la última vez que se envió a reparar.

La búsqueda del número de serie sería con un LIKE, pues no tiene porqué ser la cadena introducida exactamente igual a la que quiero buscar (no sé si me explico bien...)

La lógica seria tal que así:

Si el numSerieEq que introduzco LIKE al numSerieEq de un equipo ya grabado anteriormente en la BD Y ADEMÁS han transcurrido desde la fechaRecepcion <= de 365 días hasta la fecha actual = mensaje alerta.


Esperando su pronta contestación, gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Comprobar si un equipo esta dentro del periodo de garantía de reparación.

Publicado por Norberto (753 intervenciones) el 20/02/2013 13:46:53
Hola.

Yo haría una consulta basada en la tabla de reparaciones filtrando por fecha de reparación algo así como
... WHERE DateSerial(Year([FechaRecepcion])+1,Month([FechaRecepcion]),Day([FechaRecepcion])>=Date();

(mejor que FechaRecepcion+ 365 que no tiene en cuenta bisiestos).

En el evento Antes de actualizar del campo numSerieEq haces la comprobación de si el número introducido está en la consulta con un DLookup().

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 14
Ha disminuido su posición en 8 puestos en Access (en relación al último mes)
Gráfica de Access

Comprobar si un equipo esta dentro del periodo de garantía de reparación.

Publicado por Roberto (9 intervenciones) el 21/02/2013 20:47:46
Disculpa mi desconocimiento, pero no tengo muy claro lo que tengo que hacer con esto que me comentas.

Si fueras tan amable, podrías construir la función completa?

He hecho un pequeño esbozo del código de la función:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub numSerieEq_AfterUpdate()
'Comprueba si el numero de serie del equipo que se graba en la aplicación
'coincide con alguno ya guardado en la BD
'y además han transcurrido < 12 meses desde la última recepción del mismo.
 
Dim buscar_numSerieEq As String
Dim buscar_coincidencia As String
 
 
buscar_numSerieEq = DLookup("[numSerieEq]", "[REPARACIONES]", "numSerieEq = '" & Me.numSerieEq & "'")
 
buscar_coincidencia = "SELECT numSerieEq FROM REPARACIONES WHERE fechaRecepcion = DateSerial(Year([fechaRecepcion])+1,Month([fechaRecepcion]),Day([fechaRecepcion])>=Date();"
 
If buscar_numSerieEq And buscar_coincidencia Then
    	MsgBox "ATENCIÓN: Reparación en Garantía.
	Han pasado menos de 12 meses desde la última vez que se envió esta pieza a reparar."
End If
 
End Sub

Hay algo que hago mal, pues el campo buscar_coincidencia me dá valor vacio.

Te agradecería un poco de ayuda para un novato en Visual.

gracias,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Comprobar si un equipo esta dentro del periodo de garantía de reparación.

Publicado por Norberto (753 intervenciones) el 22/02/2013 09:11:09
Hola.

Repito que lo más facil es crear una consulta que contenga las reparaciones del último año, tal y como te comento en el primer post. Luego en el evento BeforeUpdate (mejor que AfterUpdate) pones el siguiente código:

1
2
3
4
5
6
7
8
9
Private Sub numSerieEq_BeforeUpdate(Cancel As Integer)
    Dim Crit as String
    Crit = "numSerieEq = """ & Me.numSerieEq & """"
    If DLookUp("NumSerieEq", "ReparacionesÚltimoAño", Crit) Then
        MsgBox "ATENCIÓN: Reparación en Garantía. Han pasado menos de 12 meses" & _
          " desde la última vez que se envió esta pieza a reparar."
    End If
 
End Sub


Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 14
Ha disminuido su posición en 8 puestos en Access (en relación al último mes)
Gráfica de Access

Comprobar si un equipo esta dentro del periodo de garantía de reparación.

Publicado por Roberto (9 intervenciones) el 05/03/2013 19:52:17
Hola, finalmente he resuelto el problema, aunque de manera un poco ortodoxa, ya que la consulta de actualzación la lanzo cuando inicio la BD.

Por si alguien tuviera un problema parecido, la cosa ha quedado tal que así:

PASO 1: creo una consulta de actualización qryDuplicadosGarantia que se lanza al iniciar la BD:

1
2
3
SELECT REPARACIONES.numSerieEq INTO GARANTIA
FROM REPARACIONES
WHERE (((DateSerial(Year([fechaRecepcion])+1,Month([fechaRecepcion]),Day([fechaRecepcion])))>=Date()) AND ((REPARACIONES.recepcionado)=True));


Con esto consigo que cada vez que se abre la BD, se regenere esta tabla GARANTIA con los cambios que se hayan realizado.

Para lanzar la query al inicio, tan sencillo como programar una macro AutoExec --> abrir consulta.

PASO 2: en el campo numSerieEq creo un evento BeforeUpdate e incluyo el siguiente código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private Sub numSerieEq_BeforeUpdate(Cancel As Integer)
' Comprueba si el numero de serie del equipo que se esta grabando en la aplicación
' coincide con alguno ya guardado en la BD por haber sido recepcionado anteriormente
' y además han transcurrido < 12 meses desde la última fecha de recepción del mismo.
 
' Para comparar los datos del numSerieEq se consulta a la tabla GARANTIA, que se regenera
' cada vez que se abre la aplicación.
 
Dim Crit As String
Dim titulo As String
Dim mensaje As String
 
titulo = "ATENCION: REPARACION EN GARANTIA."
mensaje = "HAN PASADO MENOS DE 12 MESES" & _
          " DESDE LA ULTIMA VEZ QUE SE ENVIO" & _
          " ESTA PIEZA A REPARAR."
 
Crit = "numSerieEq = """ & Me.numSerieEq & """"
 
If DLookup("numSerieEq", "GARANTIA", Crit) Then
    MsgBox mensaje, vbExclamation + vbOKOnly, titulo
End If
 
End Sub


Simplemente, si encuentra un numero de serie de equipo que cumpla las condiciones, salta un mensaje de alerta, nada más.

Si vale, se podría mejorar el código, pero eso lo dejo para los expertos...

Norberto, agradezco tu aporte, me has evitado muchos quebraderos de cabeza, gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar