Error en un Formulario al entrar registros de Clientes que ya existen anteriormente

Tengo un formulario llamado: PedidosVentas.

Desde el mismo pedido simultáneamente es creado el Cliente en MAESTROCLIENTES .

Antes de Insertar un Nuevo pedido al entrar el nombre del Cliente es comprobado si este existe en el MAESTROCLIENTES y si esta, se lo indica al Operador abriéndose una ventana con los todos Clientes existentes para que recoja el Cliente correspondiente y lo traspase al Pedido.

Desde el Formulario de Clientes a través de un botón traspaso los datos del Cliente a el Formulario de Pedidos.

Al intentar traspasar los datos como ya esta abierto el pedido con nuevo numero de Cliente creado en el Pedido me da error de traspaso dándome esta referencia de error:

Os agradecería muchísimo me dieseis alguna forma de evitar esto que ya no se como intentarlo sin conseguir resultados.

Esto son los campos que están implicados en los Formularios:

PEDIDOS

IdCliente -> Tipo numérico (No es clave de la Tabla)

CLIENTES

IdCliente -> Tipo numérico (Clave de la Tabla)

1 Respuesta

Respuesta
2

Cuando hagas el traspaso de los datos de Clientes a Pedidos haz, desde el formulario de Clientes:

1- En el formulario de Clientes, un docmd. Runcommand accmdsaverecord

2.-En el formulario de Pedidos, un Forms! FormularioPedidos. Refresh

A ver si así te va bien.

Muchas gracias por ayuda.

He probado lo que me has dicho y sigue haciendo lo mismo con el agravante que se me disparan todas la alarmas de los campos que han de cumplimentarse obligatoriamente.

Cuando entro directamente al pedido y sin hacer nada y accedo al Fichero de Clientes y traspaso los datos me funciona perfectamente ya que el IdCliente=0, pero al darle un nombre de Cliente se crea un numero de Cliente automáticamente y es cuando me da el error.

El proceso lo he colocado porque he de comprobar que el Cliente no exista porque se crean constantemente duplicados de ellos por no comprobar previamente la existencia.

Al incorporar la rutina de búsqueda de duplicados después de dar el nombre   es cuando me encuentro con el problema que no me hace el traspaso de un formulario a otro pues se ha creado un numero de cliente directamente ya que en el  mismo pedido se dan de alta los Clientes.

Un saludo

Ciertamente, no soy capaz de imaginar cómo lo tienes montado, pero por intuición diría que estás complicando lo que no es complicado.

Te puedo dar dos recomendaciones, bote pronto:

1.- Que intentes mirar si la sistemática de este ejemplo te funciona: http://bit.ly/2aVQIVx

2.- Que intentes utilizar el evento "Antes de actualizar", lo que impedirá que se grabe nada en la tabla hasta que tú no des conformidad. Y eso se hace asignando valor true o false al argumento del procedimiento, que es Cancel.

Si no tendría que ver cómo lo has montado, porque lo que explicas, para mí y como te decía, parece enrevesado, de ahí que los códigos entren en conflicto unos con otros.

Saludos. Neckkito

¿Cómo podría utilizarel evento " Antes de actualizar"?, ¿Dónde podría colocar la rutina para que comprobase anteriormente la duplicidad de Clientes?.

He creado una Consulta de anulación para borrar la línea creada antes de hacer el traspaso de datos del Cliente al Pedido pero me dice que no hay nada que borrar.

Como bola de cristal aún no tengo intenta esta sistemática:

En el formulario Pedido introduce el nombre/número de cliente (lo que utilices). En el evento "Después de Actualizar" de ese campo generas el código para consultar si el cliente existe. Como desconozco, dado que no lo explicas, qué tipo de dato estás utilizando, la comprobación sería, suponiendo que ese campo en cuestión se llama [Cliente]

Private Sub...
'If not isnull(dlookup("Cliente","TablaMaestroClientes","Cliente=" & me.cliente)) then
If not isnull(dlookup("Cliente","TablaMaestroClientes","Cliente='" & me.cliente & "'")) then
msgbox "El cliente no existe. Deberá darlo de alta", vbinformation, "CLIENTE INEXISTENTE"
me.cliente=null
docmd.openform "NombreDelFormDondeDasDeAltaElCliente"
End if
End sub

Teniendo en cuenta que:

- La primera línea del IF, que está comentada, es la que debes usar si el valor del cliente es tipo numérico. Si es tipo texto debes usar la segunda

- Debes ajustar los nombres de los objetos y controles a los que tú tengas en tu base de datos.

De todas maneras insisto: no tengo ni idea de cómo lo tienes estructurado, por lo que por causa de la interacción entre formularios es posible que te falte algún código o alguna acción para que el tinglado funcione.

Si no eres capaz de arreglarlo así lo único que me queda es que me pases una mini-bd con los elementos implicados y una pequeña explicación de lo que estás haciendo para que te salte el error y le echo un vistazo. Si llegamos a este punto puedes colgar tu mini-bd en www.filebig.net y pasarme el enlace de descarga.

Saludos. Neckkito

Tengo preparada la BD para enviártela pero en la dirección que me has dado me pide la dirección del envío.

Ocupa 34 Mb. si me das una dirección te la puedo enviar allí a través wee transfer

Un saludo

No es necesario que rellenes el mail del destinatario. Pero bueno, si prefieres Wee Transfer mi mail es neckkito(ARROBA)gmail(PUNTO)com.

Lo que sí te rogaría es que me enviaras esa BD comprimida en zip o rar, y no en accdb.

Saludos. Neckkito

He podido pasar el archivo, estas son las direcciones que me ha dado:


To download this file, use link:
http://www.filebig.net/files/8Yd2Qyc6SJ
To permanently delete this file, use link (keep it in secret!):
http://www.filebig.net/del.php?8Yd2Qyc6SJVpKNE6Q7mP
To post link to file in forums, use code:
[b][URL=http://www.filebig.net/files/8Yd2Qyc6SJ]http://www.filebig.net/files/8Yd2Qyc6SJ[/URL][/b]
To post link to file in blogs, use code:
<b><a href="http://www.filebig.net/files/8Yd2Qyc6SJ">http://www.filebig.net/files/8Yd2Qyc6SJ</a></b>

Si necesitas algo más dímelo y te lo mando.

Un saludo

Lamento comentarte que el error que te da no le veo ninguna solución porque tienes la base de datos mal estructura, y la estructura de cómo has montado los formularios es bastante deficiente (y lo digo sin ánimo de crítica).

Así como lo tienes montado tienes, en el formulario ARREGLOSCABECERA, dos orígenes de datos distintos, cosa que NUNCA recomiendo que se haga: un origen de datos -> un formulario.

Al tenerlos entrelazados lo que hagas en uno influye en el otro. ¿Qué significa eso? Que cuando tú das de alta un cliente automáticamente se le asigna un idCliente dado que el maestro de clientes tiene ese campo definido como autonumérico, y todo ello a pesar de que no estés directamente en el maestro de clientes. Y eso es así por lo que te comentaba antes: estás utilizando dos orígenes de datos en el formulario (insisto, NO recomiendo en absoluto esa sistemática).

Te lo explico de otra manera: tú das de alta el cliente PEPE, y, automáticamente, se crea un id de cliente, pongamos el 95 (Access lo hace "por detrás", por lo que tú ni te das cuenta).

Cuando vas al maestro de clientes e intentas crear el cliente PEPE se encuentra que el cliente que por lógica debería tener de id el 95, ya ha sido creado, por lo que le asigna el siguiente Id, que es el 96.

Tras lo anterior, es imposible que el idCliente de un formulario, que es el 95, te coincida con el creado, que es el 96, y como no coinciden te lanza este error.

Da igual que tú en la tabla ARREGLOSCABECERA lo hayas configurado como numérico, dado que por la sistemática de tu formulario (de nuevo, varios orígenes de datos), el que prima es la clave principal, y la clave principal tiene ese formulario es idCliente del maestro.

En resumidas cuentas, que, hasta donde yo sé, tu problema no tiene arreglo así como lo tienes estructurado.

Mi recomendación: la que ya te he dado: cambia la sistemática y crea un formulario para cada tabla, y no mezcles datos de tablas diferentes en un único formulario.

Es más: te diría que, de poderse resolver tu problema, con toda probabilidad te aparecería en el futuro algún otro, ya sea por sistemática de trabajo ya sea porque intentes hacer algo con VBA.

Lo lamento, pero así como lo tienes no puedo hacer nada más que explicarte que no tiene arreglo y porque no lo tiene.

Saludos. Neckkito.

Muchas gracias por toda tu ayuda, ya me temía algo de eso, y creo que voy a restructurar esa entrada de datos como me has comentado, creare en otro form al Cliente y después haré el traspaso de los datos al form principal.

Un saludo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas