PDA

Ver la Versión Completa : Problema Imprimir Ticket con QuickReport


enecumene
25-01-2008, 21:09:07
Ya he buscado por mas de 1,000 hilos en toda la mañana sobre la continuidad de los Tickets de impresion con QuickReport, sucede lo siguiente tengo reporte en quickReport para imprimir los tickets de factura, tiene un tamaño de 75mm x 150mm, pero yo quiero que el reporte sea continua y que no lo tome como una sola hoja, si imprimo un ticket con muchos articulos me imprime en varias hojas, o sea, deja un espacio en blanco y vuelve empieza de nuevo, hay alguna forma de configurarlo para que sea continua?. Espero que me hayan podido entender.

Saludos.

enecumene
25-01-2008, 21:11:31
Se me Olvidó decir que tengo una impresora Epson TM-U220D. :D

Saludos.

Caral
25-01-2008, 21:13:41
Hola
No se exactamente a que te refieres con continuo?
Yo tengo un reporte en el cual imprimo en mi caso recibos con una impresora de tickest, osea de esas pequeñas y no tengo problemas.
Fijate en la configuracion del la impresora, hay una parte en donde sale el tamaño de la hoja, incluso puedes crear uno propio a la medida.
Saludos

egostar
25-01-2008, 21:13:56
Yo te recomiendo que para estos menesteres uses el canvas de impresión, QReport automáticamente te envía el salto de página y no tienes control de la impresión.

Bueno, solo es una sugerencia.

Salud OS

eduarcol
25-01-2008, 21:16:12
porq no imprimes al canvas?? en caso de que esta solucion no te guste puedes hacer un trampa, prueba esta configuracion

Bandas,

Title
Detail
Summary

lleva los margenes a Cero (0), con esto no te va a dar continuidad pero da la impresion que si lo hiciera. No lo he probado pero en teoria debe funcionar.

enecumene
25-01-2008, 21:23:58
Yo te recomiendo que para estos menesteres uses el canvas de impresión, QReport automáticamente te envía el salto de página y no tienes control de la impresión.

Bueno, solo es una sugerencia.

Salud OS

Gracias Egostar, si supieras nunca en mi vida he trabajado con canvas y eso que es la primera vez que hago impresiones de este tipo (la de Tickets). Existe algun tutotial o ejemplo?. te lo agradeceria.


porq no imprimes al canvas?? en caso de que esta solucion no te guste puedes hacer un trampa, prueba esta configuracion

Bandas,

Title
Detail
Summary

lleva los margenes a Cero (0), con esto no te va a dar continuidad pero da la impresion que si lo hiciera. No lo he probado pero en teoria debe funcionar.

Gracias eduarcol, hare la prueba a ver.

Saludos.

Caral
25-01-2008, 21:33:30
Hola
En mi caso lo tengo todo en el detailBand, con esto se puede controlar el tamaño o que sea continuo si se quiere ya que el detail cambiara segun la informacion, como en un reporte cualquiera.
Al usar un title o un sumari cortara la impresion, a mi parecer es mas complicado, salvo que uses el cambas, como te indicaron, pero te toparas con el problema de como lo cuadras al tamaño, creo.
Egostar es el experto en esto, el te pude guiar mejor.
Saludos

enecumene
25-01-2008, 21:43:21
Amigo Eduarcol probe tu propuesta pero no me funciono:

---------------------------
Debugger Exception Notification
---------------------------
Project SalonPlus.exe raised exception class EAccessViolation with message 'Access violation at address 004BF867 in module 'SalonPlus.exe'. Read of address 00000000'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

eduarcol
25-01-2008, 21:45:12
pero ese error no tiene nada que ver con lo que te propongo :confused:

de todas formas el salto de pagina con esa configuracion siempre lo vas a tener, la unica forma es imprimiendo directo al canvas

enecumene
25-01-2008, 21:49:07
Pues vere en la red algun tutorial sobre la impresion con canvas, ya que nunca lo he usado pero siempre hay una primera vez no?.

Saludos.

eduarcol
25-01-2008, 21:53:17
ya buscastes en el foro??

ya he visto unos cuantos ejemplos por alli

enecumene
25-01-2008, 22:15:55
ya buscastes en el foro??

ya he visto unos cuantos ejemplos por alli

Amigo Eduardo donde estas esos ejemplos que dices? no encuentro uno bueno y completo y ni siquiera en la red, o es que estoy buscando mal?

Saludos.

egostar
25-01-2008, 22:18:30
Gracias Egostar, si supieras nunca en mi vida he trabajado con canvas y eso que es la primera vez que hago impresiones de este tipo (la de Tickets). Existe algun tutotial o ejemplo?. te lo agradeceria.


Bueno, aqui te pongo un pequeño código, pruebalo y adaptalo a tus necesidades


Uses Printers;

procedure Form1.Imprime;
var
I,X,Y,Lineas : Integer;
begin
with Printer do begin
Canvas.Font.Size := 10;
Canvas.Font.Name := 'Courier New';
Orientation := poLandscape;
Y := 10; //Se asigna en que posición se va a comenzar a imprimir
X := 100; //Asignamos (en este caso) en que columna se va a imprimir
Lineas := 100; //Asignamos cuantas lineas vamos a imprimir;
BeginDoc;
for I := 1 to lineas do begin
Canvas.TextOut(X,Y,'LINEA A IMPRIMIR');
Y := Y + TextHeight('Yy'); //Esto funciona como un ENTER
end;
EndDoc;
end;
end;


Salud OS

eduarcol
25-01-2008, 22:21:58
aqui hay un hilo donde hablan tambien del canvas y del tamaño

http://www.clubdelphi.com/foros/showthread.php?t=52433&highlight=imprimir%2C+canvas

enecumene
25-01-2008, 22:24:04
Muchas Gracias Amigo Egostar!, de verdad no se como agradecertelo.

aqui hay un hilo donde hablan tambien del canvas y del tamaño

http://www.clubdelphi.com/foros/showthread.php?t=52433&highlight=imprimir%2C+canvas

ahora mismo lo estoy revisando amigo eduarcol, muchas gracias.

Saludos.

enecumene
13-02-2008, 20:26:26
Amigo Egostar, empecé a probar el código que me facilitaste para imprimir con canvas, excelente, me funciona perfecto, pero tengo un par de dudas:

procedure Imprimir;
var
I,X,Y,Lineas : Integer;
begin
with Printer do begin
Canvas.Font.Size := 10;
Canvas.Font.Name := 'Courier New';
Orientation := poLandscape;
Y := 100; //Se asigna en que posición se va a comenzar a imprimir
X := 100; //Asignamos (en este caso) en que columna se va a imprimir
Lineas := 100; //Asignamos cuantas lineas vamos a imprimir;
BeginDoc;
for I := 1 to lineas do begin
Canvas.TextOut(X,Y,'LINEA A IMPRIMIR');
Y := Y + Canvas.TextHeight('Yy'); //Esto funciona como un ENTER
end;
EndDoc;
end;
end;

Me imprime desde el inicio hasta al final de la hoja o sea me repite la linea desde la primera linea de la hoja hasta la ultima, me imagino que esa es la función de este pedazo de código:

for I := 1 to lineas do begin
Canvas.TextOut(X,Y,'LINEA A IMPRIMIR');
Y := Y + Canvas.TextHeight('Yy');

y si son nada mas dos lineas?, como saco los valores desde un DBGrid? de la forma normal:

for I := 1 to lineas do begin
Canvas.TextOut(X,Y,'+ADOTable.Field[0].asstring+');
Y := Y + Canvas.TextHeight('Yy');

o desde el mismo DBGrid (eso no lo sabría hacer).

Saludos.

AzidRain
13-02-2008, 22:56:48
A reserva de que me mandes por un tubo (o a freir espárragos en España) yo creo que los que te han sugerido usar directamente el canvas tienen toda la razón. QReport no se hizo para este tipo de tareas y por lógica no es lo que hace mejor. Estoy de acuerdo que es la forma más cómoda de hacerlo pero como ya te diste cuenta no es la que te da mejor resultado. Por experiencia propia puedo decirte que vale mas invertirle algunas horas trabajando en algo cuyo resultado no puedes ver de inmediato (como en QReport) pero que al final obtienes un resultado muy bueno. Si te pones a machetearle veras que inclusive puedes crear tu propia clase que se encargue de imprimir directamente el ticket y al final te será mucho más fácil.

luchifer
27-05-2008, 17:29:56
Pero de entrada esta super sencillo