javier7ar
26-04-2012, 19:11:41
Para imprimir directamente yo abro la impresora como un archivo y voy imprimiendo con WriteLN. Es un poco tedioso si lo comparas con hacerlo con un reporte que es mas sencillo, pero la velocidad de impresion entre el reporte y la impresion directa es muy notable. El tema esta en que el reporte manda a imprimir en modo imagen, y la impresion directa en modo caracter. Por ende, con la impresion directa solo puedes imprimir caracteres, y con el reporte podrias imprimir logos, dibujos, etc. Igualmente hay un par de caracteres de comando que se le mandan a la impresora para configurar algunas cosas como letra negrita, letra doble ancho o doble alto, corte de papel (si tiene) etc.
Te pongo el codigo de una impresion de un hola mundo!:
(la impresora debe estar agregada como impresora de windows, con el driver que traiga o con algun driver generico (Generic Text Only o tambien anda la Epson T1000)
var
F: TextFile;
begin
IOResult;// Limpia el buffer de erroes anteriores
AssignFile(F,'LPT1'); //Puerto de la Impresora: COM1, COM2, LPT1, LPT2, etc.
Rewrite(F);
Writeln(F,'Hola mundo');
Write(F,#27#33#8); //Letra negrita
Writeln(F,'texto negrita');
Write(F,#27#105); //Corte de papel (no todos los modelos lo tienen)
CloseFile(F);
end;
Espero te sirva
Saludos
P/D: No creo que sea una impresora fiscal, las fiscales vienen seriales. Si llega a ser una impresora fiscal, no te va a dejar imprimir como imprimis en cualquier impresora, porque tiene unos comandos especiales. Las fiscales no son impresoras comunes, no se les puede decir "imprimi este texto", tenes que decirle "imprimi esta factura, con este cliente, y este importe, etc."
gmendoza5426
30-04-2012, 16:02:27
Hola Javier
Muy interesante tu codigo, de manera similar yo utilizo los comandos de la TM U950, justamente este tipo de impresion es lo que buscaba, a lo mejor soluciono de esta forma el problema que tengo hoy dia porque logre hacer imprimir el ticket directamente al puerto paralelo mediante el hilo que me dejo ecfisa, pero el problema es que no se como hacer que aumente el tamaño de mi impresion, es decir solo cierto numero de linea me permite imprimir en mi ticket, cuando mi ticket tiene demasiados detalles ya me imprimi solo hasta la linea 70 siempre, seguro abra alguna forma de decirle la cantidad de linea que quiero imprimir en mi documento, les dejo mi codigo a ver si me pueden decir con que comando lo puedo aumentar mi tamaño de impresion. De todas formas voy a mirar tu codigo, el tema es que recien despues de programar completamente la impresion de mi ticket me di cuanta de que solo 70 lineas me permite, es justo el largor de una hoja oficio. Coloco debajo de todo el codigo que utilizo hoy para imprimir, que como te comento mas arriba salio del hilo que me dejo ecfisa, si por ahi me pueden dar una manito de como hacer que me imprima mas de 70 lineas seria genial, porque lleva bastante tiempo armar todo de nuevo.
Desde ya muchas gracias por la ayuda.
Saludos
_____________________________________________________
unit impresiontmu220;
interface
Uses Printers;
procedure imprimirTicket220;
begin
//Inicio de Cabecera
generarcabecera220;
generardatosticket220;
nitem := DMVentas.SQLCantItemcant.AsInteger;
with TPrinter.Create do
try
x := Printer.PageWidth div 250;
y := Printer.PageHeight div 80;
nLin:= 1;
BeginDoc;
Canvas.Font.Name:= 'Courier New';//'Times new Roman';
Canvas.Font.Size := 6;
//Canvas.Font.Color:= clBlack;
Canvas.Font.Height:= Printer.PageHeight div 80;
PrintLine(Canvas,90, nLin, DMPrincipal.CDSEmpresanom_empresa.AsString);
nLin:= LinesDown(Canvas, 2);
PrintLine(Canvas,15, nLin, DMPrincipal.CDSEmpresanom_comercial.AsString );
//nLin := nLin + 1;
nLin:= LinesDown(Canvas, 3); // saltamos 1 linea
PrintLine(Canvas,90, nLin, DMPrincipal.CDSSucursaltipo_sucursal.AsString );
nLin:= LinesDown(Canvas, 4);
PrintLine(Canvas,90, nLin, DMPrincipal.CDSSucursalnom_sucursal.AsString );
nLin:= LinesDown(Canvas, 5);
PrintLine(Canvas,90, nLin, 'RUC: '+ DMPrincipal.CDSEmpresaruc_empresa.AsString );
nLin:= LinesDown(Canvas, 6); // saltamos 1 linea
PrintLine(Canvas, 50, nLin, DMPrincipal.CDSSucursaldir_sucursal.AsString);
nLin:= LinesDown(Canvas, 7); // saltamos 1 linea
PrintLine(Canvas, 90, nLin, DMPrincipal.CDSSucursalciudad.AsString);
//Fin de Cabecera
nLin:= LinesDown(Canvas, 9); // saltamos 2 linea
PrintLine(Canvas, 80, nLin, '***IVA INCLUIDO***');
nLin:= LinesDown(Canvas, 10); // saltamos 1 linea
PrintLine(Canvas, 80, nLin, 'TIMBRADO Nº: '+DMPrincipal.CDSEmpresanro_timbrado.AsString);
nLin:= LinesDown(Canvas, 11); // saltamos 1 linea
PrintLine(Canvas, 70, nLin, 'Válido hasta '+DMPrincipal.CDSEmpresafecha_venc_timbrado.AsString);
nLin:= LinesDown(Canvas, 12); // saltamos 1 linea
PrintLine(Canvas, x, nLin, 'FACTURA CONTADO '+DMPrincipal.CDSSucursalcod_sucursal.AsString+'-'+DMVentas.CDSCajanro_caja_fiscal.AsString+'-'+
Padear(DMVentas.CDSMovCajanro_ticket_fiscal.AsString,'0',7));
nLin:= LinesDown(Canvas, 13); // saltamos 1 linea
PrintLine(Canvas, x, nLin, linea);
nLin:= LinesDown(Canvas, 14); // saltamos 1 linea
PrintLine(Canvas, x, nLin, 'FECHA:'+ DateToStr(DMVentas.CDSMovCajafecha.AsDateTime)+ ' HORA:'+DMVentas.CDSMovCajahora.AsString);
nLin:= LinesDown(Canvas, 15); // saltamos 1 linea
PrintLine(Canvas, x, nLin, 'CAJERO: '+ sNombreCajero);
nLin:= LinesDown(Canvas, 16); // saltamos 1 linea
PrintLine(Canvas, x, nLin, 'Caja/Ticket: '+ DMVentas.CDSMovCajanro_caja.AsString +' / '+DMVentas.CDSMovCajanro_transaccion.AsString);
nLin:= LinesDown(Canvas, 17); // saltamos 1 linea
PrintLine(Canvas, x, nLin, linea);
nLin:= LinesDown(Canvas, 18); // saltamos 1 linea
PrintLine(Canvas, x, nLin, 'CLIENTE: ' + DMVentas.SQLClientenom_cliente.AsString);
nLin:= LinesDown(Canvas, 19); // saltamos 1 linea
if DMVentas.SQLClientesdig_verificador.IsNull then
PrintLine(Canvas, x, nLin, 'RUC/CI: ' + DMVentas.SQLClientenro_documento.AsString)
else
PrintLine(Canvas, x, nLin, 'RUC/CI: ' + DMVentas.SQLClientenro_documento.AsString+'-'+DMVentas.SQLClientesdig_verificador.AsString);
nLin:= LinesDown(Canvas, 12); // saltamos 1 linea
PrintLine(Canvas, x, nLin, linea);
nLin:= LinesDown(Canvas, 21); // saltamos 1 linea
PrintLine(Canvas, x, nLin, 'Articulo Descrip. IVA');
nLin:= LinesDown(Canvas, 22); // saltamos 1 linea
PrintLine(Canvas, 50, nLin, ' Cant Precio Importe');
nLin:= LinesDown(Canvas, 23); // saltamos 1 linea
PrintLine(Canvas, x, nLin, linea);
DMVentas.CDSDetMovCaja.First;
while not DMVentas.CDSDetMovCaja.Eof do
begin
PrintLine(Canvas,x, nLin, DMVentas.CDSDetMovCajaarticulo.AsString + ' '+DMVentas.CDSDetMovCajadescripcion_ticket.AsString +
Padear(DMVentas.CDSDetMovCajaiva.AsString,' ',3)+'%');
if DMVentas.CDSDetMovCajaprecio_unitario.AsCurrency > 999 then
precio := FormatFloat('0,000',DMVentas.CDSDetMovCajaprecio_unitario.AsCurrency)
else
precio := CurrToStr(DMVentas.CDSDetMovCajaprecio_unitario.AsCurrency);
if DMVentas.CDSDetMovCajaprecio_total.AsCurrency > 999 then
importe := FormatFloat('0,000',DMVentas.CDSDetMovCajaprecio_total.AsCurrency)
else
importe := CurrToStr(DMVentas.CDSDetMovCajaprecio_total.AsCurrency);
PrintLine(Canvas,30, nLin, Padear(DMVentas.CDSDetMovCajacantidad.AsString,' ',6)+' x'+ Padear(precio,' ',10)+Padear(importe,' ',13));
DMVentas.CDSDetMovCaja.Next;
end;
nLin:= LinesDown(Canvas, (nitem * 2)+24); // saltamos 1 linea despues del ultimo detalle
PrintLine(Canvas, x, nLin, linea);
nLin:= LinesDown(Canvas, (nitem * 2)+25); // saltamos 1 linea
PrintLine(Canvas, x, nLin, 'Cant. de Item:'+IntToStr(nitem));
if DMVentas.CDSMovCajatotal_venta.AsCurrency > 999 then
aux := FormatFloat('0,000',DMVentas.CDSMovCajatotal_venta.AsCurrency)
else
aux := CurrToStr(DMVentas.CDSMovCajatotal_venta.AsCurrency);
nLin:= LinesDown(Canvas, (nitem * 2)+26); // saltamos 1 linea
PrintLine(Canvas, x, nLin, PadearDerecho('NETO A PAGAR',' ',20)+':'+ Padear(aux,' ',12));
nLin:= LinesDown(Canvas, (nitem * 2)+27); // saltamos 1 linea
PrintLine(Canvas, x, nLin, 'PAGOS');
//Imprimimos los pagos
DMVentas.CDSDetPago.First;
while not DMVentas.CDSDetPago.Eof do
begin
//npagos := npagos + 1;
DMVentas.SQLNomPago.Params.ParamByName('cod_tp_medio_pago').AsInteger := DMVentas.CDSDetPagocod_tp_medio_pago.Value;
UCerrarAbrirPG(DMVentas.SQLNomPago,nil);
if DMVentas.CDSDetPagomonto_moneda.AsCurrency > 999 then
aux := FormatFloat('0,000',DMVentas.CDSDetPagomonto_moneda.AsCurrency)
else
aux := CurrToStr(DMVentas.CDSDetPagomonto_moneda.AsCurrency);
PrintLine(Canvas, x, nLin, PadearDerecho(DMVentas.SQLNomPagodes_tp_medio_pago.AsString,' ',20)+':'+ Padear(aux,' ',12));
DMVentas.CDSDetPago.Next;
end;
if DMVentas.CDSPagototal_pago.AsCurrency > 999 then
aux := FormatFloat('0,000',DMVentas.CDSPagototal_pago.AsCurrency)
else
aux := CurrToStr(DMVentas.CDSPagototal_pago.AsCurrency);
nLin:= LinesDown(Canvas, (nitem * 2)+npagos+28);
PrintLine(Canvas, x, nLin, PadearDerecho('NETO PAGADO',' ',20)+':'+ Padear(aux,' ',12));
if DMVentas.CDSPagovuelto.AsCurrency > 999 then
aux := FormatFloat('0,000',DMVentas.CDSPagovuelto.AsCurrency)
else
aux := CurrToStr(DMVentas.CDSPagovuelto.AsCurrency);
nLin:= LinesDown(Canvas, (nitem * 2)+npagos+29);
PrintLine(Canvas, x, nLin, PadearDerecho('VUELTO',' ',20)+':'+ Padear(aux,' ',12));
nLin:= LinesDown(Canvas, (nitem * 2)+npagos+30);
PrintLine(Canvas, x, nLin, linea);
nLin:= LinesDown(Canvas, (nitem * 2)+npagos+31);
PrintLine(Canvas, x, nLin, 'DETALLE POR CONCEPTOS');
if DMVentas.CDSMovCajatotal_ex.AsCurrency > 999 then
aux := FormatFloat('0,000',DMVentas.CDSMovCajatotal_ex.AsCurrency)
else
aux := CurrToStr(DMVentas.CDSMovCajatotal_ex.AsCurrency);
nLin:= LinesDown(Canvas, (nitem * 2)+npagos+32);
PrintLine(Canvas, x, nLin, PadearDerecho('Total exentas',' ',20)+':'+ Padear(aux,' ',12));
if DMVentas.CDSMovCajatotal_gr_5.AsCurrency > 999 then
aux := FormatFloat('0,000',DMVentas.CDSMovCajatotal_gr_5.AsCurrency)
else
aux := CurrToStr(DMVentas.CDSMovCajatotal_gr_5.AsCurrency);
nLin:= LinesDown(Canvas, (nitem * 2)+npagos+33);
PrintLine(Canvas, x, nLin, PadearDerecho('Total Grabadas 5%',' ',20)+':'+ Padear(aux,' ',12));
if DMVentas.CDSMovCajatotal_gr_10.AsCurrency > 999 then
aux := FormatFloat('0,000',DMVentas.CDSMovCajatotal_gr_10.AsCurrency)
else
aux := CurrToStr(DMVentas.CDSMovCajatotal_gr_10.AsCurrency);
nLin:= LinesDown(Canvas, (nitem * 2)+npagos+34);
PrintLine(Canvas, x, nLin, PadearDerecho('Total Grabadas 10%',' ',20)+':'+ Padear(aux,' ',12));
nLin:= LinesDown(Canvas, (nitem * 2)+npagos+35);
PrintLine(Canvas, x, nLin, linea);
nLin:= LinesDown(Canvas, (nitem * 2)+npagos+36);
PrintLine(Canvas, x, nLin, 'LIQUIDACION IVA');
if DMVentas.CDSMovCajatot_iva_5.AsCurrency > 999 then
aux := FormatFloat('0,000',DMVentas.CDSMovCajatot_iva_5.AsCurrency)
else
aux := CurrToStr(DMVentas.CDSMovCajatot_iva_5.AsCurrency);
nLin:= LinesDown(Canvas, (nitem * 2)+npagos+37);
PrintLine(Canvas, x, nLin, PadearDerecho('Total IVA 5%',' ',20)+':'+ Padear(aux,' ',12));
if DMVentas.CDSMovCajatot_iva_10.AsCurrency > 999 then
aux := FormatFloat('0,000',DMVentas.CDSMovCajatot_iva_10.AsCurrency)
else
aux := CurrToStr(DMVentas.CDSMovCajatot_iva_10.AsCurrency);
nLin:= LinesDown(Canvas, (nitem * 2)+npagos+38);
PrintLine(Canvas, x, nLin, PadearDerecho('Total IVA 10%',' ',20)+':'+ Padear(aux,' ',12));
//Total IVA
if DMVentas.CDSMovCajatotal_iva.AsCurrency > 999 then
aux := FormatFloat('0,000',DMVentas.CDSMovCajatotal_iva.AsCurrency)
else
aux := CurrToStr(DMVentas.CDSMovCajatotal_iva.AsCurrency);
nLin:= LinesDown(Canvas, (nitem * 2)+npagos+39);
PrintLine(Canvas, x, nLin, PadearDerecho('Total IVA',' ',20)+':'+ Padear(aux,' ',12));
nLin:= LinesDown(Canvas, (nitem * 2)+npagos+40);
PrintLine(Canvas, x, nLin, linea);
nLin:= LinesDown(Canvas, (nitem * 2)+npagos+41);
PrintLine(Canvas, x, nLin, DMPrincipal.CDSImpLeyendasleyenda_pie_1.AsString);
nLin:= LinesDown(Canvas, (nitem * 2)+npagos+42);
PrintLine(Canvas, x, nLin, ' . ');
EndDoc;
finally
Free;
end;
end;
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.