PDA

Ver la Versión Completa : Impresion de Ticket


betto
20-05-2008, 21:15:19
Hola a todos, necesito hacer una impresion de ticket en una impresora de matriz EPSON TM-T88III desde Delphi 2005 y no tengo la menor idea de como hacerlo,
¿Alguien podra orientarme exactamente como hacerlo?
tengo que saber la secuencia de escape?
hay algun reporteador que lo haga directamente?
podran recomendarme algunas funciones genericas o especificas p/ Impresoras?
No me importa el puerto aunque si es el LPT1 mucho mejor.


Les agradezco mucho a todos de antemano, saludos!!!

enecumene
20-05-2008, 21:44:18
Hola, un ejemplo buscando en los foros:

http://clubdelphi.com/foros/showpost.php?p=261033&postcount=13

Saludos.

bismarck_sierra
21-05-2008, 01:05:01
Que tal

Yo utilizo Report Manager para imprimir tickets en una TMU220, le mando códigos de escape para manipular tamaños de letra de la impresora y activar el cutter. Pero también puedes simplemente utilizar los tipos de letra que tengas instalados en tu SO. Es muy sencillo y fácil de modificar. Además que tiene soporte para la impresora que mencionas.

Saludos
Bismarck

luchifer
24-05-2008, 00:13:01
Usa el procedimiento siguiente:
procedure TFpto_pollo.imprime_fac(stdoc, stipo:shortstring;sndoc:integer);
Var MyPrinter: TextFile;
xcan, xdes, xval, xtot, xpag, xcam:shortstring;
xsum:real;
consulta:string;
begin
AssignFILE(MyPrinter,'USB');
ReWrite(MyPrinter);
Write(MyPrinter, CHR(27) + CHR(64)); // Inicializar Impresora
//Write(MyPrinter, CHR(27)+CHR(67)+CHR(44)); // Fijar Tamaño en Lineas
Write(MyPrinter,CHR(27)+ CHR(103)); // Tipo de Letra Chicas
//Write(MyPrinter,CHR(27)+CHR(197)); // Negrita
//Write(MyPrinter,CHR(27)+CHR(179)+CHR(28)); // Espacio entre Lines
if stipo='FAC' then Writeln(MyPrinter,'MICROMARKET VIA RAPIDA') else Writeln(MyPrinter,'POLLOS ROSS');
if stipo='FAC' then Writeln(MyPrinter,'AV.ROQUE AGUILERA ESQ.RADIAL CASTILLA') else Writeln(MyPrinter,'AV.SANTOS DUMONT CASI 4TO ANILLO');
if stipo='FAC' then Writeln(MyPrinter,'NIT 2642735017 TELF.3513621') else Writeln(MyPrinter,'NO ES FACTURA TELF.3533417');
if stipo='FAC' then Writeln(MyPrinter,'FACTURA : '+wnrofac.text+' ALFAB.'+walfab.text);
if stipo='FAC' then Writeln(MyPrinter,'NR.ORDEN:'+wnorden.text+' FECHA:'+datetostr(now));
if wnomfac.Text<>'' then
Writeln(MyPrinter,'Senores : '+wnomfac.text)
else
Writeln(MyPrinter,'Senores : Clientes Varios');
//----------------------------
consulta:='select * from lgloprod where tdoc='+car+stdoc+car+' and ndoc='+inttostr(sndoc);
DModulo.QConsulta.Close;
DModulo.QConsulta.sql.Clear;
DModulo.QConsulta.sql.add(consulta);
DModulo.QConsulta.Open;
if wnit.Text<>'' then
Writeln(MyPrinter,'NIT : '+wnit.text)
else
Writeln(MyPrinter,'PARA SERVIRSE EN :'+DModulo.QConsulta.fieldbyname('refer').asstring);
//------------------------------
Writeln(MyPrinter,'-------------------------------------');
Writeln(MyPrinter,' Cant. Producto Valor ');
Writeln(MyPrinter,'-------------------------------------');
xsum:=0;
consulta:='select * from lmovpro where tdoc='+car+stdoc+car+' and ndoc='+inttostr(sndoc);
DModulo.QConsulta.Close;
DModulo.QConsulta.sql.Clear;
DModulo.QConsulta.sql.add(consulta);
DModulo.QConsulta.Open;
DModulo.QConsulta.First;
while not DModulo.QConsulta.Eof do
begin
xcan:=format('%6.2f',[DModulo.QConsulta.fieldbyname('cant').asfloat]);
xdes:=copy(DModulo.QConsulta.fieldbyname('descri').AsString,1,20);
xval:=format('%8.2f',[DModulo.QConsulta.fieldbyname('valor_bs').asfloat]);
xsum:=xsum+DModulo.QConsulta.fieldbyname('valor_bs').asfloat;
Writeln(MyPrinter,xcan+' '+xdes+' '+xval);
DModulo.QConsulta.Next;
end;
Writeln(MyPrinter,'-------------------------------------');
xtot:=format('%8.2f',[xsum]);
xpag:=format('%8.2f',[strtofloat(wpagbs.text)]);
xcam:=format('%8.2f',[strtofloat(wcamb.text)]);
Writeln(MyPrinter,' Total Facturado : '+xtot);
Writeln(MyPrinter,' Total Pagado : '+xpag);
Writeln(MyPrinter,' Cambio : '+xcam);
Writeln(MyPrinter,'-------------------------------------');
if stipo='FAC' then Writeln(MyPrinter,'MICROMARKET VIA RAPIDA LE AGRADECE') else Writeln(MyPrinter,'POLLOS ROSS LE AGRADECE');
Writeln(MyPrinter,'POR SU PREFERENCIA '+stdoc+'-'+inttostr(sndoc));
Writeln(MyPrinter,'');
Writeln(MyPrinter,'');
Writeln(MyPrinter,'');
Writeln(MyPrinter,'');
Writeln(MyPrinter,'');
Writeln(MyPrinter,'');
Writeln(MyPrinter,'');
Writeln(MyPrinter,'');
Writeln(MyPrinter,'');
//Write(MyPrinter,#12); // Expulsar la Hoja
System.CloseFile(MyPrinter);
end;

