Terminal Busca Preço GERTEC sem dll
Enviado: 21 Jul 2020 16:28
Tarde!
Estou tendo vários problemas com uma aplicação que utilizo de terceiro no mercado para consulta de preço neste tipo de terminal, fica dando erros de DLL, e para não ter a rotina de ficar importando arquivo resolvi fazer uma para atender as minhas necessidades, acho de da para melhorar para mais de 3 terminais, hj tenho 2 e está funcionado bem!
Espero que sirva para alguém!!
Frazato
Estou tendo vários problemas com uma aplicação que utilizo de terceiro no mercado para consulta de preço neste tipo de terminal, fica dando erros de DLL, e para não ter a rotina de ficar importando arquivo resolvi fazer uma para atender as minhas necessidades, acho de da para melhorar para mais de 3 terminais, hj tenho 2 e está funcionado bem!
Espero que sirva para alguém!!
Frazato
Código: Selecionar todos
#INCLUDE "FILEIO.CH"
#include "inkey.ch"
#include "set.ch"
#include "wingdi.ch"
#include "winuser.ch"
#include "common.ch"
#include "setcurs.ch"
#include "getexit.ch"
Static gSocket
#define CR chr(13)
#define LF chr(10)
static MutexCount
static wListaTerminal := {}
static nPorta
Static cLocalServ
Static wItensLidos := {}
//------------------------------
FUNCTION MAIN()
nPorta := Val(INI_PEGA_DADOS("PORTA"))
cLocaServ := INI_PEGA_DADOS('SERVIDORJAF')
ConectaBDF() // atender a multherd
Set Color to 'w+/b+'
Clear
@ 00,00 say Padc('### JAF DESENV. TERMINAL BUSCA PRECO GERTEC |SEM DLL ### ',90) Color('R+/GB+')
@ 01,00 say Padc('Versao Beta ==>'+ Version(),90) Color('NN+/GB+')
@ 02,00 say Padc('Servidor JAF:'+cLocaServ,80)
@ 03,02 say Padc("Porta ("+Str(nPorta,5)+") Iniciado em..."+dtoc(Date())+' '+time(),80)
@ 04,00 to 04,90
DispOutAt( maxrow()-2, 0, Repli('-',90), "W+/N" )
DispOutAt( maxrow()-1, 0, padc( "JAF Desenvolvimentos - Joao Frazato",90 ), "W+/N" )
INetInit()
gSocket := INetServer(nPorta)
nReconecoes := 1
*g_nUserCount := 0
*g_nTotalCount := 0
MutexCount := HB_MutexCreate()
wListaTerminal:= {}
do while .T.
InetSetTimeout( gSocket, 100000 ) // Timeout de Recepção 3 seg //
pSocket := INetAccept(gSocket) //gSocket
@ 05,00 say Time()
@ 05,31 say 'Coneccao:'+Time()+' Tentativas...'+str(nReconecoes,5)
IF INetErrorCode( gSocket ) <> 0
nReconecoes++
Inkey(0.1)
If Lastkey()==27
Exit
Endif
Loop
Endif
cIp_Pdv_solicitante := INetAddress(pSocket)
If nOk:= Ascan(wListaTerminal,{|x|x[1]==cIp_Pdv_solicitante} ) = 0
Aadd(wListaTerminal,{cIp_Pdv_solicitante,pSocket})
Endif
hb_ThreadStart( @PapoTerminal(),pSocket,cIp_Pdv_solicitante)
*PegandoMensagemPDV(pSocket,cIp_Pdv_solicitante)
Inkey(0.1)
If Lastkey()==27
Exit
Endif
@ 6,60 say ' Terminais '
@ 7,60 say '-------------------------'
For i:= 1 to len(wListaTerminal)
@ i+8,60 say wListaTerminal[i,1]
@ i+8,78 say wListaTerminal[i,2]
Next
@ 7,05 say '### ULTIMOS ITENS LIDOS ###'
CorOld :=SetColor()
Set color to 'r*/nn'
@ 08,1 Clear to 20,56
For x:= 1 to Len(wItensLidos)
@ x+7,1 say wItensLidos[x]
If x >= 10
hb_mutexLock( MutexCount )
wItensLidos := {}
hb_mutexUnlock( MutexCount )
Exit
Endif
NExt
SetColor(CorOld)
Enddo
INetClose( gSocket )
INetCleanUp()
Close All
Return Nil
//------------------------------------------
Function PapoTerminal(sconc,cIpterminal)
Local pSocket := sconc
Local ntimesaida := 5 * 1000000
Local cMsg, cLidos,Bloco,nErro
Local cPesqEan
InetSetTimeout( pSocket ,nTimeSaida) // Timeout de Recepção 3 seg //
// --- envia msg pro temrinal
cMsg := '#ok'
INetSendall( pSocket,cMsg)
DispOutAt( maxrow()-3, 0,'Terminal Conectado...'+cIpterminal , "'ww+/b+'" )
Do while .t.
cLidos := ''
nErro := hb_InetErrorCode( pSocket )
Bloco := Space(255)
bytes := hb_inetRecv(pSocket,@BLOCO)
cLidos := Left(Bloco,Bytes)
If hb_inetstatus(pSocket)== -1 // erro coneccao
Exit
Endif
If Len(cLidos) >= 14
ConectaBDF() // Abre
cPesq2 := cLidos
cPesqEan := sonumeros(cLidos)
cPesqEan := StrZero(Val(cPesqEan),16)
cMsg := '#nfound'
Sele Sku
OrdSetFocus("Skus01")
Go top
SEEK cPesqEan
If Found()
Sele Prod
OrdSetFocus("Prod01")
Go Top
Seek Sku->Cod_Prod
If Found()
nVenda := Prod->venda
xOferta := Iif( ( Date() >= Prod->Ofer_Inici) .And. ( Date() <= Prod->Ofer_Termi) .And. ( Prod->Ofer_Valor > 0 ) ,"*Oferta*" ,"" )
If xOferta#''
nVenda := Prod->Ofer_Valor
Endif
cMsg := '#R$ '+Alltrim(transf(nVenda,'@EZ 99999.99'))+'*JAF*'+xOferta+;
+'|'+Alltrim(Prod->descricao)
GravaLogRetorno(cLidos+' '+cMsg+' Terminal..'+cIpterminal+' Hora..:'+time())
Aadd(wItensLidos,Prod->Codigo+'.'+Prod->Descricao+' '+time()) // mostra lista itens
Else
GravaLogRetorno(cLidos+' Produto erro codigo barras '+time())
Endif
Else
GravaLogRetorno(cLidos+' Codigo ean invalido '+time())
Endif
INetSendall( pSocket,cMsg)
inkey(0.1)
Else
*@ 22,20 say 'Aguardando..'+Time()
Endif
If nErro # 0
Exit
Endif
If LastKey()==27
Exit
Endif
Enddo
INetClose( pSocket )
Return .t. //
//---------------------------------------------------------
sTatic function sonumeros(e)
Local n := '0123456789'
Local i
Local c:= ''
For i:= 1 to Len(e)
If Substr(e,i,1)$n
c+= Substr(e,i,1)
Endif
Next
Return c
******************
FUNCTION Iniciar()
******************
set confirm on
set deleted on
set bell off
set scoreboard off
set date british
set epoch to 1950
Set date format to "DD/MM/YYYY"
Set exclusive off
Setmode(25,90)
lRet := .t.
RETURN lRet
//--------------------------------------------
Static Function GravaLogRetorno(cMsg)
Local cFileName := "Busca_Preco.txt"
Local hFile, cLine := "", n
Local cFieldAnt
Local CRLF := Chr(13)+Chr(10)
Local i
cLine := cMsg+CRLF
hb_mutexLock( MutexCount )
If ! File( cFileName ) // Caso nao tenha cria o arquivo
FClose( FCreate( cFileName ) )
Endif
Do Whil .T.
If ( ( hFile := FOpen( cFileName, 1+16 ) ) # -1 )
FSeek( hFile, 0, 2 )
FWrite( hFile, cLine, Len( cLine ) )
FClose( hFile )
Exit
Else
Exit
Endif
Enddo
hb_mutexUnlock( MutexCount )
Retu(.T.)
//---------------------------------------------------------
Static Function Cria_configuracao()
Local WARQ := "buscapreco.JAF"
Local HANDLE
If ! File(WARQ)
HANDLE := fcreate(WARQ, FC_NORMAL )
If HANDLE > 0
*fwrite(HANDLE, "IPLETODB=200.192.243.252#" + chr(13) + chr(10) )
*fwrite(HANDLE, "PORTALETODB=2812#" + chr(13) + chr(10) )
fwrite(HANDLE, "SERVIDORJAF=G:\JAF\BBA\#" + chr(13) + chr(10) )
fwrite(HANDLE, "PORTA=4548#" + chr(13) + chr(10) )
*fwrite(HANDLE, "TIMEOUT=3000#" + chr(13) + chr(10) )
RET := (ferror() = 0)
fclose(HANDLE)
Endif
Endif
Return nil
*>------------------------------------------------------------------------
Static Function INI_PEGA_DADOS(PARAM) //
LOCAL BUSCA , ARQUIVO ,BSUCA,INIPARMA , FIMPARAM , SIZESTRING
IF ! FILE("buscapreco.JAF")
CLOSE ALL
Alert("Criado o arquivo de Configura‡Æo de (buscapreco.JAF)")
Cria_configuracao()
quit
ELSE
ARQUIVO := "buscapreco.JAF"
ENDIF
LINHA := Memoread(Arquivo)
BUSCA := AT(PARAM,LINHA)
LINHA := SUBSTR(LINHA,BUSCA,80)
INIPARAM := AT("=" ,LINHA)
FIMPARAM := AT("#" ,LINHA)
SIZESTRING:= ( FIMPARAM - INIPARAM )
VINIPARAM := ALLTRIM(SUBSTR(LINHA,INIPARAM+1,SIZESTRING-1))
RETURN VINIPARAM
//---------------------------------------------------------------
Function ConectaBDF()
nPorta := Val(INI_PEGA_DADOS("PORTA"))
cLocaServ := INI_PEGA_DADOS('SERVIDORJAF')
Set Defa to ( cLocaServ )
REQUEST DBFCDX
RDDSETDEFAULT("dbfcdx")
DBSETDRIVER("dbfcdx")
Iniciar()
Close all
Sele 1
Use CadSkus Alias Sku
Set index to CadSkus
Sele 2
use Produto alias Prod
Set index to Produto
Return nil