Página 1 de 1

Terminal Busca Preço GERTEC sem dll

Enviado: 21 Jul 2020 16:28
por frazato
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

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

Terminal Busca Preço GERTEC sem dll

Enviado: 21 Jul 2020 17:41
por Vlademiro
Show de bola

Obrigado!

Terminal Busca Preço GERTEC sem dll

Enviado: 23 Jul 2020 11:48
por HASA
Não tenho ainda mas... Valeu agradeço.

HASA

Terminal Busca Preço GERTEC sem dll

Enviado: 23 Jul 2020 17:22
por frazato
Tarde!
Coloquei a opção para utilizar o mysql via odbc para pegar os dados direto no banco do meu frente de caixa, desta maneira tenho certeza que o produto estará disponível para venda.

Frazato

Código: Selecionar todos

#INCLUDE "FILEIO.CH"
#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    := {}
Static lOkBanco_GZ    := .t.

//-- para acesso banco gz

STATIC oConexaoFlex


Static wGZFLEX_IP   //:='192.168.27.225'
Static wGZFLEX_USR  //:='usuario'
Static wGZFLEX_PWD  //:='senha banco'
static wTipoConsulta//:='S'

//------------------------------
FUNCTION MAIN()
wGZFLEX_IP   :=INI_PEGA_DADOS('IPBRIDGE')
wGZFLEX_USR  :=INI_PEGA_DADOS('USUARIOGZ')
wGZFLEX_PWD  :=INI_PEGA_DADOS('SENHAGZ')
wTipoConsulta:=INI_PEGA_DADOS('PDVONLINE')

Param xParam 

nPorta    := Val(INI_PEGA_DADOS("PORTA"))
cLocaServ := INI_PEGA_DADOS('SERVIDORJAF')

If !Empty(xParam)
    wGZFLEX_IP := xParam
*    Alert(wGZFLEX_IP)
*Else
*    Alert(wGZFLEX_IP)
Endif   
If wTipoConsulta#'S'
   ConectaBDF() // atender a multherd
Endif   

MutexCount    := HB_MutexCreate()
Set Color to 'w+/b+'
Clear
*If wTipoConsulta=='S' // Via Gz Sistemas
   *lOkBanco_GZ         := ConectaBancoGZ()
   *If lOkBanco_GZ==.f.
   *   Alert('Falha banco dados GZ Sistemas!'+wGZFLEX_IP)
*	  wTipoConsulta := "N" // Consulta via JAF
*   Endif
*Endif   

/* teste no banco pode retirar
ceaNpesq := Space(13)
@ 05,00 say 'Ean Pesq Banco:' get cEanPesq Pict '9999999999999'
REad
cOk:= Pegaprecogz(cEanPesq)
? Len(cOk)
? cOk[1,1]
? cOk[1,2]
Quit

*/

@ 00,00 say Padc('### JAF DESENV.  TERMINAL BUSCA PRECO  GERTEC |SEM DLL ### ',90) Color('R+/GB+')
@ 01,00 say Padc('Versao Beta ==>'+ Version()+' (MySQL ODBC 3.51)',90) Color('NN+/GB+')
If wTipoConsulta=="S"
   @ 02,00 say Padc('SERVIDOR GZ(concentrador):'+wGZFLEX_IP,80)
Else
   @ 02,00 say Padc('Servidor JAF:'+cLocaServ,80)
Endif
@ 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
//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)
   *PapoTerminal(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
Clear
@ MaxRow(),2 say 'Tchau...!!!'

If lOkBanco_GZ==.t.
          If oConexaoFlex:state#0
             oConexaoFlex:Close()
          Endif
Endif
Inkey(0.2)
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
   If wTipoConsulta=='S'
      lPeloGz :=.t.
   Else
      lPeloGz :=.f.
   Endif	  
   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

		  cPesq2   := cLidos
		  cPesqEan := sonumeros(cLidos)
		  
		  cPesqEan := StrZero(Val(cPesqEan),16) 
		  
		  cMsg     := '#nfound'
		  If lPeloGz == .t. 
		  
		    cOk  := Pegaprecogz(cPesqEan)
			If Len(cOk) > 0
			   xOferta := ''
			   cMsg := '#R$ '+Alltrim(transf(cOk[1,2],'@EZ 99999.99'))+'*JAF*'+xOferta+;
								 +'|'+Alltrim(cOk[1,1])
			   GravaLogRetorno(cLidos+' '+cMsg+' Terminal..'+cIpterminal+' Hora..:'+time())
			   Aadd(wItensLidos,cOk[1,1]+'GZ-Sist.:'+time()) // mostra lista itens
			Endif
		  Else
		 	 ConectaBDF()  // Abre dbf jaf
		     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   
	     Endif		  
	     INetSendall( pSocket,cMsg)
		 inkey(0.5)
	  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, "PDVONLINE=S#" + chr(13) + chr(10) )
         fwrite(HANDLE, "IPBRIDGE=192.168.27.229#" + chr(13) + chr(10) )
         fwrite(HANDLE, "USUARIOGZ=usuario banco#" + chr(13) + chr(10) )
		 fwrite(HANDLE, "SENHAGZ=senha banco#" + chr(13) + chr(10) )
	     fwrite(HANDLE, "SERVIDORJAF=G:\JAF\BBA\#" + chr(13) + chr(10) )
         fwrite(HANDLE, "PORTA=6500#" + 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')

If wTipoConsulta=='S'
   Return .f.
Endif

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

//------------------------------------------------------------
Static FUNCTION ConfiguraConexaoFlex()
Local lOk := .t.
    BEGIN SEQUENCE
	
	      hb_mutexLock( MutexCount )
         
           oConexaoFlex := CreateObject( "ADODB.Connection" )
           oConexaoFlex:ConnectionString := "Driver={MySQL ODBC 3.51 Driver};Server="+wGZFLEX_IP+";" + ;
              "Option=131072;Stmt=;Database=concentdb;User ID="+wGZFLEX_USR+";Password="+wGZFLEX_PWD+";Collation=latin1;"
           oConexaoFlex:CursorLocation    := 3   // local recordset
           *oConexaoFlex:CommandTimeOut    := 60  // seconds
		   oConexaoFlex:ConnectionTimeOut := 120 // seconds
           hb_mutexUnLock( MutexCount ) 
		   lOk := .t.
    RECOVER
      *Alert('Erro na Configuracao do Banco do GZFLEX!')
	Return .f.
   END SEQUENCE
RETURN lOk
     
//------------------------------------------------
Static Function Pegaprecogz(cPesq) //,nPrecoVenda,nPrecoVenda2,nPrecoVenda3,cDesc)
   LOCAL oTemporario, lOk := .T.
   Local cRetorno  := {}
   Local ccodigo   := Alltrim(Str(val(cPesq)))
   
   *GravaLogRetorno('Abrindo banco GZ Hora..:'+time())
   If ConfiguraConexaoFlex()==.f.
      GravaLogRetorno('Erro abertura banco Hora..:'+time())
  	  Aadd(cRetorno,{'Banco Gz Caiu!',0})
      Return cRetorno  
   Endif
   
   oConexaoFlex:Open()
   
   *BEGIN SEQUENCE
   
		  cmd := [select descricao, termvenda from concentdb.estoque where cdprod=( Select cdprod from concentdb.barrarel where codbarra=]+cCodigo+[)]
         *oTemporario := oConexaoFlex:Execute( [SELECT * FROM ESTOQUE WHERE CODBARRA=]+cCodigo )
		  oTemporario := oConexaoFlex:Execute( cmd )
	  
   *RECOVER
          *Alert('Problema ao executar o Comando no Banco')
    *      Return cRetorno
   *END SEQUENCE

   IF oTemporario:RecordCount() == 0
	  Return cRetorno // devolve matriz zerada
   ELSE
      *@ 12,12 SAY oTemporario:Fields( "descricao" ):Value COLOR "G+/N"
      *@ 13,12 say oTemporario:Fields( "termvenda" ):Value COLOR "G+/N"
        
      *Alert(oTemporario:Fields( "descricao" ):Value)
	   Aadd(cRetorno,{oTemporario:Fields( "descricao" ):Value,oTemporario:Fields( "termvenda" ):Value})
   ENDIF
   oTemporario:Close()
   
RETURN cRetorno

//------------------------------------------------------------
Static Function ConectaBancoGZ()
Local nJanGet
   If Empty(wGZFLEX_IP)
      Return .f.
   Endif
   
   ConfiguraConexaoFlex()
   BEGIN SEQUENCE
        oConexaoFlex:Open()
   RECOVER
        Return .f.
   END SEQUENCE
Return .t.