Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Reto en QuickReport - Formulario duplicado en 1 página (https://www.clubdelphi.com/foros/showthread.php?t=65441)

bubba 15-12-2009 13:48:34

Reto en QuickReport - Formulario duplicado en 1 página
 
Hola compañeros de penurias,

La verdad es que hace mucho tiempo que utilizo QuickReport y "he salido" casi de todo, pero hoy me han planteado un problema que no le veo solución, os comento.

La aplicación imprime los albaranes en matricial, en papel A5 (15 cm), y ahora desean cambiar la impresora por una láser (ya era hora!), y desean imprimir en papel A4 con una línea de microcorte en la mitad de la hoja y me plantean que el albarán (cabecera, detalle y pie), lo imprima en la parte superior del corte y como copia en la parte inferior del corte.

Pensándolo con QuickReport, a la que acabe el pie en la primera mitad, me va a hacer un salto de página.

He hecho pruebas con TQRCompositeReport (nunca lo había probado), y he conseguido imprimir dos reports, pero claro, de la forma que trabaja, hace una cabecera, las líneas del primer report y las líneas del segundo report a continuación. Yo no quiero eso, me interesa que tanto la cabecera, como el detalle ("n" líneas), como el pie, se repitan en la parte superior del impreso, como en la parte inferior del impreso, vamos, una copia imagen.

¿ Alguna sugerencia ?

(Al cliente le he comentado que lo mejor es hacer los formularios en A5, que creo que con una láser no tendrá problemas para cargarlos y ya está, imprimiré dos veces el report, pero me he quedado con la curiosidad).

Muchas gracias por aguantar el tocho!!

Saludos

Aleca 15-12-2009 14:45:14

la solucion q use una vez q me paso lo mismo (para recibos) arme los dos en la pagina (duplique los TQRLabel) y los carge manualmente, es un poco tedioso el tema, por eso la posibilidad q decis al final es la mas conveniente.
:)

sergiovalp 15-12-2009 14:54:47

yo he puesto multiples reportes en un form, y al imprimirlos, estos me aparecen uno tras otro en papel, sin corte de hoja.

hace mucho que hice eso, no me acuerdo si usé el composite, seguramente que si. Pero la idea es que en un mismo form pongas el reporte normal, que mida mas menos la mitad de la hoja, y en la forma, más abajo, copies el quick report anterior (la hoja completa).

al imprimirlo, deben aparecer los dos juntos, uno arriba el otro más abajo.

saludos

bubba 15-12-2009 16:28:59

Cita:

Empezado por Aleca (Mensaje 348856)
la solucion q use una vez q me paso lo mismo (para recibos) arme los dos en la pagina (duplique los TQRLabel) y los carge manualmente, es un poco tedioso el tema, por eso la posibilidad q decis al final es la mas conveniente.

Hola Aleca,

Gracias por tu respuesta, pero la verdad es que eso ya me ha ocurrido (malditos recibos!), y apliqué una solución similar a la tuya (yo utilicé QRDBText y simplemente hice mas larga la Detailband, sin Headerband, ni Footerlband, ajustándolo a 3 recibos por página que era lo que necesitaba el cliente), pero este caso es diferente, me interesa que haya tanto la Header, como la Detail y la Footer.

Igual te refieres a poner TQRLabels y con un contador ir montando yo las líneas, pero deberé controlar el salto de página y demás..., en fín, lo probaré a ver que tal.

Gracias!

bubba 15-12-2009 16:34:00

Cita:

Empezado por sergiovalp (Mensaje 348857)
yo he puesto multiples reportes en un form, y al imprimirlos, estos me aparecen uno tras otro en papel, sin corte de hoja.

hace mucho que hice eso, no me acuerdo si usé el composite, seguramente que si. Pero la idea es que en un mismo form pongas el reporte normal, que mida mas menos la mitad de la hoja, y en la forma, más abajo, copies el quick report anterior (la hoja completa).

al imprimirlo, deben aparecer los dos juntos, uno arriba el otro más abajo.

saludos

Hola Sergio y gracias también por tu respuesta, si conseguiste eso, eso es lo que me interesa!, pero no veo cómo hacerlo, es decir, he probado 2 reports, iguales, y la única manera de previsualizarlos (o imprimirlos), a la vez, es con el Composite, pero hace lo que digo en el primer post. No veo como hacer para que previsualice los dos en una misma página, de hecho, si haces un Preview, lo harás de un solo report, no de los dos.

Gracias!

afunez2007 15-12-2009 17:50:45

La solucion a ese tema es la siguiente:
1.- En el quick report haces lo siguiente:
-Utilizas las opciones custom size y defines el tamaño de la pagina, imagino que sera como 8.5" x 6".
-Luego que lo hayas cambiado y aceptado, vas a las opciones nuevamente y lo pones en default.
2.- A nivel de windows:
-Impresoras y Faxes: Le das click derecho, y luego le das propiedades del servidor, le das a la opcion de crear nuevo y defines el tamaño tal y como lo definiste en el quick report, 8.5" x 6".
- En las propiedades de la impresora, puedes establecer este papel por defecto y el quick report trabajara con el y no hara los saltos

Luego solo haces que el quick report imprima 2 copias del reporte y listo.

Como anotacion de este asunto yo he probado esto y funciona, pero la unica cosa es que en el PrintPreview solo se ve una, pero si lo envias directamente a la impresora si salen las 2 copias.

Espero te sirva la informacion

Saludos

bubba 15-12-2009 20:17:18

Cita:

Empezado por afunez2007 (Mensaje 348871)
La solucion a ese tema es la siguiente:
1.- En el quick report haces lo siguiente:
-Utilizas las opciones custom size y defines el tamaño de la pagina, imagino que sera como 8.5" x 6".
-Luego que lo hayas cambiado y aceptado, vas a las opciones nuevamente y lo pones en default.
2.- A nivel de windows:
-Impresoras y Faxes: Le das click derecho, y luego le das propiedades del servidor, le das a la opcion de crear nuevo y defines el tamaño tal y como lo definiste en el quick report, 8.5" x 6".
- En las propiedades de la impresora, puedes establecer este papel por defecto y el quick report trabajara con el y no hara los saltos

Luego solo haces que el quick report imprima 2 copias del reporte y listo.

Como anotacion de este asunto yo he probado esto y funciona, pero la unica cosa es que en el PrintPreview solo se ve una, pero si lo envias directamente a la impresora si salen las 2 copias.

Espero te sirva la informacion

Saludos

Hola!

Pues lo he probado y no me funciona. Esto lo he hecho muchas veces y me ha funcionado, pero con impresoras matriciales, que tenían papel continuo y fijaba el tamaño del formulario (tanto en QuickReport, como en Windows -Propiedades del Servidor-), pero lo he probado con mi impresora (Multifunción Brother), y no, al acabar el primer Report expulsa la hoja y supongo que una láser hará lo mismo...

No sé que debo estar haciendo mal o es que quizás con impresoras que trabajan con hojas sueltas, al finalizar la impresión hace el salto expulsando la hoja.

Muchas gracias por tu respuesta!

sergiovalp 15-12-2009 20:20:43

Cita:

Empezado por bubba (Mensaje 348865)
Hola Sergio y gracias también por tu respuesta, si conseguiste eso, eso es lo que me interesa!, pero no veo cómo hacerlo, es decir, he probado 2 reports, iguales, y la única manera de previsualizarlos (o imprimirlos), a la vez, es con el Composite, pero hace lo que digo en el primer post. No veo como hacer para que previsualice los dos en una misma página, de hecho, si haces un Preview, lo harás de un solo report, no de los dos.

Gracias!


Me acordé como se hace:

1) creas una forma (form1)
2) en la forma agregas los dos reportes (qrp1 y qrp2)
3) en la forma pones el composite (comp)
3) en el evento OnAddReports agregas estas lineas:

Código Delphi [-]
procedure TForm1.compoAddReports(Sender: TObject);
begin
  compo.Reports.Add(qrp1);
  compo.Reports.Add(qrp2);
end;

4) y para llamar a los reportes unidos:


Código Delphi [-]
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  compo.OnAddReports := form1.CompoAddReports;
  compo.preview;
end;


Eso seria, que te resulte

saludos

Sergio
chile

bubba 16-12-2009 10:40:44

Cita:

Empezado por sergiovalp (Mensaje 348899)
Me acordé como se hace:

1) creas una forma (form1)
2) en la forma agregas los dos reportes (qrp1 y qrp2)
3) en la forma pones el composite (comp)
3) en el evento OnAddReports agregas estas lineas:


Eso seria, que te resulte

saludos

Sergio
chile

Hola Sergio,

Gracias por la respuesta, pero es lo que comento en el post inicial, he utilizado el Composite y me pone un report a continuación del otro, sólo el detalle, cuando me interesa tanto la cabecera, como el pie.