Me funciona de pelicula y es super sencillo y no te complicas como con las otras soluciones que te plantean

betto
26-05-2008, 21:32:26
Muchas Gracias A Todos!!!!

Ya Quedo... :)

ingel
03-09-2008, 23:15:55
Me funciono de maravillas .. solo no me anduvo el salto de hoja
para cortar el papel .. yo uso una Epson TM 300A
(es la primera vez con este tipo de impresoras.. )
Deberia saltar la hoja de la misma forma que una 810 por ejemplo y despues retrodecerlo?...
Como usa rollo de papel no se si eso sera factible... sino la otra opcion es imprimir blancos hasta la posicion de corte ..lo que pasa que el siguiente ticket queda con un pedazo de ticket en blanco en la parte superior ( no es que seamos muy tacaños por aca ...pero sumado al despedicio de papel ademas queda un poco feito..)
gracias a todos
Saludos

seoane
03-09-2008, 23:21:57
Si lo que te preocupa ingel es el desperdicio de papel puedes aprovechar el hecho de que el comienzo de todos los tickets es igual (logo, nombre de la empresa, dirección, teléfono, etc ...) para imprimir al final de un ticket el comienzo del siguiente. Si lo ajustas bien te podrás ahorrar esas lineas en blanco al final de cada ticket.

ingel
04-09-2008, 14:03:38
Lo del desperdicio no era fundamental... lo mas fastidioso era correr y cortar el papel... pero lo pude solucionar a medias con :

Writeln(MyPrinter,'');
Writeln(MyPrinter,'');
Writeln(MyPrinter,'');
Writeln(MyPrinter,'');
Writeln(MyPrinter,'');
Writeln(MyPrinter,'');
Writeln(MyPrinter,'');
Write(MyPrinter,#27#105); //Esto 'CORTA el TICKET'

De todas formas obviamente el ticket siguiente tiene una franja de papel
ANTES de comenzar que son todos los Writeln(MyPrinter,'')
pero bueno.. puedo vivir con ello... :)
GRACIAS ..SDs!

brandolin
17-12-2008, 17:32:45
alquien tiene los codigos de ESC/POS de la impresora de referencia, ya que el #27#105 funciona de maravillas, me gustaria usar otros codigos mas pero no tengo manuales para buscarlos. Desde ya muchas gracias