Imprimir página | Cerrar ventana

Informes - Impresión pagina actual

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84915
Fecha de impresión: 29/Marzo/2024 a las 06:30


Tema: Informes - Impresión pagina actual
Publicado por: JOchoa
Asunto: Informes - Impresión pagina actual
Fecha de publicación: 23/Diciembre/2019 a las 21:52
Buenas tardes. Mi problema es el sgte:

Tengo un reporte generado desde una consulta el cual podría arrojar muchas páginas. El usuario de la herramienta puede ir navegando por las páginas del reporte revisando los datos o buscando datos, y de repente debe poder decidir que esa pagina en la que está en ese momento es la que quiere imprimir (por ejemplo, la pagina 21). Es claro que el usuario puede ver en qué pagina está (la 21) y en la configuración de la impresión digita que la página a imprimir es la 21, pero esto muchas veces se olvida y termina enviando a impresión un montón de páginas que no quería imprimir. Por eso lo ideal para mi solución es que cuando envía a imprimir un mensaje de advertencia le diga al usuario el número de página que va a imprimir y el usuario pueda aceptar o cancelar... o algo así.

Por favor maestros, ¿Cómo puedo hacer esto?

un saludo desde Colombia


-------------
Jochoa



Respuestas:
Publicado por: pitxiku
Fecha de publicación: 24/Diciembre/2019 a las 17:34
Puedes usar el método DoCmd.PrintOut para enviar el objeto activo a la impresora:

- https://docs.microsoft.com/es-es/office/vba/api/access.docmd.printout

Y para definir las páginas, usa la propiedad Page del informe:

- https://docs.microsoft.com/es-es/office/vba/api/access.report.page%28property%29


Publicado por: JOchoa
Fecha de publicación: 26/Diciembre/2019 a las 16:16
Apreciado maestro pitxiku, gracias por su ayuda con este tema. 
Le comento que he leído las paginas a las que me remitió (entendí que debo leer mejor las ayudas de microsoft) y se me ha solucionado parcialmente mi problema. Lo que he hecho es poner en un menu PopUp una opción para que el usuario imprima la página en la que se encuentra con:
  DoCmd.PrintOut acPages, PaginaActual, PaginaActual, , 2
Donde:
PaginaActual = Reports("miReporte").Page

Esto funciona BIEN cuando el usuario va avanzando de pagina en pagina hacia adelante, pero cuando el usuario se devuelve de pagina el problema que me queda es que el numero de PAGE se queda en el ultimo numero de pagina que había quedado cuando iba hacia adelante por lo cual puede imprimir la página no deseada.
Intenté hacer algo contando con el evento page o format las veces  que el usuario va avanzando pero no supe como contar  cuando se devuelva  para asi capturar la pagina actual.

Si pudiera darme una ayudita con esto.

Muchas gracias Maestro!


-------------
Jochoa


Publicado por: pitxiku
Fecha de publicación: 26/Diciembre/2019 a las 19:31
Sí la propiedad Page no funciona bien, coloca un cuadro de texto en el informe (si es que no lo tienes), para que muestre la página actual (puedes ocultarlo o poner el color de texto blanco si no lo quieres ver); luego usa el valor de ese cuadro de texto para indicar la página a imprimir.


Publicado por: JOchoa
Fecha de publicación: 26/Diciembre/2019 a las 22:32
Apreciado maestro pitxiku, gracias por contestar.
Le comento que ya había yo usado el cuadro de texto para hacer la impresión pero con él ocurre el mismo problema. Lo que hice fue:

1. En la función de imprimir tomé el valor del cuadro de texto así:
intPaginaActual = Reports("miReporte").txtPaginaActual 
DoCmd.PrintOut acPages, intPaginaActual, intPaginaActual, , 1
Esto funciona bien cuando el usuario va hacia adelante en las paginas del reporte, pero cuando se devuelve el valor de txtPaginaActual sigue siendo el último que tenia cuando empezó a devolverse a pesar de que en la pantalla SÍ se muestre bien el valor de la página.

2. Creé una variable pública intPaginaActual y en el evento Detalle_Format del reporte la hacía igual al valor de txtPaginaActual. Pero pasa el mismo problema puesto que este evento no corre cuando se devuelve el usuario de pagina puesto que ya había corrido antes por lo cual esta variable siempre será igual al último valor de página generado

Como podrá ver, sigo con el problema.
Si se le ocurre otras ideas, se lo agradezco.
un abrazo


-------------
Jochoa


Publicado por: javier.mil
Fecha de publicación: 27/Diciembre/2019 a las 19:21
Mirate de la DEMO 24 de mi web http://www.accessdemo.info/" rel="nofollow - http://www.accessdemo.info/
A ver si te sirve ....


-------------
https://www.accessdemo.info" rel="nofollow - https://www.accessdemo.info





Publicado por: JOchoa
Fecha de publicación: 28/Diciembre/2019 a las 09:55
Maestro Javier, gracias por su aporte. Ciertamente el ejemplo sí que me sirve pues aprendí como imprimir la pagina que corresponde al dato actual y sin siquiera tener que abrir el reporte. Pero para la duda que generó este hilo me temo que no aplicaría puesto que se trata de imprimir la pagina actual en la que el usuario está posicionado en un reporte ya abierto.
un abrazo


-------------
Jochoa


Publicado por: pitxiku
Fecha de publicación: 31/Diciembre/2019 a las 16:40
2 cosas:

1. Siento no haber contestado antes, pero he estado un pelín liado.
2. No me había dado cuenta que no se resetea el contador al ir hacia atrás.

Si en tu vista previa sólo muestras una página, una posibilidad es usar 2 botones para cambiar de página, que no sean los de Access. Pueden estar en un formulario emergente o en el ribbon. Así, podemos usar SendKeys para mandar el cambio de página, y tener una variable que almacene el número de página.

En mis pruebas, he usado lo siguiente:
- Informe Clientes: el que abro para probar.
- Formulario con los siguientes controles:
   - txtPagina: Cuadro de texto para pruebas: muestra el número de página en el informe.
   - cmdAdelante: Botón para ir página adelante en el informe.
   - cmdAtras: Botón para ir página atrás en el informe.
   - cmdImprimir: Imprime la página actual en el informe.

Y el código en el formulario es el siguiente:

Option Compare Database
Option Explicit

Private intPagina As Integer

Private Sub cmdAdelante_Click()
    DoCmd.SelectObject acReport, "Clientes"
    SendKeys "{PGDN}"
    intPagina = intPagina + 1
    If intPagina > Reports!Clientes.Page Then intPagina = Reports!Clientes.Page
    Me.txtPagina = intPagina
End Sub

Private Sub cmdAtras_Click()
    DoCmd.SelectObject acReport, "Clientes"
    SendKeys "{PGUP}"
    intPagina = intPagina - 1
    If intPagina < 1 Then intPagina = 1
    Me.txtPagina = intPagina
End Sub

Private Sub cmdImprimir_Click()
    DoCmd.SelectObject acReport, "Clientes"
    DoCmd.PrintOut acPages, intPagina, intPagina
End Sub

Private Sub Form_Load()
    DoCmd.OpenReport "Clientes", acViewPreview
    intPagina = 1
End Sub


Publicado por: JOchoa
Fecha de publicación: 31/Diciembre/2019 a las 20:02
Maestro pitxiku. Muchas gracias por su apoyo (sobre todo que estamos a pleno fin de año!)
Le comento que he practicado esta propuesta. El problema que ahora se me presentó es que dado que el usuario puede hacer zoom para hacer revisión de los caracteres pequeños del informe, ya el SendKeys "{PGUP}" y el SendKeys "{PGDN}"
no cambian la pagina sino que la suben o la bajan y con ello pues se descontrola el
conteo. Pensé en la alternativa de restringir de alguna forma el cambio de zoom
pero la verdad es que dado el diseño del reporte (por algunas letras muy pequeñas) es
muy necesario el tener que aumentar el zoom en muchas ocasiones.


-------------
Jochoa


Publicado por: pitxiku
Fecha de publicación: 02/Enero/2020 a las 15:01
Entonces, poco más se me ocurre. Tal vez se pueda acceder a la casilla dónde aparece el número de página mediante el Api de Windows y tomar el número de alguna forma, pero no tengo tiempo para hacer ese tipo de pruebas.

Otra posibilidad es seguir insistiendo con los usuarios, para que se acostumbren a marcar los números de página que desean imprimir. Más complicado de conseguir, pero tal vez sea el método más efectivo.


Publicado por: JOchoa
Fecha de publicación: 03/Enero/2020 a las 09:00
Muchas gracias maestro Pitxicu. Sus aportes fueron muy valiosos.
un abrazo desde Palmira Colombia

Puede cerrarse este hilo.


-------------
Jochoa



Imprimir página | Cerrar ventana