Finalmente estuve probando la idea de duplicar todo en una sola banda (Headerband para ser exactos), con TQRLabels, sin TDataset y programando el evento OnNeedData y me funciona, de hecho voy contando las líneas y voy rellenando los QRLabels de la parte superior y la parte inferior, cuando llego al nº máximo de líneas, hago un NewPage y al finalizar hago el correspondiente Preview y me salió perfecto, aún debo perfeccionarlo, ya que hice una prueba con varios TQRLabels (tantos como filas caben en el impreso), pero lo he pensado y no hace falta, basta con tener una variable que me indique la posición inicial (Top), de la fila de los TQRLabels y cada vez que cambio de línea (registro en la tabla), le sumo "n" puntos, cuando llego al contador de líneas que caben, pues forzo el NewPage como comento y esta variable la inicializaría de nuevo con la posición Top inicial y ya está.

El código que he utilizado de momento y en el que debo cambiar por la idea esta de tener una variable con la posición Top es este:

Código Delphi [-]
procedure TfrmDobleQR2.qrAlbaranNeedData(Sender: TObject;
  var MoreData: Boolean);
var
   nLin, n, i: Integer;
begin
   i := 1;
   nLin := 18;
   for n := 1 to nLin do begin
      (FindComponent('qrlCodigo'+IntToStr(i)) as TQRLabel).Caption := 'Código ' + IntToStr(n);
      (FindComponent('qrlCodigo2'+IntToStr(i)) as TQRLabel).Caption := 'Código ' + IntToStr(n);
      (FindComponent('qrlDescripcion'+IntToStr(i)) as TQRLabel).Caption := 'Descripción ' + IntToStr(n);
      (FindComponent('qrlDescripcion2'+IntToStr(i)) as TQRLabel).Caption := 'Descripción ' + IntToStr(n);
      Inc(i);
      if i > 5 then begin
         i := 1;
         qrAlbaran.NewPage;
      end;
   end;
   if i <> 1 then begin
      for n := i to 5 do begin
         (FindComponent('qrlCodigo'+IntToStr(n)) as TQRLabel).Caption := '';
         (FindComponent('qrlCodigo2'+IntToStr(n)) as TQRLabel).Caption := '';
         (FindComponent('qrlDescripcion'+IntToStr(n)) as TQRLabel).Caption := '';
         (FindComponent('qrlDescripcion2'+IntToStr(n)) as TQRLabel).Caption := '';
      end;
      qrAlbaran.NewPage;
   end;
   MoreData := False;
end;

Muchas gracias a todos!

Saludos

dtomeysoto 16-12-2009 13:53:29

mi solucion
 
Hola amigo, te respondo lo que hice tiempo atrás para logras lo que necesitas.

Usé una tabla temporal, en ella puse los campos de los datos que tenía que visualizar en el reporte. Además agregué como primer campo uno de tipo entero.

Luego los datos que tengo que mostrar los puse en la tabla temporal y el campo adicional lo puse en 1. Repeti el proceso pero poniendo en 2 el campo adicional.

Luego en el reporte use un grupo y como expresion use el campo temporal, al usar el grupo substitui la banda para el encabezado de pagina, lo mismo hice con el pie de pagina que lo substitui por el pie del grupo.

Me dio un tin de trabajo pero logré mi objetivo, incluso al pie del grupo le agregué una banda tipo child con la linea de corte y la habilite cuando el campo adicional era 1 y desabilite cuando era 2.

Bueno espero que con esta idea logres hacer lo que necesitas.

jafera 16-12-2009 16:16:51

Buenas tardes, yo cuando he necesitado hacer algo similar, he optado por colocar dosveces el report en el papel A4 poniendo una linea de corte en la mitad y no me da ningun problema.

Actualmente he pasado todos mis reports de QR5 a QRDesign, así se pueden modificar desde la aplicaciónsin tener que recurrir al código, solo se tiene que vigilar que el usuario no sea un "manitas", lo toque y luego diga que no va o bien se protege el acceso por contraseña.

Cualquir cosa ya sabes.

Josep

bubba 16-12-2009 21:24:53

Cita:

Empezado por dtomeysoto (Mensaje 348959)
Hola amigo, te respondo lo que hice tiempo atrás para logras lo que necesitas.

Usé una tabla temporal, en ella puse los campos de los datos que tenía que visualizar en el reporte. Además agregué como primer campo uno de tipo entero.

Luego los datos que tengo que mostrar los puse en la tabla temporal y el campo adicional lo puse en 1. Repeti el proceso pero poniendo en 2 el campo adicional.

Luego en el reporte use un grupo y como expresion use el campo temporal, al usar el grupo substitui la banda para el encabezado de pagina, lo mismo hice con el pie de pagina que lo substitui por el pie del grupo.

Me dio un tin de trabajo pero logré mi objetivo, incluso al pie del grupo le agregué una banda tipo child con la linea de corte y la habilite cuando el campo adicional era 1 y desabilite cuando era 2.

Bueno espero que con esta idea logres hacer lo que necesitas.

Hola,

Muy buena tu idea, lo que pasa es que creo ver un inconveniente...

Entiendo lo de tener indexado por el campo temporal con valor 1 ó 2, tambien las bandas de GroupHeader y GroupFooter (muy bueno, en serio, no lo había pensado), para repetir la impresión, pero sin probarlo, creo que QuickReport si hay muchos registros de detalle, antes de imprimirte cuando llegue a los registros con valor 2 (el segundo grupo), te ocuparía toda la página y haría el salto, no?

Saludos y gracias!

bubba 16-12-2009 21:27:01

Cita:

Empezado por jafera (Mensaje 348979)
Buenas tardes, yo cuando he necesitado hacer algo similar, he optado por colocar dosveces el report en el papel A4 poniendo una linea de corte en la mitad y no me da ningun problema.

Actualmente he pasado todos mis reports de QR5 a QRDesign, así se pueden modificar desde la aplicaciónsin tener que recurrir al código, solo se tiene que vigilar que el usuario no sea un "manitas", lo toque y luego diga que no va o bien se protege el acceso por contraseña.

Cualquir cosa ya sabes.

Josep

Hola Josep,

No entiendo lo de "colocar dos veces el Report en el papel A4" :-?

Gracias y un saludo!

jafera 17-12-2009 18:48:53

Pues sencillamente colocar todos los componentes dos veces en un solo papel A4, el cual se divide en dos B5.

Ejemplo si en la primera mitad de reporte tienes esta la etiqueta1, el campo de texto1 y el memo1, en la segunda mitad pones la etiqueta2, el campo de texto2 y el memo2 con los mismos valores de la tabla.

Posiblemente no sea lo mas ortodoxo pero a mi así me funciona

Josep

luis vazquez 21-12-2009 03:45:28

solucion facil
 
La verdad yo no soy muy experto en reportes pero me toco hacerlo a un cliente para sus nomina y use la cabecera nada mas y la extire hasta cubrir la hoja y repeti los dbtext y demas componebtes dos veces y simplemente los separe uno de otro hasta quedar la raya perforada en medio, tal ves no sea la opcion mas ortodosa ni la mas guiada por las reglas pero me funciono al pelo, todos los datos los tenia en una base de datos y cada pagina salia con un solo empleado, si te sirve me alegro en contribuir.

bubba 21-12-2009 18:04:24

Hola,

Gracias a todos, pero la única solución que tengo es la que escribí más arriba jugando con QRLabels y controlando desde código el salto de línea. Creo que QuickReport no tiene esta prestación, la de duplicar un report (con su cabecera, pie y sobre todo, detalle), en una misma hoja. Sería bueno sugerirlo a quSoft.

A Luis Vázquez y Jafera, esto de duplicar los controles de QuickReport no me sirve, ya lo he hecho en otros informes (tipo recibos, o como indicáis puede servir en una nómina, etc), son informes sin detalle, o sólo un registro de detalle por página, por lo que lo puedes solventar con una sola banda (Header o Detail), el problema era teniendo varias líneas de detalle una debajo de la otra en la misma hoja y si por ejemplo en la parte superior salen 12 líneas (con su cabecera previa y su pie al final), pues que en la parte inferior de la hoja salga lo mismo. Igualmente gracias por vuestro tiempo!

Saludos

mRoman 14-02-2014 18:26:16

Hola BUBBA...

Consultanto aqui y alla....di con tu hilo acerca de QuickReport....imprimir 2 recibos (original y copia) en una misma hoja.....tengo ese problema ahora.....
lo pudiste solucionar?....

Saludos.

mRoman 14-02-2014 18:27:08

Cita:

Empezado por bubba (Mensaje 349295)
Hola,

Gracias a todos, pero la única solución que tengo es la que escribí más arriba jugando con QRLabels y controlando desde código el salto de línea. Creo que QuickReport no tiene esta prestación, la de duplicar un report (con su cabecera, pie y sobre todo, detalle), en una misma hoja. Sería bueno sugerirlo a quSoft.

A Luis Vázquez y Jafera, esto de duplicar los controles de QuickReport no me sirve, ya lo he hecho en otros informes (tipo recibos, o como indicáis puede servir en una nómina, etc), son informes sin detalle, o sólo un registro de detalle por página, por lo que lo puedes solventar con una sola banda (Header o Detail), el problema era teniendo varias líneas de detalle una debajo de la otra en la misma hoja y si por ejemplo en la parte superior salen 12 líneas (con su cabecera previa y su pie al final), pues que en la parte inferior de la hoja salga lo mismo. Igualmente gracias por vuestro tiempo!

Saludos

Lo pudiste solucionar !!?


La franja horaria es GMT +2. Ahora son las 01:47:22.

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