Validar numero de factura de talonario en formulario access

Tengo un formulario de ventas "frm_ventas", en la cual quiero validar dos campos, el primero es el numero de talonario, es mismo que lo realiza de la siguiente forma:

Private Sub talvt_BeforeUpdate(Cancel As Integer)
If DCount("[talonario].nro_talonario", "[talonario]", "[talonario].[nro_talonario]= Forms!frm_ventas!talvt ") = 1 Then
    MsgBox "Talonario disponible", vbInformation, "CONTROL DE TALONARIO"
    Me!docvt = DLookup("[talonario].tipo_talonario", "[talonario]", "[talonario].[nro_talonario]= " & Me!talvt & " ")
    Me!autorizacionvt = DLookup("[talonario].nroautorizacion_talonario", "[talonario]", "[talonario].[nro_talonario]= " & Me!talvt & " ")
    Me!fechlimiteemisionvt = DLookup("[talonario].fechalimite_talonario", "[talonario]", "[talonario].[nro_talonario]= " & Me!talvt & " ")
Else
MsgBox "No existe el talonario", vbCritical, "CONTROL DE TALONARIO"
DoCmd.CancelEvent
End If
End Sub

de esta forma, cuando ingrese un numero de talonario que no exista, me saldrá un mensaje indicándome que el talonario no existe. Hasta allí todo va bien.

El otro campo a validar es el numero de la factura "nodocvt", para la cual cree una consulta "controltalonariovta", es mismo que muestra los numero de factura del numero del talonario que esta en el frm_venta, en otra tabla "talonario" tengo dos campos, uno donde empieza la numeración y el otro donde termina.

Necesito que me valide si el numero de la factura del talonario no esta en uso y esta dentro de los parámetro de inicio y fin de numeración

hice esta macro, pero me sale que ya esta en uso cualquier numero de ingreso

rivate Sub nodocvt_BeforeUpdate(Cancel As Integer)
If _
DLookup("[talonario].nroinc_talonario", "[talonario]", "[talonario].[nro_talonario]= " & Me!talvt & " ") >= Forms!frm_ventas!nodocvt _
And _
DLookup("[talonario].nrofin_talonario", "[talonario]", "[talonario].[nro_talonario]= " & Me!talvt & " ") <= Forms!frm_ventas!nodocvt _
And _
DCount("[controltalonariovta].nodocvt", "[controltalonariovta]", "[controltalonariovta].[nodocvt]= Forms!frm_ventas!nodocvt ") = 3 _
Then
MsgBox "Numero de talonario disponible", vbInformation, "CONTROL DE TALONARIO"
Else
MsgBox "Numero de talonario en uso o fuera del rango", vbCritical, "CONTROL DE TALONARIO"
DoCmd.CancelEvent
End If
End Sub

1 respuesta

Respuesta
1

A bote pronto, tienes mal las comparaciones: el número inicial tiene que ser menor o igual al número que pones en tu formulario, y el número final tiene que ser mayor o igual al del formulario.

Tu lo has hecho al revés.

No entiendo tampoco el sentido de que el DCount lo iguales a 3, pero por algo lo habrás hecho así...


Un saludo,

Sveinbjorn

Visita la web de Access de Neckkito & Sveinbjorn: http://nksvaccessolutions.com/ 

hola amigo, gracias por tu respuesta

realice la corrección que me diste.

Private Sub nodocvt_BeforeUpdate(Cancel As Integer)
If _
DLookup("[talonario].nroinc_talonario", "[talonario]", "[talonario].[nro_talonario]= " & Me!talvt & " ") >= Forms!frm_ventas!nodocvt _
And _
DLookup("[talonario].nrofin_talonario", "[talonario]", "[talonario].[nro_talonario]= " & Me!talvt & " ") <= Forms!frm_ventas!nodocvt _
And _
DCount("[controltalonariovta].nodocvt", "[controltalonariovta]", "[controltalonariovta].[nodocvt]= Forms!frm_ventas!nodocvt ") = 3 _
Then
MsgBox "Numero de talonario disponible", vbInformation, "CONTROL DE TALONARIO"
Else
MsgBox "Numero de talonario en uso o fuera del rango", vbCritical, "CONTROL DE TALONARIO"
DoCmd.CancelEvent
End If
End Sub

pero hay lago que no me cuadra

el talonario No. 1, tiene numero de facturas del 1 al 100, si yo ya utilice los primeros 10 numero de facturas, entonces el talonario 1 solo tiene disponible del 11 al 100, esto quiere decir que si coloco el numero de factura 10 me saldra error, o si coloco 101 igual, pero si coloco 11 todo esta bien, como puedo hacer esto.

Lo que tienes que hacer son éstas comprobaciones:

Si el nodocvt está en el rango del talonario, entonces

Si el nodocvt ya está usado entonces

               Mensaje de error "número ya usado"

     Si está libre

               Mensaje "número disponible"

Si no está en el rango

Mensaje de error "número fuera de rango"

El código es prácticamente el que tienes. Solo lo has de ajustar un poco.

yes.. pero no logro que funciones,. dame una mano por favor.

Private Sub nodocvt_BeforeUpdate(Cancel As Integer)
If DLookup("[talonario].nroinc_talonario", "[talonario]", "[talonario].[nro_talonario]= " & Me!talvt & " ") >= Forms!frm_ventas!nodocvt _
And DLookup("[talonario].nrofin_talonario", "[talonario]", "[talonario].[nro_talonario]= " & Me!talvt & " ") <= Forms!frm_ventas!nodocvt Then
If DCount("[controltalonariovta].nodocvt", "[controltalonariovta]", "[controltalonariovta].[nodocvt]= Forms!frm_ventas!nodocvt ") >0 Then
MsgBox "Numero de talonario en uso", vbCritical, "CONTROL DE TALONARIO"
DoCmd.CancelEvent
Else
MsgBox "Numero de talonario disponible", vbInformation, "CONTROL DE TALONARIO"
End If
Else
MsgBox "Numero de talonario fuera del rango", vbCritical, "CONTROL DE TALONARIO"
DoCmd.CancelEvent
End If
End Sub

Como ves no era tan difícil, las mismas lineas, pero en otro orden....y un pequeño ajuste en el DCount

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas