Access - Almacenar documentos

 
Vista:

Almacenar documentos

Publicado por Arnaldo (10 intervenciones) el 28/12/2007 18:34:06
Diseñé una base de datos para almacenar documentos en estantes con estas tablas y algunos de sus campos:

tblObras con los campos IdObra (clave principal) y NombObra, en ella lógicamente se almacenan nombres de la obras.

tblCarpetas con los campos IdCarpeta (c.p) y NombCarpeta

tblFichasdeDocumentos con los campos IdFichDoc (c.p.), NrodeCarpeta y los campos de relación a las tbls anteriores: NombCarpeta; idObra,

De esto tengo un frm basado en la tbl fichadeDocumento (a la que se relacionan las demás tbls). En este frm voy cargando todo tipo de documento y lo voy asignando a distintas obras y carpetas dentro de cada obra. Ahora en este frm necesito aplicar las sgtes funcionalidades:

Al seleccionar una carpeta que aún no fue asignado a una Obra, el campo NrodeCarpeta (que le pertenece a la tblFichadeDocumento y no a la tblCarpetas) se autonumere de 1 en 1, (las asignaciones de obras y carpetas los hago por medio de cuadros combinados). Así por ejemplo: Al seleccionar la Obra “Camino Rural” y seleccionar la carpeta “Antecedentes” le corresponda el Nro 1; a la carpeta “Banco” le corresponda el 2 y así sucesivamente según el orden en que haya sido habilitado primeramente; y este proceso se vuelva a repetir para otra obra. Independientemente una obra de otra. De modo que si existe otra Obra y seleccione la carpeta “Banco” y en la obra aún no existiesen carpetas asignadas pues a Banco le corresponda el Nro 1 en esta obra y seguimos...

Como complicación de esta historia tengo otra: Resulta que en la tblFichaDocumentos tengo un campo llamado “está Lleno”; tipo si/no, que tiene por intención declarar lleno a una carpeta, en cuyo caso necesito se pueda asignar el mismo Nombre de Carpeta a la misma Obra pero con un nuevo nro, de modo a existir la posibilidad de tener dos carpeta con el mismo nombre en una obra pero con nro de carpeta distinto; el nro que le hade corresponder lógicamente debe ser el inmediato siguiente al último nro de carpeta asignado en esa obra. Dará entonces que hasta un momento dado si en una obra se ha utilizado 5 carpetas a este duplicado le corresponderá el 6.

Espero nuevamente contar con una respuesta a estas dudas mía. Mi sincero agradecimiento desde ya.
A todos muy Felices fiestas y que tengan un buen año en el siguiente.

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Almacenar documentos

Publicado por mi menda (1111 intervenciones) el 29/12/2007 03:11:29
Hola Arnaldo:
Para lo primero puedes poner este código en el evento después de actualizar del campo NombObra

NrodeCarpeta = Nz(DMax("NrodeCarpeta","tblFichasdeDocumentos","NombObra = Forms!NomreFormulario!NombObra"))+ 1

Para lo segundo dices "existir la posibilidad de tener dos carpeta con el mismo nombre en una obra pero con nro de carpeta distinto"

Pues no debe de haber ningún problema a menos que tengas un índice único para los campos NrodeCarpeta y NombObra, sí asi fuera lo debes de quitar.

Un Saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Almacenar documentos

Publicado por Arnaldo (10 intervenciones) el 03/01/2008 17:23:41
Mi menda
Con el código este que me facilitaste se sucede la sgte situación:
Ejemplo: en el frm FichadeDocumento selecciono del cboNombObra la obra “Paviment. Rural”; del cboNombCarpeta, selecciono “Notas Remitidas”, el txtNro de Carpeta recibe el valor inicial 1, (correcto esto, la primera obra, la primera carpeta), asigno la fecha del documento y demás datos referente al mismo, paso al sgte registro, selecciono “Paviment. Rural”, carpeta “Banco”, al cual le asigna el nro 2, (aún correcto esto), cargo datos del documento y paso al tercer registro y allí al seleccionar “Paviment. Rural” y seleccione cualquiera de las dos carpeta anteriores, el nro de carpeta queda asignado con el nro 3. (y allí está el error puesto que si selecciono Not. Remitidas, deseo que Nro de carpeta sea el 1 que es el que le corresponde según se le asigno recientemente y si selecciono “Banco” que sea el 2. y sólo cuando quede activado la opción “Carpeta Lleno” se le asigne un nuevo nro a la misma carpeta dentro de esa obra.

Espero ayudas a fin de resolver este tema que me queda grande como mi cebeza. Gracias desde ya
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Almacenar documentos

Publicado por mi menda (1111 intervenciones) el 03/01/2008 19:32:24
Hola de nuevo Arnaldo:

Creo que así te debería de funcionar.

Sí el cboNombCarpeta fuera Numerico

Private Sub NombCarpeta_AfterUpdate()
Dim existeCarpeta As Long
'Buscamos si existe la carpeta
existeCarpeta = Nz(DLookup("NombCarpeta", "tblFichasdeDocumentos", "NombCarpeta = Forms!FichadeDocumento!NombCarpeta"), 0)
' Sí no existe la carpeta o la carpeta esta llena, se empieza a enumerar correlativamente desde 1
If existeCarpeta = 0 Or Me.CarpetaLleno = True Then
Me.NrodeCarpeta = Nz(DMax("NrodeCarpeta", "tblFichasdeDocumentos", "NombObra = Forms!FichadeDocumento!NombObra")) + 1
' Sí ya existe la carpeta y no está llena, se le asigna el mismo nnumero
ElseIf existeCarpeta > 0 And Me.CarpetaLleno = False Then
Me.NrodeCarpeta = DLookup("NrodeCarpeta", "tblFichasdeDocumentos", "NombCarpeta = Forms!FichadeDocumento!NombCarpeta")
End If
End Sub

Sí el cboNombreCarpeta fuera de texto

Private Sub NombCarpeta_AfterUpdate()
Dim existeCarpeta As String
'Buscamos si existe la carpeta
existeCarpeta = Nz(DLookup("NombCarpeta", "tblFichasdeDocumentos", "NombCarpeta = Forms!FichadeDocumento!NombCarpeta"), "")
' Sí no existe la carpeta o la carpeta esta llena, se empieza a enumerar correlativamente desde 1
If existeCarpeta = "" Or Me.CarpetaLleno = True Then
Me.NrodeCarpeta = Nz(DMax("NrodeCarpeta", "tblFichasdeDocumentos", "NombObra = Forms!FichadeDocumento!NombObra")) + 1
' Sí ya existe la carpeta y no está llena, se le asigna el mismo nnumero
ElseIf existeCarpeta <>"" And Me.CarpetaLleno = False Then
Me.NrodeCarpeta = DLookup("NrodeCarpeta", "tblFichasdeDocumentos", "NombCarpeta = Forms!FichadeDocumento!NombCarpeta")
End If
End Sub

Un Saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Almacenar documentos

Publicado por Arnaldo (10 intervenciones) el 07/01/2008 21:32:37
HOla de nuevo.

Muy agradecido estoy por tu ayuda en esto; más abusando de la confianza y de la buena voluntad tuya, me he dado vueltas en este tema y aun no me salgo de ella, aquí planteo esta última situación y aun dándole de mazazos no consigo resolver de en donde estoy metiendo la pata. Disculpe la torpeza pero asi andamos.

La situación es esta:

Si no existe la carpeta en la obra se inicie de 1, y si ya existe pues que se incremente en 1

Es que me he planteado numerar las hojas de cada carpeta y eso no lo consigo. y guardar este nro en un campo de la tblaFichadeDocumentos.

Se que en este ultimo codigo esta la respuesta pero con consigo unir dos condiciones: la cuales son Nombre de obra y Nombre de carpeta, ya que dependiendo de este ultimo es que se ira incrementando el nro de pagina. en cada carpeta de cada obra.

Y esperado el estiron de orejas espero tu respuesta. Gracias nuevamente.
Saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Almacenar documentos

Publicado por mi menda (1111 intervenciones) el 08/01/2008 00:49:58
Después del End If del código anterior pon esto:

Me.NumPagina = Nz(DMax("NumPagina", "tblFichasdeDocumentos", "NombObra = Forms!FichadeDocumento!NombObra And NombCarpeta =Forms!FichadeDocumento!NombCarpeta")) + 1

Un Saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Almacenar documentos

Publicado por Arnaldo (10 intervenciones) el 08/01/2008 21:15:56
Antes de disponerme a enviarte las líneas de código que estuve probando encontré, como se hizo costumbre tu pronta respuesta, por lo que estoy muy agradecido.

Hablando de líneas, esto probé dentro de otro cuadro combinado, que es el lugar donde ira a parar el procedimiento para numerar páginas

'Buscamos si existe la carpeta

' Si no existe la carpeta en la obra se inicie de 1
If existCarp = 0 Or Me.lleno = True Then
Me.DocPagNro = Nz(DMax("DocPagNro", "tblFichaDocumentos", _
"nombcarpeta = Forms!frmFichaDocumentos!nombcarpeta")) + 1

' Sí ya existe la carpeta y no está llena pues, que se incremente en 1
ElseIf existCarp > 0 And Me.lleno = False Then
Me.DocPagNro = Nz(DMax("DocPagNro", "tblFichaDocumentos", _
"nombcarpeta = Forms!frmFichaDocumentos!nombcarpeta")) + 1
End If

Así consigo se incremente de 1 en 1 los documentos en cada carpeta dentro de una misma obra, la falla ocurre en que sigue incrementándose en una carpeta que tenga mismo nombre pero de otra obra en ves de iniciarse nuevamente desde 1, y eso es por no mencionar a la obra dentro del código, claro está

Si coloco las sgtes líneas a continuación del If me da esto: “Se ha producido el error 13 en tiempo de ejecución no coinciden los tipos”

Me.DocPagNro = Nz(DMax("DocPagNro", "tblFichaDocumentos", _
"idObra = Forms!frmFichaDocumentos!idObra" And _
"nombcarpeta = Forms!frmFichaDocumentos!nombcarpeta")) + 1

Y estas últimas líneas serían similares a los que me has facilitado a no ser por las comillas dobles que ubique en cada criterio.

A utilizar las líneas de códigos tuyas después del endIf o mismo en el If, me da esto: “Se ha producido el error 2001 en tiempo de ejecución: canceló la operación anterior”.

Una vez más, por donde estoy pisando mal?

Saludos desde aquí, y gracias nuevamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Almacenar documentos

Publicado por mi menda (1111 intervenciones) el 09/01/2008 00:57:23
Hola Arnaldo:
Tienes que quitar las comillas

Me.DocPagNro = Nz(DMax("DocPagNro", "tblFichaDocumentos, _
"idObra = Forms!frmFichaDocumentos!idObra And _
nombcarpeta = Forms!frmFichaDocumentos!nombcarpeta")) + 1

Solamente pon las comillas al principio de la condicíon y al final.

Date cuenta de una cosa, tienes el mismo código para sí la carpeta esta vacia, para si la carpeta esta llena, para si existe la carpeta, y para sí no existe la carpeta. Te puedes evitar todo eso verificando antes sí los campos NombCarpeta y NombObra estan cumplimentados, es decir, que te salga un mensaje de que es obligatorio rellenar esos campos antes de introducir el numero de Pagina: Podría ser algo así

If Nz(Me.nombObra,0) = 0 Or Nz(Me.nombCarpeta,0)= 0 Then
MsgBox "Es obligatorio cumplimentar antes los campos Nombre de Obra y Nombre Carpeta"
Me.nombObra.SetFocus
Exit Sub
Else
Me.DocPagNro = Nz(DMax("DocPagNro", "tblFichaDocumentos", _
"idObra = Forms!frmFichaDocumentos!idObra And _
nombcarpeta = Forms!frmFichaDocumentos!nombcarpeta")) + 1
End if

Un Saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Almacenar documentos

Publicado por Arnaldo (10 intervenciones) el 15/01/2008 20:42:33
Por demás esta decir que todo hasta ahora a salido a pedir de boca, por lo que gracias de nuevo Menda.

De todo esto que me has ayudado a desarrollar, he creado un formulario de consultas filtrado basado en cuadros combinados con resultados que se ven en un subformulario. Pero como la tblaFichaDocumentos contiene muchos campos y en la intención de evitar el uso excesivo de la barra de desplazamiento horizontal, dispuse usar un cuadro combinado ubicado en el pie del form y que haga cuanto sigue. Al seleccionar un registro hallado en el subform se vea algo como esto:

Obra: Consorcio del Sur, Actas de Reuniones (Carp. N° 1 ) Pag. N° 1

Esto lo obtengo por medio de esta select. que son uniones de los distintos campos del que se compone mi tabla.

SELECT tblCarpeta.idCarpeta, "Obra: " & tblObras!NombObra & ", " & tblCarpeta!NombCarpeta & " " & "(" & "Carp. N°" & " " & tblFichaDocumentos!NrodeCarpeta & " ) " & "Pag. N° " & tblFichaDocumentos!DocPagNro AS NombCarpeta
FROM tblSeparadores INNER JOIN (tblObras INNER JOIN (tblCarpeta INNER JOIN tblFichaDocumentos ON tblCarpeta.idCarpeta = tblFichaDocumentos.NombCarpeta) ON tblObras.idObra = tblFichaDocumentos.idObra) ON tblSeparadores.idSeparadores = tblFichaDocumentos.NombSeparador
ORDER BY "Obra: " & tblObras!NombObra & ", " & tblCarpeta!NombCarpeta & " " & "(" & "Carp. N°" & " " & tblFichaDocumentos!NrodeCarpeta & " ) " & "Pag. N° " & tblFichaDocumentos!DocPagNro;

Ahora el contenido de este cuadro combinado dentro del subformulario no muestra los datos referente al registro activo, toma los datos de un registro x y de alli no cambia ni a palos.

Otro punto en el mismo tema, el resultado de este cuadro combinado lo quiero visualizar en un txt o combobox en el form principal, cosa que no ocurre por medio de utilizar el Generar el origen del control como esta por ejemplo:
=[Subfrm_Busc_x_DistintosCriterios].[Formulario]![cboPrueba]

Espero sigan tus indicaciones, y de nuevo muchas gracias

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Almacenar documentos

Publicado por mi menda (1111 intervenciones) el 15/01/2008 23:14:21
Hola de nuevo:
Para lo primero creo que tienes que actualizar el cuadro combinado cada vez que selecciones un registro,. En el evento al activar registro del subformulario pon:

cboPrueba.Requery

Sí aún así no te funciona sería porque no tienes ninguna condición WHERE en la select.
Sería algo asi:
WHERE campoDelCombo = Forms!NombreFormPrincipal!Subformulario.Form!CampoCoincidenteEnElSubformulario

Para lo segundo creo que la expresión es la correcta, pero prueba a ponerlo de esta forma, porque hay versiones de access que solo entienden en ingles:
=[Subfrm_Busc_x_DistintosCriterios].[Form]![cboPrueba]

O utiliza la ruta completa:

=Forms!NombreFormPrincipal![Subfrm_Busc_x_DistintosCriterios].[Form]![cboPrueba]

Un Saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Almacenar documentos

Publicado por Arnaldo (10 intervenciones) el 17/01/2008 20:00:01
La vergüenza en popa. Huu. hola de nuevo

Estas ultimas indicaciones que me has dado lo estaba haciendo en todo este tiempo pues lo tenia por sabido por la mil veces que lo llevaba a la practica en otros trabajos y aquí no me funcionaba, ahora me cambie de maquina y funciona a la mil.

Esto del origen del control en el cbo que tengo en el formulario principal no responde por ninguna de las formas que me mencionaste y muchos menos por las formas que yo aplique

Hice esto y ya casi funciona: copie directamente el control cbo_prueba que se halla en el subform al formulario principal, y esto funciona, más no se actualiza; al evento al activar registro del subformulario al que le coloque esto:

Private Sub Form_Current()

Las 2 líneas si hacen su cometido con el control que se halla en el mismo subfrm
Me.cboUnirDatos.Requery
Me.cboUnirDatos = cboUnirDatos.ItemData(0)

y Esto debiera de actualizar mi control en el form principal creo no..?
Forms!frm_Busc_x_DistintosCriterios.cboDatosTranspadados.Requery
Forms!frm_Busc_x_DistintosCriterios.cboDatostranspasados.ItemData (0)

End Sub

Te comento que el cbo_DatosTranspasado, es una copia del cboUnirDatos (ya lo dije) y creo que no es necesario la presencia de este ultimo, lo que si falta es actualizar el control cboDatosTranspasado que se halla en el form principal desde el subfor y tal cosa no lo estoy logrando Menda.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Almacenar documentos

Publicado por mi menda (1111 intervenciones) el 18/01/2008 00:27:50
Hola de Nuevo:
Para hacer referencia a un control del formulario principal desde un subformulario seria:

Parent!cboDatosTraspasados.Requery
Parent!cboDatosTraspasados.ItemData(0)

De todas formas te pongo un enlace para la sintaxis de los subformularios

http://es.geocities.com/accessdemo/
Y..... nada de vergüenza, en un foro todos estamos para ayudarnos.

Un Saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Almacenar documentos

Publicado por Arnaldo (10 intervenciones) el 18/01/2008 13:49:03
GRacias de nuevo, sabe pedir ayuda y no preocuparse por resolver por uno mismo la dudas creo esta mal de parte de quien pretende programar . ni bien ayer te hice la consulta esta, di con este comando Parent en la Ayuda de VBa, me funionó esto de actualizar màs la linea que habla del itemdata, me da que no es un procedimiento correcto, tambien probe por esto ultimo:
Valor predeterminado del cuadro combinado segun la ayuda de Acess la sintaxis es:
[nombrecuadro].itemdata(0), asi lo escribo pero Access me convierte el escrito asi [nombrecuadro].[itemdata](0),

Me fijare enel link que me enviaste, y gracias de nuevo.

La verdad es que quiero entenrder bien esto de ud. a ver si pronto tambien no ayu en esto de ayuda.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Almacenar documentos

Publicado por mi menda (1111 intervenciones) el 19/01/2008 00:46:18
Hola:
La propiedad valor predeterminado solo funciona correctamente cuando se inserta un nuevo registro. Creo que nos estamos complicando la vida, si lo que quieres es tener el mismo valor en el combo del form principal según el valor del combo del subformulario, basta con que pongas en la propiedad origen del control del combo del formulario principal:

=NombreSubformulario.Form!NombreCuadro

Otra forma sería desde el evento al activar registro del subformulario, después del codigo que tengas, puedes poner:

Parent!cboDatosTraspasados = Me.cboPruebas

Y no haria falta poner el requery antes

Ya me comentaras
Un Saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar