** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Informes - Impresión pagina actual
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoInformes - Impresión pagina actual

 Responder Responder
Autor
Mensaje
JOchoa Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 02/Febrero/2019
Localización: Colombia
Estado: Sin conexión
Puntos: 39
Enlace directo a este mensaje Tema: Informes - Impresión pagina actual
    Enviado: 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
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1510
Enlace directo a este mensaje Enviado: 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
Arriba
JOchoa Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 02/Febrero/2019
Localización: Colombia
Estado: Sin conexión
Puntos: 39
Enlace directo a este mensaje Enviado: 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
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1510
Enlace directo a este mensaje Enviado: 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.

Editado por pitxiku - 26/Diciembre/2019 a las 19:31
Arriba
JOchoa Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 02/Febrero/2019
Localización: Colombia
Estado: Sin conexión
Puntos: 39
Enlace directo a este mensaje Enviado: 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
Arriba
javier.mil Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Agosto/2005
Localización: España
Estado: Sin conexión
Puntos: 4812
Enlace directo a este mensaje Enviado: 27/Diciembre/2019 a las 19:21
Mirate de la DEMO 24 de mi web http://www.accessdemo.info/
A ver si te sirve ....
Arriba
JOchoa Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 02/Febrero/2019
Localización: Colombia
Estado: Sin conexión
Puntos: 39
Enlace directo a este mensaje Enviado: 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
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1510
Enlace directo a este mensaje Enviado: 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


Editado por pitxiku - 31/Diciembre/2019 a las 16:41
Arriba
JOchoa Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 02/Febrero/2019
Localización: Colombia
Estado: Sin conexión
Puntos: 39
Enlace directo a este mensaje Enviado: 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
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1510
Enlace directo a este mensaje Enviado: 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.
Arriba
JOchoa Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 02/Febrero/2019
Localización: Colombia
Estado: Sin conexión
Puntos: 39
Enlace directo a este mensaje Enviado: 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
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable