Informes en access

Hola Marciana:
Estoy desesperada porque necesito que cada registro de un informe se imprima de la siguiente manera (espero explicarme bien!):
En las páginas impares deben aparecer unos campos determinados, al final de la página impar aparece un campo autoextensible que puede continuar en la página. 2, entonces si los datos de este campo autoextensible siguen en la página 3 (al ser impar deben aparecer unos campos repetidos igual que en la página 1 (por ejemplo unos campos cuyos datos identifican una deteminada entidad...).
¿Esto se puede hacer en access?
¿Cómo?
Si lo sabes solo necesitaría un ejemplo y si es complicado indícame bibliografía o páginas donde pueda aprender...
Saludos y mechísimas gracias.
1

1 respuesta

Respuesta
1
Para hacerlo yo haría un reporte programando. Déjame pensarlo y probarlo y te envío una solución. Cordialmente. Marciana
Hacer dos formularios con la misma tabla (o consulta), en uno, ponerle los controles que van a las páginas impares. Deberías asignar el númeo de página cambiando el número cuando cambia el registro pero de 2 en 2 y con un subnúmero, por ejemplo 1-1, 1-2, 1-3 en uno de los informes generarías los impares y en el otro los pares.
Otra idea podría ser Armar dos consultas una con los campos que van en las páginas impares y otra con los que van en las páginas pares.
Otra ide sería distribuir con un programa, podrías calcular de antemano cuando espacio te lleva, podes armar una tabla generando renglón por renglón generando el número de página también por programa.
Espero que las ideas te sirvan. De lo contrario consúltame. Cordialmente. Marciana
Ante todo muchas gracias por contestar tan rápido y por tu interés!
No entiendo muy bien la última idea: ¿Con qué programa debo hacerlo?
Muchas gracias.
VBA es Visual Basic for Application.
Deberías escribir un módulo que maneje con un recordset la tabla o consulta que quieres imprimir y que genere una tabla con el contenido del listado, es decir un archivo listo para imprimir.
¿Sabes programar?
No se me ocurre como explicarlo más simplemente. ¿Te animarías a describirme los campos que se debe imprimir? Nombre, tipo y cuales van en la impar y cuales en la par.
Cordialmente. Marciana
De nuevo muchas gracias:
Página impar: campos:
nom:texto
telèfon:texto
Sal-sll:texto
Numinscripcio:texto
domicili:texto
localitat:texto
Provincia:texto
datapresentacio:texto
Cnae:texto
ambit:texto
socishomes:número
socisdones:número
treballhomes:número
treballdones:número
Capital:número
capitalC:número
CIF:texto
Qualificacio:fecha/hora
Campos cuyo Inicio en página impar pero pueden seguir en par (si continúan en la tercera página debería figurar los mismos campos anteriores más la continuación de estos):
Notes:memo
Data:memo
asentaments:memo
Esta es la descripción de mi tabla para que se entienda ya que no pretendo que lo hagas tú, con un simple ejemplo me basta. Creo que ya has hecho mucho.
Gracias de nuevo por todo y a partir de ahí empezaré a aprender Visual basic!
Yal vez te haga un ejemplo con menos datos.
Si vas a estudar programación, asesórate bien. Visual Basic no es el mejor programa a mi parecer. Pero hay una razón muy importante a tener en cuenta que es la oportunidad laboral que tienes. Elije lo que tenga mayor demanda. Ojalá te hubiera tenido de alumna.
Espera mi ejemplo
Suerte. Marciana
Te envío una solución intermedia entre las que te dije. El ejemplo es una idea de cómo lo puedes resolver, pero está muy simplificado.
Es así: antes de imprimir hay que duplicar aquellos registros que se extienden hasta una 3er página. Eso se determina calculando la cantidad de caracteres que tienen cargados (función Len()). Deberás determinar ese número haciendo pruebas. En tu caso se produce por la suma de 3er campos memo. Ahora bien, si el registro cumple esta condición se grabarán dos registros, el primero con todos los datos y la porción de los campos memo que quepan sin desbordar a una 3 página (fíjate que la función Left() de mi ejemplo toma solo 10 caracteres) y el segundo registro tendrá los campos que se deben repetir, los que no se deben repetir los puedes dejar como NULL y la restante porción del campo memo.
Dicho de otro modo. Engañamos al ACCESS generando dos registros que repartan entre ambos el contenido de los campos memo.
La función que te mando funciona. La he probado con una tabla Clientes que tiene 3 campos, IdCliente (numérico), nombre(cadena) y ejemplomemo (memo). Hice una copia de la tabla Clientes y la denominé ClientesImprimir, esta última tabla debe estar vacía antes de comenzar, eso sí no debe tener campos autonuméricos (lo pasas a numérico).
Si entiendes esto aún deberás trabajar mucho para llegar a tu resultado. Suerte! Marciana
Public Function Prepara()
Dim rsEntrada As New ADODB.Recordset
Dim rsSalida As New ADODB.Recordset
Dim tamanio, limite As Integer
Dim intermedio As String
rsEntrada.Open "select * from Clientes", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rsSalida.Open "Select * from ClientesImprimir", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
limite = 20
rsEntrada.MoveFirst
Do While Not rsEntrada.EOF
tamanio = Len(rsEntrada!EjemploMemo)
MsgBox tamanio
If tamanio > 10 Then
rsSalida.AddNew
rsSalida!EjemploMemo = Left(rsEntrada!EjemploMemo, 10)
rsSalida!IdCliente = rsEntrada!IdCliente
rsSalida!Nombre = rsEntrada!Nombre
rsSalida.Update
End If
rsSalida.AddNew
rsSalida!IdCliente = rsEntrada!IdCliente
rsSalida!Nombre = rsEntrada!Nombre
If tamanio > 10 Then
rsSalida!EjemploMemo = Right(rsEntrada!EjemploMemo, tamanio - 10)
Else
rsSalida!EjemploMemo = rsEntrada!EjemploMemo
End If
rsEntrada.MoveNext
rsSalida.Update
Loop
RsEntrada. Close
RsSalida. Close
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas