** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Imprimir Informe en Documentos Separados
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoImprimir Informe en Documentos Separados

 Responder Responder Página  12>
Autor
Mensaje
Boogaloozgz Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 03/Abril/2014
Localización: Zaragoza
Estado: Sin conexión
Puntos: 45
Enlace directo a este mensaje Tema: Imprimir Informe en Documentos Separados
    Enviado: 16/Enero/2020 a las 18:21
Hola a todos y todas,

Estoy echando una mano a una asociación de acogida de niños saharauis durante los veranos, intentando hacerles una pequeña aplicación para gestionar la info de los niños y las familias de acogida; y tengo un problema que no se resolver.

Hay un botón que me muestra un informe basado en una consulta, y lo guarda en una carpeta; en este informe aparece distintas líneas con información sobre los chavales agrupado por familias; necesito que se emita un informe separado por familia automáticamente (no me refiero a hojas separadas -forzar nueva página-) para poder enviar por mail a cada familia únicamente la info del niño que le corresponde. 

Por si no me he explicado bien la información en la consulta es:
  1. Familia 1
    • Dato niño 1
    • Dato niño 1
  2. Familia 2
    • Dato niño 2
    • Dato niño 2
Al actuar sobre el botón se necesitaría que en lugar de guardar un informe en dos hojas separadas, se emitan y guarden dos informes con un nombre p.e. familia1.pdf y familia2.pdf

¿Podéis darme luz sobre como lograr algo así o sabéis de algún ejemplo similar?

Gracias por vuestra atención

Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 16/Enero/2020 a las 20:10
Créate una consulta que te diga las distintas familias que hay.

Explotando esta consulta te creas un informe por cada registro de la misma (usando un recordset para recorrer la misma).
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Boogaloozgz Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 03/Abril/2014
Localización: Zaragoza
Estado: Sin conexión
Puntos: 45
Enlace directo a este mensaje Enviado: 16/Enero/2020 a las 20:48
Muchas gracias,

Voy a intentarlo de ese modo. No controlo mucho lo del recordset, ¿puedo hacerlo con un for each?

Gracias
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 16/Enero/2020 a las 22:40
Set Rs = Currentdb.Openrecordset("xxxx", dbopenfordwardonly)
Do until Rs.eof
    'Trato mi valor
    Docmd.OpenReport "xxx",,,,, Rs!Familia
    Rs.Movenext
Loop
Rs.Close


má o meno ... Wink.
¡Ojo! escrito al vuelo, la sintaxis está de aquella manera ...
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Boogaloozgz Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 03/Abril/2014
Localización: Zaragoza
Estado: Sin conexión
Puntos: 45
Enlace directo a este mensaje Enviado: 21/Enero/2020 a las 08:46
Buenos días a todos,

Gracias a la idea de Mihura he intentado (con casi absoluto desconocimiento del tema) el código que pongo a continuación, pero me salta un error ('3078') diciendo que Access no puede encontrar la tabla o consulta de entrada (La consulta Familias existe en la base de datos y el nombre está escrito correctamente)

Dim dbTemporal As DAO.Database
 Dim rsREGISTROS As DAO.Recordset
 Set dbTemporal = CurrentDb
 

Set rsREGISTROS = dbTemporal.OpenRecordset("Familias", dbOpenDynaset)
    rsREGISTROS.MoveLast
    rsREGISTROS.MoveFirst
Do While Not rsREGISTROS.EOF()
DoCmd.OutputTo acReport, "InfoFamilia", "(*.pdf)", "C:\PROYECTO 976\SAHARA\ZARAGOZA\Familias\Info " & familia & " " & idExpediente &  ".pdf", False, ""
   rsREGISTROS.MoveNext
 DoEvents
    Loop
 
     
    rsREGISTROS.Close
    dbTemporal.Close
    Set rsREGISTROS = Nothing
    Set dbTemporal = Nothing

NOTA: si en lugar de la consulta pongo esos datos en una tabla si la recorre

¿Alguna ayuda? gracias
Arriba
JuanW Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 12/Mayo/2005
Localización: España
Estado: Sin conexión
Puntos: 259
Enlace directo a este mensaje Enviado: 21/Enero/2020 a las 10:20
Hola:
La instrucción: Set rsREGISTROS = dbTemporal.OpenRecordset("Familias", dbOpenDynaset) es para un objeto query salvado en la BBDD.

Para una tabla sería:
Set rsREGISTROS = dbTemporal.OpenRecordset("Familias", dbOpenTable)

Saludos
Arriba
Maverick2019 Ver desplegable
Habitual
Habitual


Unido: 10/Junio/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 145
Enlace directo a este mensaje Enviado: 21/Enero/2020 a las 10:49
Hola Juan.
Depende de lo que quieras hacer. Sí quieres usar el método SEEK, que hace uso de índices y de uso exclusivamente en tablas, sí lo tienes que abrir como tabla. 
Sí lo vas a recorrer solo sín interaccionar, un dbOpenForwardOnly sería lo más indicado. Aunque el origen de datos sea una tabla.

Salu2,


Arriba
Boogaloozgz Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 03/Abril/2014
Localización: Zaragoza
Estado: Sin conexión
Puntos: 45
Enlace directo a este mensaje Enviado: 21/Enero/2020 a las 17:20
Familias es una consulta que tengo guardada en la base de datos, y con eso da el error que comento; con una tabla no.
Arriba
Maverick2019 Ver desplegable
Habitual
Habitual


Unido: 10/Junio/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 145
Enlace directo a este mensaje Enviado: 21/Enero/2020 a las 17:27
Hola
La base de datos a la que apunta dbTemporal ¿contiene la consulta? 
Me extraña mucho que no te deje abrirla como DynaSet y si como Table...

Salu2,

Arriba
Boogaloozgz Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 03/Abril/2014
Localización: Zaragoza
Estado: Sin conexión
Puntos: 45
Enlace directo a este mensaje Enviado: 21/Enero/2020 a las 17:37
Si Maverick2019, la consulta esta creada y guardada en la misma base de datos (las tablas están vinculadas a otro archivo access), y salta ese error.

Tengo una consulta que, entre otros datos, me da por ejemplo:

Descripcion        Familia
Dato 1 Familia A
Dato 2 Familia A
Dato 3 Familia B
Dato 4 Familia C

Lo que pretendo es para cada linea de esa consulta (Familias) imprimir un informe por separado con los datos de Descripcion para cada familia, y guardarlo con el nombre Familia A, Familia B, y Familia C.

No se si hay un modo de hacerlo más sencillo que con el Recordset (La verdad es que no toco access desde hace años, y el tema de VBA lo llevo mas que flojito).
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 21/Enero/2020 a las 17:49
Como te dijo Maverick la primera vez, ábrelo con dbOpenForwardOnly

Set rsREGISTROS = dbTemporal.OpenRecordset("Familias", dbOpenForwardOnly)
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Boogaloozgz Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 03/Abril/2014
Localización: Zaragoza
Estado: Sin conexión
Puntos: 45
Enlace directo a este mensaje Enviado: 21/Enero/2020 a las 18:24
Mihura, lo he hecho tal como decía:

Set rsREGISTROS = dbTemporal.OpenRecordset("Familias", dbOpenForwardOnly)

El error que lanza en este caso es:Error 3061 en tiempo de ejecución. Pocos parametros. Se esperaba 1 
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 21/Enero/2020 a las 18:28
Creo que falta una coma...

Set rsREGISTROS = dbTemporal.OpenRecordset("Familias",, dbOpenForwardOnly)
Xavi, un minyó de Terrassa

Mi web
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 21/Enero/2020 a las 18:49
No le falta ninguna coma ...  Evil Smile

Otra cosa es que le tire un error en el .Movelast, .MoveFirst con el parámetro dbOpenForwardOnly (que no se porqué está de moda ponerlo).

Copio / Pego una prueba rápida que he hecho:

Private Sub Comando8_Click()
    Set DbExterna = CurrentDb
    Dim Rs As DAO.Recordset
    Set Rs = CurrentDb.OpenRecordset("ConsultaFechas", dbOpenForwardOnly)
    Do Until Rs.EOF
        Debug.Print Rs.Fields(0)
        Rs.MoveNext
    Loop
    Rs.Close
    
End Sub
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Boogaloozgz Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 03/Abril/2014
Localización: Zaragoza
Estado: Sin conexión
Puntos: 45
Enlace directo a este mensaje Enviado: 21/Enero/2020 a las 18:51
Gracias por tu aportación Xavi,

Set rsREGISTROS = dbTemporal.OpenRecordset("Fabricacion",, dbOpenForwardOnly)


Salta el mismo error de faltan parámetros.

Ahora si que ando perdido del todo jajajajjaa. ¿Véis alguna otra solución o camino para conseguir lo que necesito? (si es necesario que la asociación recurra a algún desarrollador que solucione este punto creo que lo harían)


Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable