Obtener datos archivo vinculado en access

He estado creando una base de datos para utilizar como gestor documental.

Entre otros campos, tengo el campo número de factura y fecha y además un campo con el enlace a la factura en archivo PDF.

Me gustaría saber si puedo programar que en los campos factura y fecha se rellenen automáticamente al vincular la factura. Para obtenerlos la idea sería que el nombre del archivo vinculado los tuviera. Es decir, que el archivo fuera (número Fra.) - (fecha) y se pudieran extraer éstos (con una función similar a la de extrae de Excel) y que los pusiera en los campos comentados.

La idea sería que la gestión de facturas fuera lo más automática posible.

1 Respuesta

Respuesta
1

Hace poco un usuario tenía unas dudas similares, quizás las respuestas que le ofrecí te sirvan de orientación, y si no, vamos viendo para tu caso concreto:

Buscar si existe o no en el nombre o parte del nombre de un archivo en una carpeta "X" un registro y mostrarlo en informe Access

Como extrar parte del nombre de un archivo en una Conculta o Cuadro de texto Access

Muchas gracias. Estoy batallando con ello y he conseguido hacerlo mediante consulta pero no mediante código aunque no he podido quitar el prefijo "Fact" porque me da error. Estaba pensando que quizás debería crear una instrucción en el formulario que al adjuntar un archivo trasladara los campos número factura y fecha a los campos del formulario. Seguiré investigando.

Claro que sería lo ideal hacerlo todo en el formulario. Como no sé cómo trabajas con e formulario ni cómo tienes diseñada tu BD, te cuento lo que yo haría:

1º/ En el formulario (y en la tabla, obviamente) tendría entre otros los campos NumFact, FecFact y RutaFact, donde recoger, respectivamente el número de factura, la fecha factura y la ruta al pdf de la factura en el PC

2º/ El proceso de recogida de los datos implicaría tener en primer lugar la factura en pdf en el ordenador. Luego buscarla desde Access, poner la ruta completa con el nombre del archivo en RutaFact (que en el formulario puede estar oculto), y extraer el número y la fecha del valor de ese cuadro de texto a los otros dos. Todo esto automáticamente al pulsar un botón, por ejemplo.

3º/ El proceso codificado sería éste:

a) Añades un botón a tu formulario y haces los que explica Neckkito en este ejemplo: http://neckkito.xyz/nck/index.php/ejemplos/18-codigo/152-quiero-navegar-y-seleccionar-un-archivo. Fíjate que has de poner un código en el botón y la función en un módulo independiente. Lo único que has de cambiar en el código de ejemplo es la linea:

Me.Archivo.Value = vArchivo

por: Me.RutaFact=vArchivo

b) Con el paso a ya tienes resuelto "vincular" el registro con la factura, y además sin "engordar" la BD. Sigamos. Supondré que los pdfs de las facturas siguen siempre este esquema: Fact 000000 - aaaammdd, es decir, siempre tendrán un prefijo "Fact", un espacio, el número de factura (da igual los dígitos), un espacio, un guión, otro espacio y la fecha en formato aaaammdd.

Antes de seguir con el código... Hasta aquí, al pulsar el botón, se te abrirá una ventana tipo "explorador" de carpetas donde navegarás hasta localizar el pdf de la factura, y cunado lo elijas, en el campo RutaFact del formulario te aparecerá algo como esto:

C:\Users\Pilar\Facturas\Fact 0152 - 20200602.pdf

c) El siguiente paso es extraer de esa cadena el 152 al campo NumFact y el 20200602 al campo FecFact. Para eso, en el código del botón, entre el Me.RutaFact=vArchivo y el End If, añades las siguientes lineas de código:

VArchivo = Left(vArchivo, Len(vArchivo) - 4) 'Con esto quitas de la cadena el ".pdf"
VArchivo = Right(vArchivo, Len(vArchivo) - InStrRev(vArchivo, "Fact ") - 4) 'Con esto quitas de la cadena todo lo que va antes del número de factura
'En este momento, la cadena vArchivo tendrá el número de la factura, un espacio, un guión, otro espacio y la fecha
Me.NumFact = Split(vArchivo, " - ")(0)
Me.FecFact = DateSerial(Left(Split(varchivo, " - ")(1), 4), Mid(Split(varchivo, " - ")(1), 5, 2), Right(Split(varchivo, " - ")(1), 2))

Ah, me olvidaba, si quieres abrir el pdf teniendo la ruta de la factura, puedes seguir este otro ejemplo de Neckkito: http://neckkito.xyz/nck/index.php/ejemplos/18-codigo/154-shellexecute

Muchas gracias por las aclaraciones. La verdad es que ayer estuve hasta tarde (o pronto en la madrugada) intentando diferentes opciones y conseguí lo siguiente pero veo que puedo optimizarlo con tus comentarios. te comento lo que hice.

- Tengo un botón con la siguiente instrucción para buscar la ruta del archivo que se copia en un campo de texto y que se visualiza en un visor pdf a un lado del formulario. 

Private Sub FBSeleccionarArxiu_Click()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
Dim RutaArchivo As Variant
With fd
.Title = "SELECCIÓ DE FACTURES PROVEÏDORS" 
.AllowMultiSelect = False 
.InitialView = msoFileDialogViewDetails 
.Filters.Clear 
.Filters.Add "Todos los archivos", "*.*"
If .Show = True Then
For Each RutaArchivo In .SelectedItems
Next
BuscarArchivo = .SelectedItems(1)
Me.TFEnllaç = BuscarArchivo
Else
MsgBox "Acción cancelada por el usuario"
End If
End With
Set fd = Nothing
End Sub

Por otro lado, tengo los cuadros de texto uno para el número de factura y otro para la fecha que se rellenan al activar un botón con la siguiente función:

Private Sub FBTraspassar_Click()

Me.TFNumFra = Mid([TFEnllaç], InStr([TFEnllaç], "-") + 1, InStr([TFEnllaç], " ") - InStr([TFEnllaç], "-") - 1)
Me.TFMDataFra = Mid([TFEnllaç], InStr([TFEnllaç], "F") + 1, InStr([TFEnllaç], "-") - InStr([TFEnllaç], "F") - 1)
Me.TFMMDataFra = Mid(TFMDataFra, 1, 4) + "-" + Mid(TFMDataFra, 5, 2) + "-" + Mid(TFMDataFra, 7, 2)
Me.TFDataFra = Me.TFMMDataFra

End Sub

donde TFNumFra es el cuadro donde añado el número factura

Lo que me complicó más el proceso fue descubrir cómo poner la fecha en el campo de fecha (que viene directamente de la tabla en formato fecha corta) pues al extraer el texto de la cadena, no lo reconocía como fecha. Para conseguirlo creé dos campos, uno TFMDataFra donde se extrae el texto de cadena, otro TFMMDataFra donde copio el texto deL campo anterior añadiendo guiones (-). De este modo consigo que el campo TFDataFra acepte los datos que vienen del campo TFMMDataFra y el código funcione correctamente.

Posiblemente esté haciendo muchos pasos para llegar al mismo lugar. Miraré lo que me comentas para ver si puedo mejorar la base de datos.

Muchas gracias.

Pilar

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas