Condicionar N° de Factura en base a un Proveedor

Es la primera vez que pregunto en esta página, pero siempre resuelvo mis dudas leyendo aquí. Sin embargo esta vez me ha sido imposible encontrar la solución a un problema que tengo. Lo paso a explicar:

En una tabla llamada [COMPRAS] tengo los siguientes campos.

[Id_Compra] 'Autonumérico y clave principal

[Proveedor] 'Rut del Proveedor

[N° de Factura] 'Numero de la Factura

Ahora bien, en el formulario agrego los 3 datos y ningún problema. El problema pasa que no quiero que haya valores duplicados: "mismo proveedor Mismo N° de Factura", pero si quiero permitir "Mismo N° de Factura distinto proveedor"

Si alguien pudiera ayudarme lo agradecería mucho.

Respuesta
2

Para conseguir lo que quieres, en el evento "Después de actualizar" del campo [N° de Factura], escribe el siguiente código:

...

Private Sub...

If not isnull(me.[N° de Factura].value) then

If dcount("*","Compras","Proveedor=" & me.[Proveedor].value & " AND [Id_Compra]<>" & me.[Id_Compra].value)<>0 then

msgbox "Ya existe esta factura para el proveedor introducido",vbinformation,"DUPLICADO"

me.[N° de Factura].value=null

End if

End if

...

Ten en cuenta que el código considera que el campo Proveedor es de tipo numérico. Si fuera texto deberías cambiar la línea del segundo If por

If dcount("*","Compras","Proveedor='" & me.[Proveedor].value & "' AND [Id_Compra]<>" & me.[Id_Compra].value)<>0 then

A ver si así te sale.

Saludos,

Neckkito

http://nksvaccessolutions.com/

Sabes.

No me resultó, para todos los proveedores ya existentes me da el mensaje de que ya existe, mientras que para los que no existen, no me da problema. Pero así no puedo utilizarlo.

Échale un vistazo a esto: http://www.mediafire.com/download/vbbeg158d4ee1by/Williams.DuplicadoFactura.zip

Después compáralo con lo que tú has hecho, a ver si pillas el quid

Muchas gracias, pero me da el mismo error.

Cuando escribo proveedor 123 y factura 1A me da el mensaje: "ya existe esta factura para el proveedor introducido". Pero cuando escribo Proveedor 123 y factura XXXX(cualquier factura nueva) me salta el mismo mensaje.

A ver...

Acabo de bajarme el archivo y, sin problemas, he creado la factura A2 del proveedor 123. Sin ningún tipo de advertencia.

Es más, he creado las facturas A2 y 5B para ese proveedor y, como comentaba, sin problemas.

¿Estamos hablando de lo mismo?

Dame un momento y repaso qué puede estar pasando.

No tengo idea que puede ser, pero de verdad me pasa esto. Tal como aparece en la captura de pantalla. Proveedor: 123 NFra: A2

Mea culpa. Estaba ejecutando el programa sin tener el código habilitado, y por eso no me daba error. Efectivamente, no me di cuenta de que faltaba un parámetro de filtro.

Vuélvete a bajar la BD de ejemplo, en el mismo enlace, a ver qué tal te va. Te agradecería me indicaras si esta vez te ha ido bien.

Disculpa el lapsus.

Ya me dirás.

Funciona perfecto. sólo una ultima pregunta, si puedes responderme, te lo agradecería un más. ¿Cómo sería si Proveedores fuera Texto y N° Factura fuera Numérico?

Me alegro que al final todo haya ido bien :-)

Respondiendo a tu pregunta, con esas características que comentas la línea del if debería quedarte así:

If DCount("*", "TCompras", "[Proveedor]='" & Me.[Proveedor].Value & "' AND [IdCompra]<>" & Me.[IdCompra].Value & " AND [NFra]=" & Me.[NFra].Value) <> 0 Then

Y si me permites un último comentario, te recomendaría que ni en los nombres de objetos de Access (tablas, consultas, formularios...) ni en los nombres de campos y/o controles utilizaras símbolos extraños (como el º de "Nº factura"). En algunas ocasiones, a la hora de programar, esos caracteres o bien están reservados por el lenguaje, con lo que dan problemas, o bien, por ser "extraños", también dan problemas... En definitiva, que te complican la vida si tienes que programar. De ahí que yo, en el ejemplo subido, haya utilizado algunos nombres diferentes a los tuyos.

Lo dicho: es una recomendación ;-)

¡Gracias! 

De verdad muchas gracias.

Respecto a la recomendación la agradezco mucho. De todas formas era a manera de ejemplo, ya que en la base de datos que estoy haciendo no utilizo ese nombre. de todas formas se agradece. Muchas gracias por la preocupación y pronta respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas