Impresoras de Tickets (POS)

Impresoras de Tickets (POS)

Postby Cgallegoa » Fri Sep 28, 2012 10:37 pm

Hola amigos,

Tengo un enredo mental con las impresoras de Tickets: :?

1.- La gran mayoría de estas impresoras (últimamente todas), vienen para USB. Se supone que con la clase TPRINTER se tiene comunicación total con los drivers. Sin embargo, en todas toca ignorar los drivers originales y montarlas como GENERICAS-SOLO TEXTO. Porqué ? No debería ser así, o sí ? Si se utilizan los drivers se desconfigura la impresión y en saltos de línea, entre una y otra, manda entre 4 y 5 centímetros en blanco.

2.- Los últimos modelos (Epson, Bixolon(Samgung) y otras marcas) ya no permiten señal cuando están configuradas como Genéricas. Si se forza el montaje como Genérica, manda saltos de línea entre 20 y 30 centímetros, y descuadra todo.

3.- Porqué razón se debería usar TDOSPRINT, si se supone que estamos en Windows 32 o 64 bits, a más de que entiendo que esta clase tiene limitaciones. Si esto es así, significaría que la clase TPrinter no funciona correctamente, o qué es ?

4.- Qué hace diferente una impresora POS de una normal, si estas últimas funcionan de maravilla con la clase TPRINTER. Hablamos con los concesionarios de Epson y Bixolon y nos aseguraron que el principìo es el mismo. Tal cual funcionan las impresoras laser o inkjet, lo hacen las de pos, la diferencia es el tamaño del papel y que abre un cajón monedero y corta papel, pero el principio de comunicación entre el periférico, su driver y windows, es exactamente igual. Que no deberían configurarse como Genéricas, que eso es una solución chapucera e innecesaria. Si la respuesta es correcta, porqué no funcionan bien con la clase TPrinter, por ejemplo no reconocen la intrucción PrinterEsc(oPrn:hDC,Chr(nn)). Simplemente la ignora. Cuando se pone como Genérica, la reconoce sin problema. Porqué ?

5.- En los últimos 7 días hemos intentado configurar una BIXOLON SRP-280 y una EPSON TM-T20 y ha sido imposible. Son los mismo programas, con los mismos procesos de impresión, que utilizan nuestros clientes, sólo que le instalábamos las impresoras como Genéricas, lo cual parece que con los modelos de última generación no se puede. Nos hemos gastado cualquier cantidad de rollos de papel y no logramos nada. En fín, el tema se nos ha vuelto un dolor de cabeza.

Como pueden notar ya se me fundieron los cables y luego de 10 años y más de 3000 clientes (un altísimo porcentaje usan impresoras pos, las que instalábamos como texto, aunque nunca entendimos porqué, y funcionan perfecto), me siento como si comenzara con fivewin por estas benditas impresoras.

Amigos, algún consejo o truco especial que me puedan dar ? Cómo lo hacen en sus programas ?

Un millón de gracias anticipadas por su ayuda.
Saludos,

Carlos Gallego

*** FWH-23.10, xHarbour 1.2.3 Build 20190603, Borland C++7.30, PellesC ***
Cgallegoa
 
Posts: 420
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador

Re: Impresoras de Tickets (POS)

Postby joseluisysturiz » Sat Sep 29, 2012 1:43 am

Saludos Gallego, he manejado sin problema las printer de tickets colocandolas como genericas y de tipo texto, con algunas con su driver original han funcionado, para imprimir en ellas sin problemas he usado FAST REPORT, cualquier ayuda estamos a la orden...saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Impresoras de Tickets (POS)

Postby benjiben143 » Sat Sep 29, 2012 3:08 pm

hola buenos dias

yo tengo en uso algunas impresora de tickets epson tm 220
imprimo en ellas tickets de bascula
uso el codigo normal de printer

Code: Select all  Expand view

    print oprint title "Impresion de Ticket "  to "MINI EPSON" // from user  preview
    if Empty( oPrInT:hDC )
         return nil
      endif
   
     //  DEFINE FONT aFon1 NAME "COURIER NEW" SIZE 0,12 BOLD OF OPRINT
       DEFINE FONT aFon2 NAME "COURIER NEW" SIZE 0,14 BOLD OF oPRINT
     
       
       
       page
           PAG:=1
           Oprint:Cmsay(1.0,.2,"FERROPUERTO DE SONORA,  ",AFON2)
           Oprint:Cmsay(1.5,.2,"      SA DE C.V.",AFON2)
           Oprint:Cmsay(3.0,.2,"Boleto No. ",AFON2)
           Oprint:Cmsay(4.0,.2,"Camion  "+zcamion+" Grano "+Ctipo,AFON2)
           oprint:Cmsay(5.0,.2,"Peso Entrada  "+str(zpesoe,7),AFON2)
           Oprint:Cmsay(6.0,.2,zhorae+"  "+dtoc(zfechae),AFON2)
           if zpesoe>zpesos
              cbruto:=zpesoe
              ctara :=zpesos
              cneto :=zpesoe-zpesos
           else
              cbruto:=zpesos
              ctara :=zpesoe
              cneto :=zpesos-zpesos
           Endif
           cneto:=cbruto-ctara
           
          If !zlAppend   // si no es verdadero quiere decir que es salida e imprmir la salida we
             Oprint:Cmsay(7.0,.2,"Peso Salida   "+Str(zpesos,7),AFON2)
           
             Oprint:Cmsay(8.0,.2,"    Bruto   "+Str(cbruto,7),AFON2)
             Oprint:Cmsay(9.0,.2,"    Tara    "+Str(ctara,7),AFON2)          
             Oprint:Cmsay(10.0,.2,"    Neto    "+Str(cneto,7),AFON2)            
             Oprint:Cmsay(11.0,.2,zhoras+"  "+dtoc(zfechas),AFON2)
             
          Endif
          Oprint:Cmsay(12.0,.2,"Chofer  "+zchofer,AFON2)
          Oprint:Cmsay(12.6,.2,"  H._______",AFON2)
          Oprint:Cmsay(13.2,.2,"  I._______",AFON2)
          Oprint:Cmsay(13.8,.2,"Pxh._______",AFON2)
          Oprint:Cmsay(14.4,.2," GQ._______",Afon2)
          Oprint:Cmsay(15.0,.2," GD._______",Afon2)
          Oprint:Cmsay(15.6,.2,"Primario   _______",Afon2)
          Oprint:Cmsay(16.2,.2,"Secundario _______",Afon2)
           
         
                 
           
       EndPage
endprint
? "termina impresion we  para mañana lo continuamos"
return nil

 


agarra cualquier tipo de letra / tamaño declarando normalmente
tengo una que tiene cortadora ,,, al momento de ponerle endpage hace el corte uutomaticamente


saludos
Benjamin Casarrubias Moreno
Cd. Obregon, Sonora, Mexico
chino72vale@hotmail.com
Fivewin 16.05, Harbour 3.2, xharbour 1.2.1, Fivelinux, visual estudio 2013
benjiben143
 
Posts: 114
Joined: Wed Mar 11, 2009 7:32 pm
Location: Obregon, Sonora, Mexico

Re: Impresoras de Tickets (POS)

Postby Cgallegoa » Sat Sep 29, 2012 4:44 pm

Hola Jose Luis y benjiben, gracias por sus respuestas.

Como pueden leer en el mensaje original, yo tengo una buena cantidad de usuarios usando impresoras POS configuradas como genéricas sin problema. La pregunta es, si las instrucciones para imprimir el ticket están hechas con la clase TPrinter, porqué deben usarse como genéricas, si se supone que TPrinter actúa sobre el Api de windows. Cuando se usan con su driver original, sin definirlas como genéricas, sino tal cual las monta los instaladores del fabribante no funcionan bien, y por eso toca definirlas como genéricas, porque ? Esto es lo que no entiendo.

Adicionalemente, cuando se definen como genérica imprimen en modo draft, que es bastante rápido. Cuando se utiliza el driver directamente imprime en modo windows y toda definir font, lo que hace que sea más lenta la impresión. Imagínense un supermercado atendiendo a 100 clientes al mismo momento, algunos con compras de más de 50 items. Cómo se puede emular en windows la letra draft ? (courrier new es parecida, pero igual, la toma como de windows y la imprime más lenta)

Adicionalmente, los nuevos modelos no están permitiendo que se configuren como Genéricas. Indefectiblemente toca montar sus drivers para que tome el puerto virtual USB. Si luego la montan como générica y le direccionan el puerto al USB del driver original, créanme, no funciona. Como les indiqué anteriormente hice las consulstas con soporte técnico de Epson y Bixolón y confirmaron esto.

En otras palabras, con los nuevos modelos toca indefectiblemente usarlas tipo windows, pero entonces se comienza a notar comportamiento errático en la imporesión, lo que me lleva a deducir que debe haber algún truquito para usar con la clase TPrinter que no logro descubrir cuál es. Todos los fabricantes indican sus códigos ASCII para controlar la impresora, como para corte de papel, apertura de caja, etc. Entiendo que esos comandos se envían con la función PrinterEsc(), pero no importa en donde ponga esa instrucción no hace nada. Dónde se ponen, antes del PageBegin o después del mismo ?, etc., ect.

Acepto más sugerencias :D
Saludos,

Carlos Gallego

*** FWH-23.10, xHarbour 1.2.3 Build 20190603, Borland C++7.30, PellesC ***
Cgallegoa
 
Posts: 420
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador

Re: Impresoras de Tickets (POS)

Postby benjiben143 » Sat Sep 29, 2012 5:14 pm

hola, buen dia

la impresion con la impresora es rapida aqui con los tickets de bascula y son un promedio de 25 renglones ,,, checo con la impresion en tdosprint y no veo mucha la diferencia y tengo con cables usb y con cable paralelo

pero si requieres mas rapides y en los super de por aca

usan impresoras de ticktes termicas que en cuando le das click imprime de volada



saludos
Benjamin Casarrubias Moreno
Cd. Obregon, Sonora, Mexico
chino72vale@hotmail.com
Fivewin 16.05, Harbour 3.2, xharbour 1.2.1, Fivelinux, visual estudio 2013
benjiben143
 
Posts: 114
Joined: Wed Mar 11, 2009 7:32 pm
Location: Obregon, Sonora, Mexico

Re: Impresoras de Tickets (POS)

Postby Loren » Tue Oct 02, 2012 9:33 am

Carlos,

Yo hago así y no tengo problemas con mis clientes.

Code: Select all  Expand view

if alltrim(configu->puerto)='USB'
    vRuta:=alltrim(configu->rutatic) && PrnGetPort()
    NETCANCEL("LPT1")
    vPath:=NETREDIR( "LPT1",vRuta)
    IF vPath=.T.
     WINEXEC('NET USE LPT1: &vRuta',0)
     oPrn:=TDosPrn():New('LPT1')
    else
     MSGINFO("NO PUEDO IMPRIMIR CON LA IMPRESORA DE TICKETS") ; return
    ENDIF
   else
    oPrn:=TDosPrn():New(alltrim(configu->puerto))
   endif
   if configu->lprilingra=.t.
     oPrn:Say(y,20-(LEN(ALLTRIM(configu->cabtic1))/2),&(configu->chr_alg)+rtrim(configu->cabtic1)+&(configu->chr_dlg)) ; y++
   else
     oPrn:say(y,20-(LEN(ALLTRIM(configu->cabtic1))/2),configu->cabtic1) ; y++
   endif
   oPrn:Say(y,00,"Ticket Nº: "+alltrim(str(ventas->numticket))) ; y++
   oprn:say(y,00,replicate('-',40));y++
   oprn:say(y,00,'Udes    Descripción                Total'); y++
   oprn:say(y,00,replicate('-',40));y++
   select 21  ;    tttick:=0
   do while .not. eof()
    oprn:say(y,00,str(udes,3))
    oprn:say(y,05,des_ticket)
    iif(udes>1,oprn:say(y,27,str(pventa,6,2)),)
    oprn:say(y,34,str(udes*pventa,6,2)) ; y++
    tttick+=udes*pventa
    skip
   enddo
   skip-1
   oprn:say(y,00,replicate('-',40));y++
   oPrn:Say(y,00,&(configu->chr_alg)+'TOTAL: '+TRAN(tttick,'@E99,999.99')+' euros'+&(configu->chr_dlg)) ; y++
   y++
   if configu->corte=.t.
    OPRN:SAY(Y,00,CHR(27)+CHR(105)) // corte de papel
   endif
   oprn:END()
 


Como verás, mis clientes pueden configurar el diseño del ticket (cabecera, tamaño letra, pie), ruta de conexión y puerto, a través de un dialogo en la opción de "utilidades --> configuración interna" del programa. De esta manera le funciona directamente a cualquier cliente, independientemente tenga impresora con puerto COM, LPTx o USB

Aunque siempre he tenido la duda de cómo imprimir un ticket insertando un BMP como logotipo en la cabecera, siguiendo esta modalidad.

Un saludo.
LORENZO.
Loren
 
Posts: 479
Joined: Fri Feb 16, 2007 10:29 am
Location: Cadiz - España

Re: Impresoras de Tickets (POS)

Postby Cgallegoa » Tue Oct 02, 2012 6:40 pm

Lorenzo, gracias por tu aporte.

Como indiqué al comienzo del hilo, no utilizamos TDosPrint, sino directamente TPrint. Ya resolvimos el tema. En realidad el truco para que funcione bien con los drives de cada impresora, sin necesidad de instalarla como Genérica, es definir el Font a usar en cada oPrn:cmSay. Definimos como Fuente COURIER NEW con un size de -10,0 (ojo a esos parámetros) de manera que sale lo más cercano a Draft. Un poquitico más lenta al imprimir pero caminando rápido no se nota :D

Con la clase TPrint, tienen control total y puedes agregarle Bmps, pues le estás entregando todo el proceso a windows. A ver si el maestro Antonio Linares nos da más luz al respecto.
Saludos,

Carlos Gallego

*** FWH-23.10, xHarbour 1.2.3 Build 20190603, Borland C++7.30, PellesC ***
Cgallegoa
 
Posts: 420
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador

Re: Impresoras de Tickets (POS)

Postby sysctrl2 » Tue Oct 02, 2012 10:27 pm

Hola Carlos,

al igual que tu y el resto , tenemos dudas del alcance de la class tprinter,

quizas algun guru, tenga la solucion.

el problema que yo he encontrado es que no solo con impresoras de tickets si no con cualquier impresoras

varia la presentacion de los datos,

por ejemplo configuras que imprima un logo en una hp, y ese mismo reporte lo muestras con una epson,

el logo se mueve de lugar.

Saludos.
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 956
Joined: Mon Feb 05, 2007 7:15 pm

Re: Impresoras de Tickets (POS)

Postby Cgallegoa » Wed Oct 03, 2012 3:46 pm

Cesar,

Es posible que algo nos falte en el manejo de la clase.

Respecto al moverse el texto o logos en diferentes impresoras, la solución es poner todo en centímetros, con oPrn:CmSay y respecto al logo o gráficos esto es lo que hago:

Code: Select all  Expand view
nRaster := SRCAND := 8913094
xaCoord:=oPrn:CmRect2Pix( { 0.90, 2.00, 2.6, 2.6 } )
oPrn:SayBitmap( xaCoord[1] , xaCoord[2] , "Mst_Log.bmp" , xaCoord[3], xaCoord[4] , nRaster)
 


De esta manera, sin importar la resolución de la impresora, se imprimirá en posición absoluta medida en Cmts.

En realidad son muy pocos los problemas que he tenido con impresoras normales. El dolor de cabeza es con las POS, y la falta de un generador.

He probado con el demo de FastReport, que aunque es muy bueno, tiene algunas limitantes.

De todas formas, sería super si el maestro Antonio Linares nos ilumina más sobre TPrinter, aunque parece que ya no nos presta atención :-(
Saludos,

Carlos Gallego

*** FWH-23.10, xHarbour 1.2.3 Build 20190603, Borland C++7.30, PellesC ***
Cgallegoa
 
Posts: 420
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 10 guests