Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Report builder - Ticket de altura dinamica (https://www.clubdelphi.com/foros/showthread.php?t=82229)

jpgonzalez 12-02-2013 01:12:50

Report builder - Ticket de altura dinamica
 
Buenas para todos...
Estoy haciendo un sistema de facturacion en el cual lanzo los tickets en un impresora termica usando Report Builder.
El problema que tengo es que no puedo hacer que la altura del ticket sea dinamica, es decir, que el alto del ticket dependa de la cantidad de renglones del "detail" del reporte.
Debido al tamaño del "detail", entran aproximadamente 8 renglones...
Esto hace que si el detalle solo tiene 1 renglon imprime --> Header, renglon, espacio en blanco y el footer.
Si el detalle tien 11 renglones, me imprime --> Header, 8 renglones de detalle, footer ... header, 3 renglones de detalle, espacion en blanco y footer.

Probe poniendo en el Detail la opcion PrintHeight = "phDynamic" y sigue haciendo lo mismo.
La verdad que no se me ocurre que hacer para que quede un solo ticket y que la altura varie segun las lineas del detail sin repetir el footer.
Espero haber sido claro en la duda, un abrazo!!!

Casimiro Notevi 12-02-2013 01:21:08

No hay que hacer nada de eso, lo primero de todo es asegurarte de que tienes seleccionada la impresora adecuada.

jpgonzalez 12-02-2013 01:41:57

ahhhh... ok
Yo tengo puesto PrinterName=Default, pense que con eso agarraba la impresora predeterminada de windows (que es la tickeadora termica).
Probare poniendo en el printername la impresora y ver si con eso anda... gracias!

jpgonzalez 12-02-2013 01:57:23

Cita:

Empezado por Casimiro Notevi (Mensaje 454873)
No hay que hacer nada de eso, lo primero de todo es asegurarte de que tienes seleccionada la impresora adecuada.

Debido a tu respuesta me surge la siguiente duda, este programa lo tienen 5 clientes...
Por ahora solo 2 de ellos tienen impresoras termicas y ambos usan samsung...
Que pasa si alguno de los otros 3 tienen una Epson TM T20 por ejemplo??... tendria que hacer un ejecutable para las samsung y otro para las Epson?
De ser asi, tendria que tener un exe para cada tipo de impresora?... (ademas de tener instalado los drivers en mi PC para seleccionarlas).
Te dejo esa duda... un arbazo!

Casimiro Notevi 12-02-2013 10:55:00

No entiendo lo del "un .exe distinto para cada cliente", lo normal es tener los informes por separado y no tocar el programa, así cada vez que modificas un informe sólamente tienes que enviar eso y, además, puedes personalizarlo para cada cliente.
No entiendo bien lo que comentas, te aconsejo que mires los ejemplos que trae reportbuilder, son muchísimos informes los que trae y te servirán de referencia.

jpgonzalez 13-02-2013 12:08:14

Cita:

Empezado por Casimiro Notevi (Mensaje 454890)
No entiendo lo del "un .exe distinto para cada cliente", lo normal es tener los informes por separado y no tocar el programa, así cada vez que modificas un informe sólamente tienes que enviar eso y, además, puedes personalizarlo para cada cliente.
No entiendo bien lo que comentas, te aconsejo que mires los ejemplos que trae reportbuilder, son muchísimos informes los que trae y te servirán de referencia.

Bien Casimiro, en primer lugar gracias por la respuesta.
A lo que me refiero con un exe para cada impresora, es compilar diferentes ejecutables.
Yo siempre (hace 5 años que programo en Delphi) use los reportes de Report Builder de manera interna, nunca los use por separado. Quiza en el lugar donde "aprendi" a programar en Delphi no lo usaban correctamente.
Se agregaba el componente de RB en el form que lo usaba, se creaba el reporte, se lo llamaba y listo... nunca guarde un reporte externamente al ejecutable.
Probaré haciendo los importes de manera externa, y buscare algunos ejemplos de RB para guiarme.
Hoy en mi trabajo tengo una Epson TM-T20 para probar como salen.
Nuevamente muchas gracias, espero que asi funcione.

Casimiro Notevi 13-02-2013 12:49:34

Entonces te aconsejo que lo hagas así, con los informes fuera, los puedes poner en un directorio, o incluso almacenarlos en una tabla de la base de datos, de esa forma siempre puedes cambiarlos sin tocar el .exe

jpgonzalez 13-02-2013 12:57:18

1 Archivos Adjunto(s)
Cita:

Empezado por Casimiro Notevi (Mensaje 454960)
Entonces te aconsejo que lo hagas así, con los informes fuera, los puedes poner en un directorio, o incluso almacenarlos en una tabla de la base de datos, de esa forma siempre puedes cambiarlos sin tocar el .exe

Bien Casimiro...
Ya he probado configurar la impresora y sigue tirando el ticket con altura fija.
Adjunto una captura de pantalla en la que muestro la configuracion del layaout a ver si esto sirve... Abrazo!

Casimiro Notevi 13-02-2013 13:15:21

Es muy complicado poder ayudarte de esta manera.
Debes tener en cuenta que el "Detail" es siempre de altura dinámica, sólo el "Header" y el "Footer" puedes elegir entre dinámico o estático.
¿Qué tipo de papel/página/tamaños/etc. tienes configurado?

jpgonzalez 13-02-2013 13:26:49

Los tamaños de papel y demas estan en la imagen que adjunte.
La impresora es la EPSON TM-T20, el papel esta en roll paper 80 x 297, el footer y header en Static, el detail en dynamic.
La verdad, que ya no se mas que hacer... me esta volviendo loco esto, jajaja.

Casimiro Notevi 13-02-2013 14:10:42

Demasiado pequeña la imagen para mi deficiente visión :(

Debes abrir el informe, y en el menú superior, la primera opción, elegir la opción de configurar página, seleccionas la impresora y eliges "papel continuo" o algo así, no recuerdo el nombre exacto, pero desde luego no tiene una longitud de 297 como indica en tu imagen.
O sea, tienes que seleccionar un tipo de papel de un tamaño enorme, lo verás en la lista, tras elegir la impresora.

jpgonzalez 13-02-2013 14:33:52

La opcion de papel mas grande que me da la impresora es esa: 80 x 297... salvo que a mano le ponga un alto exagerado.
Creo que lo unico que me queda es calcular la altura por codigo, dependiendo de la cantidad de lineas del detalle y ajustar la altura del reporte antes de imprimir.
Ya no queda mucho para inventar.
Abrazo!

Casimiro Notevi 13-02-2013 15:30:02

¿Pero has seleccionado la impresora esa de ticket en el informe?

jpgonzalez 13-02-2013 15:42:11

Cita:

Empezado por Casimiro Notevi (Mensaje 454968)
¿Pero has seleccionado la impresora esa de ticket en el informe?

Si Casimiro, seleccione esa impresora...
Evidentemente la impresora no da como opcion el papel continuo. O sea, da como opcion el roll paper pero de 80 x 297.
Quiza sea que esta impresora termica no tiene la opcion esa de configuracion, por lo cual lo hice de forma dinamica.

Código Delphi [-]
   if (CDSDetalleFactura.RecordCount > 3) then begin
      ppReportTicket.PrinterSetup.PaperHeight:= 60 + (CDSDetalleFactura.RecordCount * 6);
   end
   else begin
      ppReportTicket.PrinterSetup.PaperHeight:= 80;
   end;
   ppReportTicket.Print;

Lo que hago es, si el detalle tiene 3 articulos o menos, le dejo un tamaño fijo de 80mm de altura.
Sino le calculo la altura 60 mm (altura del header + footer) + CDSDetalleFactura.RecordCount * 6 mm (altura de la linea del detail)
Siendo el CDSDetalleFactura el detalle de articulos que se estan vendiendo.

Creo que ya no es problema del reportbuilder, sino de la configuracion de la impresora termica.
Abrazo, y espero que sirva para futuras dudas.

Casimiro Notevi 13-02-2013 15:53:31

2 Archivos Adjunto(s)
Nosotros hacemos informes de tickets para todo de impresoras y también, evidentemente, para las térmicas.
Ten en cuenta que no tiene sentido que hagas eso que estás haciendo, estamos hablando de un generador de informes muy potente, (y con todos funciona igual), no hay que hacer "inventos raros" para conseguir lo que quieres.
Fíjate, una imagen de un ticket que, entre otros formatos, incluye uno "custom" que tiene unas medidas de 76x2970
Te adjunto un ticket (sin módulo de datos, para que no te dé error) y tú le añades un módulo de datos, para que pruebes.

jpgonzalez 13-02-2013 17:24:58

Le puse custom, le puse una altura elevada, y no me funciono.
Quiza le este pifiando en algo, es muy probable... el invento lo hice porque necesito que funcione "ya"... despues con tiempo investigare un poco más acerca del problema.
Muchas gracias por la colaboracion... Abrazo!

Casimiro Notevi 13-02-2013 17:28:09

Prueba el informe que te he enviado y luego, si te funciona, lo ajustas a tus requerimientos.

jpgonzalez 13-02-2013 22:23:50

Buenisimo Casimiro, mañana lo pruebo nuevamente en el trabajo.
Ahora en casa, desde mi notebook he creado un nuevo reporte (muchas veces me ha pasado que al arrancar de cero se arregla todo, jajaja).
En mi notebook tengo instalada la impresora Samsung, en lugar de la EPSON.
La Samsung me da mucas mas opciones de papel, entre las cuales encuentro 80 x 3276 mm, y ademas me da en la opcion "Paper Source" la posibilidad de elegir Ticket.
Quiza con este nuevo reporte logre hacer la altura dinamica sin tener que hacer ningun invento... probare esto mañana y comentare los resultados.
Abrazo!

jpgonzalez 31-03-2013 05:26:09

Bien Casimiro, ha pasado ya un tiempo desde este hilo, pero creo que merecias una respuesta.

Me sirvio de mucho el tema de usar los reportes en un archivo, para permitir editarlos. De hecho, cree una opcion en el menu para modificar reportes, donde se pueden modificar todos los reportes que usa el sistema, para personalizarlos segun las conveniencias del cliente.
Esta opcion me parece genial y me has dado una mano gigante para no tener que compilar un ejecutable para cada cliente que tenga una opcion de impresion diferente a la de otro.

Desde ya muchisimas gracias, un abrazo!!!

Casimiro Notevi 31-03-2013 12:08:34

Me alegro :)
Gracias


La franja horaria es GMT +2. Ahora son las 09:17:38.

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