El Rut al estar registrado desaparece

Necesito que me ayuden con el siguiente problema que me ocurre. Estuve haciendo unos cambios en varias tablas y deje de usar por varios días este formulario PROVEEDORES, pero de repente empezó a darme el siguiente problema, que no he podido solucionar.

Al agrear el rut para crear un proveedor, el sistema me avisa que ya existe,

Eso funciona bien, pero después que presiono aceptar me aparecen todos los datos del proveedor pero desaparece el rut que agregue y el cursor queda parpadeando en ese campo

Este es el codigo que tengo para que busque el rut ya existente

Private Sub RUTOb_BeforeUpdate(Cancel As Integer)
If DCount("*", "PROVEEDORES", "RUT='" & Me.RUTOb & "'") > 0 Then
Beep
MsgBox "El PROVEEDOR YA ESTA REGISTRADO", vbInformation, "ATENCION"
Set rst = Me.RecordsetClone
rst.FindFirst "RUT='" & Me.RUTOb & "'"
Me.Undo
Cancel = True
Me.Bookmark = rst.Bookmark
End If
End Sub

1 Respuesta

Respuesta
1

Pero si ya lo tienes registrado ¿para qué quieres que te "vuelque" sus datos? Me explico, las primeras líneas de código las entiendo, que te compruebe si ese proveedor ya existe, pero lo lógico es que le pongas que en caso de que ya exista no ejecute nada, ya que estarías añadiendo otro RUT igual y se supone que el RUT (aquí DNI, es único y clave, por lo que no se puede repetir), que sería

Docmd. Cancelevent

Por otro lado, en principio la instrucción correcta sería hasta

If dcount(.....) then

msgbox"..."

Docmd. Cancelevent

end if

Es decir, antes de actualizar el campo RUT, que compruebe si ya existe, Si es ese el caso, que el cursor se vuelva al control RUT para que lo cambies.

Lo que pasa es que en la factura de compra tengo un item donde busco al proveedor por el nombre y el cuadro combinado proveedor tengo este código cuando no existe el nombre del proveedor en la lista

Private Sub PROVEEDOR_CUADRO_COMBINADO_NotInList(NewData As String, Response As Integer)
Beep
Dim Proveedornuevo As Integer, título As String ', mensaje As Integer
título = "EL PROVEEDOR NO ESTA EN LA LISTA"
'mensaje = vbYesNo + vbDefaultButton1
Proveedornuevo = MsgBox("DESEAS AGREGAR ESTE PROVEEDOR", vbYesNo + vbQuestion, título)
If Proveedornuevo = vbYes Then
'DoCmd.RunCommand acCmdUndo
DoCmd.OpenForm "PROVEEDORES", acNormal, "", "", , acDialog, NewData
Response = acDataErrAdded
End If
End Sub

Cuando presión SI me abre el formulario proveedores para ingresar en nuevo proveedor, pero cuando ingreso el rut me dice que ya existe, y descrubri que el rut realmente existe pero con otro nombre, por eso en el formulario factura_compras en el cuadro combinado me dice que no existe, porque tiene otro nombre.


Private Sub PROVEEDOR_CUADRO_COMBINADO_NotInList(NewData As String, Response As Integer)
Beep
Dim Proveedornuevo As Integer, título As String ', mensaje As Integer
título = "EL PROVEEDOR NO ESTA EN LA LISTA"
'mensaje = vbYesNo + vbDefaultButton1
Proveedornuevo = MsgBox("DESEAS AGREGAR ESTE PROVEEDOR", vbYesNo + vbQuestion, título)
If Proveedornuevo = vbYes Then
'DoCmd.RunCommand acCmdUndo
DoCmd.OpenForm "PROVEEDORES", acNormal, "", "", acFormAdd, acDialog, NewData
Response = acDataErrAdded
End If
End Sub

Entonces es ahí donde me ocurre el error en el formulario Proveedores donde debería aparecer todos los datos del proveedor pero el rut desaparece

Ya descubrí el problema, al abrir el formulario proveedores sin darme cuenta agregue este código

para alimentar el campo mes

Private Sub RutOb_LostFocus()
MES = Texto108
End Sub

Así que lo cambie de campo y se elimino el problema, pero todavía me queda un error, ya que al momento de agregar el nuevo proveedor y guardar el registro debería irse toda la información guardada en ell formulario proveedores al formulario factura_compras

Y eso no ocurre sino que me vuelve a decir si quiero agregar el nuevo proveedor

No sé como lo tienes hecho, pero me parece que te complicas demasiado. Si tengo la tabla Proveedores

Y la tabla Compras(también está detalleCompra, pero no hace falta mostrarla para la explicación).

Tengo el formulario Compras, con el subformulario DetalleCompra

Escribo el numero de factura, la fecha en que la recibo y elijo un proveedor( el cuadro combinado, que se llama realmente Idproveedor está basado en la tabla Proveedores, y tiene dos columnas, aunque sólo se muestra la del nombre. Elijo el que está marcado en negro y

En el control rut me pone el que le corresponde a ese idproveedor en la tabla Proveedores, aunque podrían ser más controles como telefono, dirección etc.

Y claro que me lo guarda en la tabla.

En este caso, en el evento Después de actualizar del cuadro combinado Idproveedor, le tengo puesto

Private Sub IdProveedor_AfterUpdate()
Rut = DLookup("rut", "proveedores", "idproveedor=" & Me.IdProveedor & "")
End Sub

Vamos a suponer que escribo un nombre nuevo, que no está en la lista

Cuando pulso Enter

Si acepto, se abre, en vista diálogo y en un registro nuevo el formulario Proveedores para que ponga sus datos. Una vez rellenados, cierro el formulario Proveedores, y en el combinado ya me aparece su nombre y en RUT su valor. En este caso, en el evento Al no estar en lista del combinado Idproveedor, le tengo puesto

Private Sub IdProveedor_NotInList(NewData As String, Response As Integer)
Dim Proveedornuevo As Integer, título As String, mensaje As Integer
título = "El Proveedor que ha escrito no está en la lista"
mensaje = vbYesNo + vbDefaultButton1
Proveedornuevo = MsgBox("¿Desea agregar este Proveedor a la lista ?", mensaje, título)
If Proveedornuevo = vbYes Then
DoCmd.RunCommand acCmdUndo
DoCmd.OpenForm "Proveedores", acNormal, "", "", acAdd, acDialog
Response = acDataErrAdded
End If
End Sub

Gracias por tu paciencia y enseñanza.

Pero que pasa cuando el nombre del proveedor lo cambiaron manteniendo el mismo Rut. Que debería pasar cuando se abre el formulario proveedores y el rut se repite con el nombre antiguo del proveedor.

cuando coloco el rut del proveedor en el formulario proveedores me deberían aparecer  todos los datos incluyendo el nombre antiguo y es ahi donde puedo cambiar el nombre del proveedor antiguo por el nuevo nombre, grabar esos nuevos datos y que aparezcan el el formulario factura_compras. Como logro eso?

No tiene porqué, si en la tabla Proveedores o en el formulario Proveedores le cambias el nombre al proveedor manteniendo el mismo RUT, lo que pasaría es que te encontrarías con que tienes registros de compras, unos con el nombre antiguo y otros con el nuevo. Si quieres evitar eso, cuando en el formulario Proveedores le cambies el NombreProveedor, y quieras que todos ( y remarco todos) los registros de compras tengan el nombre nuevo de ese proveedor basta con poner, en el evento Después de actualizar del cuadro de texto NombreProveedor del formulario Proveedores

Docmd.setwarnings false

docmd.runsql"update compras set nombreproveedor='" & me.nombreproveedor where rut=" & me.rut & ""

Es decir que si en el formulario proveedores le cambias el nombre a un proveedor, al pulsar Enter te cambiara el nombre del proveedor de todos aquellos registros de Compras, en que el RUT sea igual al que muestra ese momento el formulario.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas