Necesito una solución urgente (Access 97)

Soy administrador de una base de datos en access 97, con tres tablas relacionadas INCIDENCIAS, PERCEPTOR, REGISTRO DE DATOS. En la tabla REGISTRO DE DATOS, se hace registro de los documentos que posteriormente se fiscalizan. La fiscalización se produce en la tabla INCIDENCIAS, donde se vuelcan los datos de todas las facturas que se fiscalizan. La pregunta es la siguiente: dentro de los campos abiertos en dicha tabla de INCIDENCIAS el "CIF/NIF del proveedor" y "numero de documento" recogen los números de CIF y numero de factura de los distintos proveedores fiscalizados. Por tanto pueden existir coincidencias de número de factura, aunque no de CIF, por tanto mi deseo es que cuando se introduzca el numero de una factura cualquiera, se compruebe con el CIF del proveedor si el numero de factura esta repetido, pues esto seria incorrecto en la fiscalización.
La otra cuestión es: en la tabla REGISTRO DE DATOS, existe un campo que por defecto es siempre "NO" y se denomina "justificado el importe" cuando el fiscalizador, lo modifica a "SI" deje constancia del usuario que lo modifica en el campo creado para tal fin denominado "justificado por". Este hecho siempre es posterior al registro de entrada de los documentos.
Gracias anticipadas por tu atención.

1 Respuesta

Respuesta
1
Bueno pides dos cosas una de ellas se hace en un momento, la otra tendrás que hacer una pequeña curradita para hacerlo bastante aceptable.
1 hay muchas maneras de evitar que un número de factura o un registro determinado no se repita. Se puede hacer en la tabla y poner la llavecita para evitar los duplicados, pero a ti te gustaría una forma más limpia.
Lo primero que haremos es cuando el usuario inserte todos los datos en el formulario e intente pasar a un nuevo registro. Internamente buscaremos el número de factura y si lo encontramos le decimos al usuario que el número de factura ya existe, si es un numero establecido por vosotros puedes aumentar un dígito, sino, le obligamos a que lo cambie.
En el campo Justificado el importe, en Eventos del check en después de actualizar, captas el valor y a partir de ahí captas también su usuario de red y lo plasmas.
Ya me dirás y seguimos
Bueno, no he terminado muy bien de entender lo que me comentas, pero he comentarte por si aclara un poco más lo que deseo lograr, que la base de datos corresponde al control de fiscalización y justificación de las subvenciones concedidas por una Corporación Pública, por tanto los proveedores no son por compras al uso, sino, de los gastos que han de presentar los beneficiarios de dichas subvenciones, para la justificación del gasto subvencionado. Por tanto, no es difícil encontrar un mismo proveedor repetido varias veces, y si como comentas hago uso de que en el campo no se repita el CIF no me dejaría meter nada. Por tanto el detectar si un número esta repetido, ha de ser comparándolo con el CIF del proveedor, ya que, podría darse el caso que proveedores distintos tuviera un numero de factura igual, aunque ya no podría darse que un numero de factura repetido tuviera el mismo CIF del proveedor. ¿Comprendes?
En cuanto a mi deseo de que el usuario que cambie el campo "justificado el importe" a "Sí", es porque somos 20 usuarios, donde el que fiscalice en cada momento sera el que apruebe la justificación y eso lo ha de saber el propio programa en el campo que tengo abierto en la tabla REGISTRO DE DATOS como "justificado por" en condición de quien varíe el campo "justificado el importe" de "No" por el Sí", ya que en el registro inicial este campo esta por defecto en "No" a la espera de su fiscalización posterior.
Y también he de hacerte saber que se podría haber confeccionado de otra manera la base de datos, pero como se ha ido ampliando sucesivamente, los datos que se han volcado impide que empiece de cero. Es por esto que voy buscando este tipo de soluciones para no tener que dar un reset y empezar de nuevo, ya que hay datos que no se pueden perder.
¿Entiendes de código?
Te refieres a VB 6.0? Bueno no mucho estoy en los comienzos. ¿Por?
Lo decía porque puedes impedir que se dupliq los datos por cosdigo siempre y cuando se cumpla el criterio y por otro lado captar el usuario de red que guadaras en una tabla de usuarios asociado a su nombre, cuando este seleccione el checkList aparecerá su nombre.
Vale. ¿No obstante podrías expresarme como plantearlo en access 97 utilizando los datos de campos que te he expresado aquí?. Seria para mi de gran ayuda, ya que si no es algo complicado podría ponerlo como tu lo expreses en el lugar que tu me indiques.
En la relación de uno a varios, es decir de un CIF a Número de F.
Donde Nif es uno y Número de factura puedes ser varios.
Si lo que quieres es buscar un Número de factura y saber si ya existe antes de seguir introduciendo datos, en el control donde pones el número de factura, en propiedades del control, en eventos, después de actualizar, generas un evento y pegas este código.
Dim xCapturaNumfactura As Variant
' Buscamos el Número de factura que el usuario ha introducido
xUb = 0 & DLookup("NFactura", "Tabla donde se guarada las facturas", _
"[NFactura] like '" & CaptaLaFactura & "'") '
' CaptaLaFactura es el campo donde el usuario introduce el Número de f.
If Not xUb = 0 Then ' Si no nos devuelve Cero quiere decir que el número de factura está registrado y le avisamos
Resp = MsgBox("Factura Duplicada..." & vbCrLf & "-------------------------------------------" & vbCrLf & _
"Factura:" & vbCrLf & _
"" & vbCrLf & _
"La Factura asignada está duplicada" & vbCrLf & _
"a este CIF." & vbCrLf & _
"Para operar introduzca un nuevo número de factura." & vbCrLf & _
"-------------------------------------------" & vbCrLf, vbInformation, "Información...")
' hacemos que retroceda en el registro y tambien lo limpiamos con Esc.
DoCmd.GoToRecord , , acLast
SendKeys "{Esc}"
Else
' Aqui la accion q deseas q haga si cumple, sino, lo dejas en blanco te permitirá avanzar.
End If
Cada vez que el usuario introduzca un número que ya existe le avisaremos con un msgbox y limpiaremos el registro introducido.
Un saludo,
-------------------------------------------------------------------
Aplicaciones a medida y Proyectos en Access VBA
Pedir presupuesto
[email protected]
Ok, voy a ponerme manos a la obra. Ya te contesto diciéndote que funciona, que es lo que espero. De todas maneras me gustaría saber si el otro control que exponía al principio, sobre controlar el usuario que modifica el campo de Si/No denominado "justificado el importe" donde por defecto siempre está en No, y para el que tengo creado en la tabla REGISTRO DE DATOS el campo denominado "justificado por". Aquí es donde deseo registre el usuario actual que lo modifique.
Aun así, te agradezco tus indicaciones que me resultan muy valiosas.
Gracias.
Este modulo es para captar el usuario, así que crear un modulo y pega el código.
Para llamar a la función en un cuadro de texto en origen del control pones
=fOSUserName
Si estas en red te mostrará su usuario y sino el que tiene la maquina.
Este cuadro lo puedes dejar bloqueado e inactivo así el usuario no puede tocarlo, y en el check en después de actualizar, pones que habla una tabla de actualización con los criterios del formulario. Eso si en la tabla tienes que poner un cam, po para el usuario.
Ya está todo
Function fOSUserName() As String
On Error GoTo fOSUserName_Err
    Dim lngLen As Long, lngX As Long
    Dim strUserName As String
    Dim a As String
    strUserName = String$(254, 1)
    lngLen = 255
    lngX = apiGetUserName(strUserName, lngLen)
    If lngX <> 3 Then
        fOSUserName = Left$(strUserName, lngLen - 1)
    Else
        fOSUserName = ""
    End If
fOSUserName_Exit:
  Exit Function
fOSUserName_Err:
  MsgBox Error$
  Resume fOSUserName_Exit
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas