Imprimir varias veces un mismo registro

Tengo una bd con datos para una rifa, tengo un campo numérico, necesito imprimir cada registro el mismo numero de veces que ese campo numérico. Ejemplo si el campo es 5 entonces tengo que imprimir 5 veces ese registro porque cada uno es un boleto.
1

1 respuesta

Respuesta
1
Te he preparado un par de funciones para que puedas imprimir los boletos de la rifa que tienes activa en tu formulario o bien todos los boletos de todas las rifas que tengas en tu tabla.
Option Compare Database
Option Explicit
Private Sub cmdImpEsta_Click()
Dim oWS As DAO.Workspace 'Objeto WorkSpace para poder Realizar transacciones.
Dim lIdRifa As Long 'Id del Registro de Rifa.
Dim lNumCopias 'Numero de Copias a Imprimir
Dim lIndex As Long 'Indice para el bucle For.
'Desactivo la pantalla y muestro el reloj de arena.
Application.Echo False, "Por favor espere ..."
DoCmd.Hourglass True
'Asigno el WorkSpace al Actual.
Set oWS = DBEngine(0)
' Transacción de Borrado de la Tabla CONTADOR
oWS. BeginTrans
oWS(0). Execute "DELETE * FROM TB_CONTADOR"
oWS.CommitTrans
lIdRifa = Me.txtId
lNumCopias = Me.txtCantidad
'Añado tantas filas a la Tabla Contador como Número de Veces tengo que imprimir.
oWS.BeginTrans
For lIndex = 1 To lNumCopias
oWS(0).Execute "INSERT INTO TB_CONTADOR (Id) VALUES (" & lIdRifa & ");"
Next
oWS.CommitTrans
'Cierro el WorkSpace
Set oWS = Nothing
'Abro el Informe de los Boletos
DoCmd. OpenReport "R_RIFA", acViewPreview,,, acWindowNormal
'vuelvo a activar la pantalla y quito el reloj de arena.
DoCmd.Hourglass False
Application.Echo True
End Sub
Private Sub cmdImpTodas_Click()
Dim oWS As DAO.Workspace 'Objeto WorkSpace para poder Realizar transacciones.
Dim oRS As DAO.Recordset 'Recordset que apunta a la Tabla TB_RIFA
Dim lIdRifa As Long 'Id del Registro de Rifa.
Dim lNumCopias 'Numero de Copias a Imprimir
Dim lIndex As Long 'Indice para el bucle For.
'Desactivo la pantalla y muestro el reloj de arena.
Application.Echo False, "Por favor espere ..."
DoCmd.Hourglass True
'Asigno el WorkSpace al Actual.
Set oWS = DBEngine(0)
' Transacción de Borrado de la Tabla CONTADOR
oWS. BeginTrans
oWS(0). Execute "DELETE * FROM TB_CONTADOR"
OWS. CommitTrans
'Abro un Recordset para sacar todos los valores de Id y Cantidad
Set oRS = oWS(0).OpenRecordset("SELECT Id, Cantidad FROM TB_RIFA;", dbOpenDynaset, dbForwardOnly, dbReadOnly)
'Inicio una transacción y recorro el bucle de Lectura del Recordset para rellenar la tabla contador.
OWS. BeginTrans
Do Until oRS.EOF
lIdRifa = oRS.Fields("Id").Value
lNumCopias = oRS.Fields("Cantidad").Value
For lIndex = 1 To lNumCopias
oWS(0).Execute "INSERT INTO TB_CONTADOR (Id) VALUES (" & lIdRifa & ");"
Next lIndex
oRS.MoveNext
Loop
'Finalizado el bucle, cierro la transacción y finalizo el recordset.
oWS.CommitTrans
oRS.Close
Set oRS = Nothing
'Cierro el WorkSpace
Set oWS = Nothing
'Abro el Informe de los Boletos
DoCmd.OpenReport "R_RIFA", acViewPreview, , , acWindowNormal
'Vuelvo a activar la pantalla y quito el reloj de arena.
DoCmd.Hourglass False
Application.Echo True
End Sub
Si tienes cualquier duda, aquí estoy.
Gracias, voy a estudiarlo con calma
Se me olvidaba comentarte que la gestión de errores corre de tu cuenta.
También acabo de ver como queda lo que te he enviado: se han perdido todas las indentaciones y los saltos de línea joroban un poco el aspecto final y la legibilidad.
Un saludo y espero que te sirva de todas formas.
Una forma muy sencilla de hacerlo es rearte una tabla (llamémosla tabla CONTADOR) que sólo va a tener un campo en el que pondrás el valor numérico del registro de la rifa que quieres imprimir. Tendrá tantas filas con el mismo valor como el numero que tienes en el campo numérico de la tabla con los datos de la Rifa (p. Ej. Si el número es 50, deberás poner en la tabla contador 50 filas con el valor 50).
Una vez tienes esta tabla, realizas una consulta en la que incluirás las tablas Rifa y Contador. Tendrás que establecer una relación entre el campo que citas de la tabla Rifa y el campo de la tabla que hemos creado. Mostrarás todos los campos que desees que aparezcan de la tabla Rifa. Salvas la consulta y la llamas, por ejemplo, CON_RIFA.
Si visualizas la consulta, verás que tienes el resultado deseado.
A la hora de elaborar el informe, en lugar de usar como origen de datos la tabla Rifa, tendrás que usar la consulta que hemos creado.
Si tienes más de un registro de Rifa cada uno con un número distinto y deseas imprimirlos todos, tendrás que añadir a la tabla CONTADOR registros para cada número igual que hemos hecho al principio.
Se puede resolver el problema de otras formas pero ya habría que programar en BV (unas automatizarían este proceso y otras lanzarían el informe tantas veces como indique el número del registro de la Cifra)
Otra solución, por ejemplo, pasa por crear un formulario en el que se pregunte qué registro de Rifa deseas imprimir y que al darle imprimir realize de forma automática el proceso anterior (vaciado de la tabla Contador, añadir tantas filas como el nº del registro de rifa y mandar imprimir el informe a partir de la consulta que hemos hecho).
He entendido la idea de la tabla contador, pero necesito imprimir todos los registros de mi tabla rifa, no entiendo como es la relación de la tabla contador ni como hacer para que mi tabla contador ponga por veces cada registro, ¿me podrías aclarar esto?
GRacias
El asunto no es demasiado complicado. El problema puede estar en tener que explicarlo sin una imagen.
Para empezar, la solución se me ha ocurrido a "volapié" ya que en access no conozco la manera de repetir un registro en un impreso.
En segundo lugar, he llamado a la tabla Contador por llamarla de alguna forma que me recordara que es una tabla que me va a controlar el número de impresiones.
Ahora te aclaro la tabla.
La creas con sólo un campo que ha de ser numérico (del mismo tipo que el campo numérico de tu tabla rifa.
No debe ser clave, aunque sí puede ser un indice que admita duplicados.
Para más comodidad, ponle el mismo nombre que el campo numérico de tu tabla rifa.
Sálvala y ábrela en modo hoja de datos.
Si en tu tabla rifa tienes un registro en el que el campo numérico tiene el valor 5, en la tabla contador pones 5 filas con el valor 5. Si tienes otro registro de rifa con un 3 en el campo numérico, en la tabla rifa escribes 3 líneas con valor 3 ... y así. Es un poco tedioso, lo reconozco y más si tienes muchos registros en la tabla rifa y los valores del campo numérico son altos.
¿He conseguido aclararte algo?
Si te atreves con VBA, dímelo y te puedo enviar una función que te imprima lo que quieres sin necesidad de la tabla CONTADOR.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas