EPSON TM-T20II

HMG en Español

Moderator: Rathinagiri

Post Reply
User avatar
edufloriv
Posts: 238
Joined: Thu Nov 08, 2012 3:42 am
DBs Used: DBF, MariaDB, MySQL, MSSQL, MariaDB
Location: PERU

EPSON TM-T20II

Post by edufloriv »

Saludos amigos,

Antes que nada espero hayan tenido un fin de año espectacular.

A la empresa en la que trabajo se le dió por reducir costos y adquirimos un impresora EPSON TM-T20II para instalarla en almacén e imprimir en ella las hojas de picking (antes usabamos una impresora laser). Modifique el módulo que diseñé para tal fin para ajustar la impresión de datos para el picking al angosto rollo que usa esta impresora, las pruebas preliminares aparentemente estaban ok.

Cuando se pasó a producción la impresora nos dimos con la sorpresa que, cada cierta cantidad de documentos (aproximadamente unos 70) esta ya no imprimia los documentos subsiguientes, simplemente se los comia, y se producia un error (una ventana que simplemente decia error, no se veia mas). En algunas ocasiones el módulo se colgaba.

Hice varios cambios y no logré solucionarlo, lo único que me ha funcionado ha sido esto :

Code: Select all

*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
* ------------------------------------------------------ *
* SISTEMA     : DIURNO                                   *
* PRG         : TIMER.PRG                                *
* CREADO      : 13-09-2010                               *
* ACTUALIZADO :                                          *
* AUTOR       : EDUARDO V. FLORES RIVAS                  *
* COMENTARIOS : TIMER PARA IMPRESION DE FACTURAS         *
* ------------------------------------------------------ *

#include <minigui.ch>
#include <sql.ch>

#define adUseNone 1
#define adUseServer 2
#define adUseClient 3

#define adOpenForwardOnly 0
#define adOpenKeySet 1
#define adOpenDynamic 2
#define adOpenStatic 3

#define adLockReadOnly 1
#define adLockPessimistic 2
#define adLockOptimistic 3
#define adLockBatchOptimistic 4

#define adCmdText 1
#define adCmdTable 2
#define adCmdStoredProc 4
#define adCmdUnknown 8
#define adCmdFile 256
#define adCmdTableDirect 512

#define adIndex 0x100000

FUNCTION MAIN

REQUEST DBFCDX
RDDSETDEFAULT("DBFCDX")

SET BELL       Off
SET BROWSESYNC On
SET CONSOLE    Off
SET CURSOR     Off
SET DATE TO BRIT
SET DELETED    On
SET DELIMITERS Off
SET ECHO       Off
SET EPOCH TO 1990
SET MULTIPLE   Off
SET SCOREBOARD Off
SET TALK       Off
SET WRAP       On

PUBLIC BOLDON     := CHR(27)+'G'
PUBLIC BOLDOFF    := CHR(27)+'H'
PUBLIC LITTLEON   := CHR(15)
PUBLIC LITTLEOFF  := CHR(18)
PUBLIC PFF        := CHR(12)
PUBLIC PLF        := CHR(10)
PUBLIC PCR        := CHR(13)

PUBLIC Mi_Amarillo      := {255,255,192}
PUBLIC Mi_Verde_Nilo    := {160,192,192}
PUBLIC Mi_Verde_Claro   := {192,255,192}
PUBLIC Mi_Celeste_Suave := {160,192,255}
PUBLIC Mi_Celeste_Claro := {192,255,255}
PUBLIC Mi_Naranja       := {255,160,096}
PUBLIC Mi_Rosa_Oscuro   := {128,032,096}
PUBLIC Mi_Azul_Grisaceo := {128,160,192}
PUBLIC Mi_Azul_Oscuro   := {032,032,128}

PUBLIC Color_Label1_Font  := BLACK
PUBLIC Color_Label1_Back  := Mi_Naranja
PUBLIC Color_Dato1_Font   := YELLOW
PUBLIC Color_Dato1_Back   := Mi_Rosa_Oscuro

PUBLIC Color_Label2_Font  := BLACK
PUBLIC Color_Label2_Back  := Mi_Verde_Nilo
PUBLIC Color_Dato2_Font   := BLACK
PUBLIC Color_Dato2_Back   := Mi_Verde_Claro

PUBLIC Color_Label3_Font  := WHITE
PUBLIC Color_Label3_Back  := Mi_Azul_Oscuro
PUBLIC Color_Dato3_Font   := WHITE
PUBLIC Color_Dato3_Back   := Mi_Azul_Grisaceo

PUBLIC Color_Label4_Font  := BLACK
PUBLIC Color_Label4_Back  := Mi_Celeste_Claro
PUBLIC Color_Dato4_Font   := BLACK
PUBLIC Color_Dato4_Back   := Mi_Celeste_Suave

PUBLIC HOY         := DATE()
PUBLIC SIS_EMPRE   := 'INVERSIONES FARMACOM'
PUBLIC SYS_PORT    := "LPT1"
PUBLIC SYS_EDIT    := ".F."
PUBLIC SYS_IMPO    := "00000000000000"
PUBLIC SYS_PRINTER := GetDefaultPrinter()
PUBLIC aDiasSem    := {'Domingo','Lunes','Martes','Miercoles','Jueves','Viernes','Sábado'}
PUBLIC SYS_MES     := {'ENE','FEB','MAR','ABR','MAY','JUN','JUL','AGO','SET','OCT','NOV','DIC'}
PUBLIC aRegDia     := {}
PUBLIC aListaRutas := { 'NORTE' , 'SUR' , 'CENTRO' , 'OESTE' , 'PROVINCIA' }
PUBLIC cFechaMem   := DTOC(DATE())

PUBLIC SIS_IMPORTI := 'C:\Farmacom\Pickers\'
PUBLIC SIS_TIMER   := .F.
PUBLIC cStampHoy   := DTOS(DATE())
PUBLIC lLocker     := .F.
PUBLIC aCajas      := {}
PUBLIC aProfs      := {}

PUBLIC cTTF1       := 'Imagen\Code39.ttf'
PUBLIC cFont1      := 'Bar-Code 39'
PUBLIC cTTF2       := 'Imagen\Bcode128.ttf'
PUBLIC cFont2      := 'BarCode 128 INTERAL'

PUBLIC oConexion
PUBLIC aRecordSetX
PUBLIC CFG_PUBLIC
PUBLIC nConta := 0

   nTTF1 := WAPI_ADDFONTRESOURCEEX( cTTF1 )
   nTTF2 := WAPI_ADDFONTRESOURCEEX( cTTF2 )

   DEFINE WINDOW Win_Taker;
      AT 0 , 0 ;
      WIDTH 930 HEIGHT 550 ;
      TITLE 'PICKING' ;
      ON INIT TakerIniciar() ;
      ON RELEASE TakerTerminar() ;
      MAIN

      ON KEY CONTROL+F1 OF Win_Taker ACTION VerTracker()
      ON KEY CONTROL+I  OF Win_Taker ACTION ElegirImpresora()
      ON KEY CONTROL+R  OF Win_Taker ACTION ReImprimirPicker()
      ON KEY CONTROL+D  OF Win_Taker ACTION ReImprimirPickerNumero()
      ON KEY CONTROL+A  OF Win_Taker ACTION AgregarFacturasNuevas()
      ON KEY CONTROL+N  OF Win_Taker ACTION BuscarImpresionesNuevas()
      ON KEY CONTROL+V  OF Win_Taker ACTION SetCheckAll()

      DEFINE TIMER Timer_1 ;
      INTERVAL 20000 ;
      ACTION BuscarFacturasNuevas()

      DEFINE TOOLBAR FacturaBar BUTTONSIZE 70,30 FLAT BORDER

         BUTTON BotPausa     ;
            CAPTION '&Pausa' ;
            PICTURE 'imagen\pausa.bmp' ;
            ACTION TakerPausar()

         BUTTON BotRetomar   ;
            CAPTION '&Retomar' ;
            PICTURE 'imagen\imprimir.bmp' ;
            ACTION TakerRetomar()

         BUTTON BotReanudar  ;
            CAPTION '&Reanudar' ;
            PICTURE 'imagen\siguiente.bmp' ;
            ACTION TakerReanudar()

         BUTTON BotSalir     ;
            CAPTION '&Salir' ;
            PICTURE 'imagen\salir.bmp' ;
            ACTION Win_Taker.Release

      END TOOLBAR
//
//
//
   @  060 , 010 BROWSE BrwFacturas ;
      WIDTH  550 ;
      HEIGHT 400 ;
      HEADERS { 'Estado' , 'Num.'            , 'Interno' , 'Documento' , 'Clie.' , 'Pick'  , 'Pack' } ;
      WIDTHS  {    070   ,  50               ,    100    ,     120     , 060     ,  50     ,   50   } ;
      FIELDS  { 'FLAG'   , 'STR(ORDKEYNO(),4)' , 'VENTA'   , 'DOCUM'     , 'CLIE'  ,  'PICK' , 'PACK' } ;
      JUSTIFY { BROWSE_JTFY_LEFT , BROWSE_JTFY_LEFT , BROWSE_JTFY_LEFT , BROWSE_JTFY_CENTER , BROWSE_JTFY_CENTER , BROWSE_JTFY_CENTER , BROWSE_JTFY_CENTER } ;
      WORKAREA FLUJ ;
      IMAGE   { 'Imagen\equis.bmp' , 'Imagen\check.bmp' , 'Imagen\mas.bmp'} ;
      ON DBLCLICK TakerMarcar()
//
//
//
   @  060 , 570 GRID GrdAnuladas ;
      WIDTH  350 ;
      HEIGHT 400 ;
      HEADERS { 'Número' , 'Documento' , 'Estado' } ;
      WIDTHS  {    100   ,     120     ,   070    } ;
      JUSTIFY { BROWSE_JTFY_LEFT , BROWSE_JTFY_LEFT , BROWSE_JTFY_CENTER } ;
      FONTCOLOR RED ;
      BACKCOLOR Mi_Amarillo
//
//
//
      DEFINE STATUSBAR
         STATUSITEM "..." ACTION MsgInfo('Facturador')
         CLOCK
         DATE
      END STATUSBAR

   END WINDOW

   ACTIVATE WINDOW Win_Taker

   nTtf1 := WAPI_REMOVEFONTRESOURCEEX( cTTF1 )
   nTtf2 := WAPI_REMOVEFONTRESOURCEEX( cTTF2 )

RETURN

*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------

PROC BuscarFacturasNuevas

   IF lLocker = .T.
      RETURN
   ENDIF

   lLocker = .T.
   Win_Taker.Timer_1.Enabled                := .F.
   Win_Taker.FacturaBar.BotPausa.Enabled    := .F.
   Win_Taker.FacturaBar.BotRetomar.Enabled  := .F.
   Win_Taker.FacturaBar.BotReanudar.Enabled := .F.

   AgregarFacturasNuevas()      // Cargadores.prg
   BuscarFacturasAnuladas()     // Cargadores.prg

   SELE FLUJ
   LOCATE FOR FLUJ->FLAG = 0
   Win_Taker.BrwFacturas.Value := FLUJ->(ORDKEYNO())
   Win_Taker.BrwFacturas.Refresh
   DO EVENTS

   BuscarImpresionesNuevas()
   
   lLocker = .F.
   Win_Taker.Timer_1.Enabled                := .T.
   Win_Taker.FacturaBar.BotPausa.Enabled    := .T.
   Win_Taker.FacturaBar.BotRetomar.Enabled  := .F.
   Win_Taker.FacturaBar.BotReanudar.Enabled := .F.

RETURN


*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------

PROC BuscarImpresionesNuevas

LOCAL aClies := {}
LOCAL aFacts := {}
LOCAL nClie
LOCAL cClie

   MENSABAR('Preparando impresiones nuevas...')

   SELE FLUJ
   DBGOTOP()
   DO WHILE .NOT. FLUJ->(EOF())
      IF FLUJ->FLAG = 0
         IF FacturaEstaCerrada( FLUJ->VENTA )
            nConta++
            IF nConta > 25
               Win_Taker.Release  // <-- AQUI CIERRO LA APLICACION DESPUES DE IMPRIMIR 25 DOCUMENTOS.
            ENDIF
            ImprimirFactura( FLUJ->VENTA , FLUJ->(ORDKEYNO()) )
            FLUJ->FLAG := 1
            SKIP
         ENDIF
      ELSE
         SKIP
      ENDIF
   ENDDO

   MENSABAR()

RETURN
Como verán en el código uso un contador (nConta) para que cada 25 documentos la aplicación se cierre, el usuario tiene que volver a hacer doble click en la aplicación de su escritorio para abrir nuevamenta la aplicación y retome la impresión de documentos desde donde se quedó, es la única manera que encontré para que no se "coma" ningún documento.

Agradeceré cualquier ayuda al respecto.

Saludos y mil gracias por su tiempo.

Eduardo Flores Rivas


LIMA - PERU
edk
Posts: 909
Joined: Thu Oct 16, 2014 11:35 am
Location: Poland

Re: EPSON TM-T20II

Post by edk »

Maybe try to add at beginning of PROC BuscarFacturasNuevas

Code: Select all

RELEASE MEMORY
hb_releaseCPU()
User avatar
edufloriv
Posts: 238
Joined: Thu Nov 08, 2012 3:42 am
DBs Used: DBF, MariaDB, MySQL, MSSQL, MariaDB
Location: PERU

Re: EPSON TM-T20II

Post by edufloriv »

Muchas gracias EDK, voy a probarlo. :D

Thanks a lot, EDK, I am going to try it.


Best regards,

Eduardo Flores Rivas


LIMA - PERU
martingz
Posts: 394
Joined: Wed Nov 18, 2009 11:14 pm
Location: Mexico

Re: EPSON TM-T20II

Post by martingz »

Eduardo pudiste solucionar tu problema, tengo uno similar adquirimos esas impresoras y cada tiempo no da error, solamente no imprimen, tienen que salir del programa y volver a entrar
Agradezco de antemano las atenciones prestadas

saludos
User avatar
edufloriv
Posts: 238
Joined: Thu Nov 08, 2012 3:42 am
DBs Used: DBF, MariaDB, MySQL, MSSQL, MariaDB
Location: PERU

Re: EPSON TM-T20II

Post by edufloriv »

Hola Martigz,

Para solucionarlo tuve que separar todo el código de impresión en otro .EXE (en mi caso le puse PRINTDOC.EXE) y lo llamo desde el principal con :

Code: Select all

PROC ImprimirFactura( nQueOper , nQueRegi )

LOCAL cPara := VALSTR(nQueOper)+'|'+VALSTR(nQueRegi)

   EXECUTE FILE "PRINTDOC.EXE" PARAMETERS cPara
   FOR nLap = 1 TO 35000000
   NEXT
/*
RELEASE MEMORY
hb_releaseCPU()
*/   
RETURN
Le pongo un retrasador porque al parecer el driver de esta impresora demora en procesar la data enviada y si le envias más data cuando aún no ha terminado de procesar lo que tiene en cola es donde ocurre la saturación y simplemente no imprime. Me parece que es un error del driver que no ha sido corregido. Es posible que tengas que ajustar el contador de acuerdo al cpu que usas.

Espero te sirva, saludos.



Atentamente,

Eduardo Flores Rivas


LIMA - PERU
martingz
Posts: 394
Joined: Wed Nov 18, 2009 11:14 pm
Location: Mexico

Re: EPSON TM-T20II

Post by martingz »

Eduarod mil gracias por contestar, te comento que en un foro daban una solucion a esto, que era en las propiedades de la impresora , poner que imprimiera directamente en la impresora, lo hice y en este dia no me han hablado que no les dio recibo, estamos haciendo mas pruebas con otros equipos , pero el dia de hoy al parecer no hubo este problema, espero que eso sea la solucion ( el problema no es solo de Harbour o HMG )
Te hare saber si todo funciono bien o no


saludos
Post Reply