Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Imprimir sólo información en pantalla (https://www.clubdelphi.com/foros/showthread.php?t=62872)

radenf 19-01-2009 15:09:30

Imprimir sólo información en pantalla
 
Un gran saludo a todos.

Quisiera vuestra ayuda con un problema de impresión que no he podido solucionar a pesar de haber buscado en este y otros foros y leído distintos tópicos.
He desarrollado una aplicación que utiliza como base de datos ADO. Estos datos se muestran en el form de la aplicación. Confeccioné un report en Quickreport conectado al dataset y cuando le doy a imprimir en el botón Imprimir que puse en la aplicación, en vez de imprimir el registro visible en la pantalla, imprime todos los registros existentes en la base de datos.
¿Cómo debo proceder? ¿Sería recomendable utilizar un ADOQuery? y si es así ¿alguien puede ayudarme con el código sql?

Desde ya agradezco cualquier ayuda.

luisgutierrezb 19-01-2009 16:22:27

deja en blanco la propiedad dataset al quickreport

radenf 19-01-2009 17:53:52

Estimado luisgutierrezb:

Gracias por tu respuesta.
Eso ya lo hice, siguiendo tu consejo en otro hilo y no funcionó.
¿Conoces alguna otra opción?

Salu2

Bpascal 20-01-2009 00:21:40

Para hacer un reporte que no imprima los registros del dataset y solo el registro actual entonces elimina la banda de detalle, Los campos del registros actual ponlos en en la banda PAGEHEADER por ejemplo la cual el tamaño se puede modificar al gusto.

Yo he utilizado esa tecnica para imprimir informacion que incluso no sale de ninguna tabla, si no de datos desde variables de memoria, por ejemplo un desglose de monedas de una planilla de pago de empleados

att

radenf 20-01-2009 02:07:39

Gracias Bpascal pero tu método no me funciona. Imprime un sólo registro, pero no el que está en pantalla.

Salu2

toni.vi 20-01-2009 09:44:47

Debes de utilizar para el informe el mismo dataset que utilizas en el formulario.

radenf 20-01-2009 11:00:07

Gracias tonivi por tu respuesta.
Tanto el formulario como el qreport están conectados al mismo dataset. La aplicación funciona y el comando imprimir ejecuta la orden de impresión, pero no logro que imprima los registros que estoy viendo en la pantalla y me imprime todos los registros que se encuentran en la BD.

Saludos y gracias

roman 20-01-2009 12:48:23

Una opción sería la de llenar a mano el reporte.

1. Desconectas el QuickRep del dataset, como te dice Luis.

2. En la banda detalle, en lugar de colocar controles QRDBText conectados a tus campos, colocas etiquetas QRLabel.

3. En el evento OnNeedData del QuickRep, asignas los valores de tu registro activo a tus etiquetas:

Código Delphi [-]
QRLabel1.Caption := ADOTable[...];

// Saludos

Bpascal 20-01-2009 16:30:11

Cita:

Empezado por radenf (Mensaje 335066)
Gracias Bpascal pero tu método no me funciona. Imprime un sólo registro, pero no el que está en pantalla.

Salu2


Entonces me gustaria que describieras que controles estas usando para desplegar la informacion en pantalla y si haces algun proceso para llenarlos con datos.

Si yo tengo un DBGRID con muchos registros y a medida que seleciono un registro con las teclas del cursor, al llamar un quickreport.preview donde esta puesto un qrdbtex en la banda de TITULO (y no existe la banda de detalle) siempre aparece el dato del registro que tengo selecionado en el dbgrid.

Si el quickreport esta enlazado a un querry que tiene mas de un registro entonces la banda de detalle mostrará todos los registros de ese querry; haci que la solucion es o filtrar el querry para que solo tenga un registro que es el que deseas o no utilices la banda de detalle.

radenf 20-01-2009 19:07:12

Estimado Bpascal:

Agradezco sinceramente tu ayuda.
El qreport está estructurado en base a dbtext y dbmemo conectados a una tabla. Hay datos (nombre de la persona) en el pageheader y otros datos varios en el detail. Luego de tu sugerencia probé cambiando la estructura del qreport pero sólo obtuve que imprimiera un registro, pero no el que aparece en la aplicación en pantalla.
No utilizo query porque desconozco la sentencia sql para filtrar el registro que se encuentra en pantalla y que es el que deso imprimir.

Salu2 y gracias

Bpascal 20-01-2009 19:24:37

re-
 
Cita:

Luego de tu sugerencia probé cambiando la estructura del qreport pero sólo obtuve que imprimiera un registro, pero no el que aparece en la aplicación en pantalla.
Eliminastes la banda de detalle del reporte?, esta no debe de existir ni siquiera vacia o de lo contrario tan pronto haces el preview la tabla se mueve al primer registro.

Si no existe la banda detalle en el reporte y el registro que aparece es un registro arbitrario entonces me hace sospechar que cuando llamas el quickreport.preview el registro actual no es el que esta mostrando la pantalla.

Por eso te pregunto, como haces para selecionar el registro en la pantalla?, si no usas querry para popular la tabla, entonces me imagino que usas un ttable y localizas los registros con ttable.next, ttable.prior or ttable.findkey ?

roman 20-01-2009 19:35:20

Hola,

He estado intentando la opción de Bpascal, pero no he podido. Si sólo coloco una banda PageHeader, el reporte sale vacío. Si coloco una banda como Title o ColumnHeader, sí se imprime un registro, pero es siempre el primero, como dice radenf.

De hecho, aun cuando sólo se imprima un registro, el dataset se recorre completo, pues al cerrar el reporte veo que el formulario oiginal ya está en el último registro.

// Saludos

radenf 20-01-2009 19:36:07

Cita:

Empezado por Bpascal (Mensaje 335192)
Por eso te pregunto, como haces para selecionar el registro en la pantalla?, si no usas querry para popular la tabla, entonces me imagino que usas un ttable y localizas los registros con ttable.next, ttable.prior or ttable.findkey ?

Utilizo un dbnavigator en la aplicación, conectado a una tabla a través de un datasource.

Salu2 y muchas gracias

Bpascal 20-01-2009 20:26:29

Cita:

De hecho, aun cuando sólo se imprima un registro, el dataset se recorre completo, pues al cerrar el reporte veo que el formulario oiginal ya está en el último registro.
Estoy seguro que tienes una linea de detalle agregada el quickreport.

Estoy usando delphi7 y quickreport 3.6.2

- Abro el projecto que esta en demos llamado fishfact el cual tiene una tabla sobre peces manejado con bde.
- agrego una nueva forma form2, y le pongo un quickreport.
- en la form1 agrego un boton y escibo en el evento form2.quickrepor1.preview;
- en la form2 me aseguro de uncluir correctamente unit1 para que el qucikreport pueda ver el dataset
- en el objectinspector en el quickrepor me voy a la Opcion Bands, todas las sub-opciones estan en falso, hago verdadero solo la opcion "HasTitle", una banda de titulo se agrega al quickrepor automaticamernte.
- Pongo un qrdbtext en la banda de titulo, enlazo el dataset y seleciono el un campo.

Eso es todo lo que hago, cuando corro el programa, selecciono cualquier registro usando el dbnavigator y le doy click al boton de preview, automaticamente me aparece la ventana del preview donde me muestra el lo que puse en la banda de titulo con el dato del registro actual.

Lo he probado con BDE y con ADO

att.

roman 20-01-2009 20:32:22

Cita:

Empezado por Bpascal (Mensaje 335213)
Estoy seguro que tienes una linea de detalle agregada el quickreport.

Y yo estoy seguro que no ;) Estoy haciendo la pruebas especialmente para este problema de radenf, por lo que me he fijado en todos los detalles.

Ahora probaré con el FishFact.

Estoy usando también Delphi 7 y el quickreport que viene incluido.

// Saludos

roman 20-01-2009 20:41:28

Veo entonces, que depende del dataset usado.

Ya he visto el FishFact y funciona como dices. Pero la prueba que hice con MyDac, no funciona.

Ahora, si probaste con ADO y también funciona, entonces el único detalle que veo en relación a radenf es que habías mencionado la banda PageHeader, pero en realidad es la Title. Son distintas.

// Saludos

roman 20-01-2009 21:03:38

Ya está resuelto :)

Sólo había un detalle y éste era fundamental: Hay que enlazar únicamente los QRDBText y no el QuickReport.

Gracias Bpascal,

// Saludos

Bpascal 20-01-2009 23:33:18

Cita:

Sólo había un detalle y éste era fundamental: Hay que enlazar únicamente los QRDBText y no el QuickReport.
Oh!, ya me estaba quebrando la cabeza pensando por que no les funcionaba; supongo que estas cosas pasan con esos componentes que no tienen una documentacion formal y detallada como la tienen los componentes en el help de delphi; la verdad que el quickreport lo aprendí a usar a pura observacion; seguramente siempre he estado enlazando el dataset en los campos y nunca me fije que se podia enlazar una sola vez desde el quickreport.

roman 20-01-2009 23:43:26

Je, je, así es. Hace mucho que no uso el QuickReport y cuando lo hacía siempre comenzaba conectando el reporte completo; ni siquiera se me había ocurrido probar conectando sólo los qrdbtext.

// Saludos

radenf 21-01-2009 01:13:06

Cita:

Empezado por roman (Mensaje 335219)
Ya está resuelto :)

Sólo había un detalle y éste era fundamental: Hay que enlazar únicamente los QRDBText y no el QuickReport.

Sin embargo cuando hago eso no imprime y en el preview no aparece nada.
Seguiré cabezeandome ya que este problema no lo he podido resolver desde hace mucho tiempo, tanto que había dejado de lado mi proyecto.

Agradezco todo su tiempo y dedicación y si tienen más ideas, bienvenidas


La franja horaria es GMT +2. Ahora son las 21:48:20.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi