Página 1 de 2

Consulta cep ou endereço em WebService - xHarbour

Enviado: 17 Jun 2009 11:44
por sygecom
Segue abaixo um exemplo para consulta de CEP informando o endereço ou vice versa.

Nota: Para que o exemplo funcione você tem que criar um usuario no seguinte SITE: http://www.byjg.com.br/site/ (O SERVIÇO É GRATUITO)
Depois de ter cadastrado e ATIVADO sua conta no Site do Webservice, você apenas altera no exemplo abaixo o usuario e senha que você cadastrou que vai funcionar. O exemplo abaixo foi compilado com xharbour 1.0.0 e sem lib visual alguma, apenas tem que ter linkado no exemplo a TIP.LIB por causa da função: Inetestaconectada()

Tentei compilar o mesmo exemplo com Harbour do SVN, mas não obtive exito, mas quem sabe com a versão beta 2.0 ou com versões anteriores de certo, eu vi que no SVN recentemente estão mexendo com o CreateObject() , talvez por isso não deu certo, mas deve ser apenas uma questão de ajuste de parametros ou mudar o nome da função que deve funcionar.

Código: Selecionar todos

***************
FUNCTION MAIN()
***************
Local aRet2 := {}
Private vCEP_TEMP := space(8) , vEND_TEMP := space(50), vCID_TEMP := space(50), vUF_TEMP := space(2), vTIPO := space(1)

cls

IF Inetestaconectada()=.F.
   alert("A Busca de Endereço pelo CEP é preciso acesso a Internet, Favor verificar sua Conexão")
   Return aRet2
ENDIF

@ 02,02      SAY "CEP.....:"
@ 03,02      SAY "ENDERECO:"
@ 04,02      SAY "BAIRRO..:"
@ 05,02      SAY "CIDADE..:"
@ 06,02      SAY "UF......:"

@ 08,02      SAY "TIPO CONSULTA:   1=BUSCA PELO CEP 2=BUSCA APARTIR DO ENDERECO"

@ 02,11 GET vCEP_TEMP PICTURE "@R 99999-999"
@ 03,11 GET vEND_TEMP PICTURE "@!"
@ 05,11 GET vCID_TEMP PICTURE "@!"
@ 06,11 GET vUF_TEMP  PICTURE "!!"

@ 08,16 GET vTIPO  PICTURE "!"
READ

aRet2:=Busca_Cep3()
IF LEN(aRet2) > 0
   @ 15,02      SAY "CEP.....:" + aRet2[1]
   @ 16,02      SAY "ENDERECO:" + aRet2[2]
   @ 17,02      SAY "BAIRRO..:" + aRet2[3]
   @ 18,02      SAY "CIDADE..:" + aRet2[4]
   @ 19,02      SAY "UF......:" + ALLTRIM(aRet2[5])
ENDIF
Return Nil


*******************
Function Busca_Cep3
*******************
Local cBuf
Local aRet := {}
Local aRet3:= {}
LOCAL aTokens := {}
Local nMAXLEN := 0
Local vESCOLA
TRY
   oSoapClient := CreateObject( "MSSOAP.SoapClient" )
CATCH
   TRY
      oSoapClient := CreateObject( "MSSOAP.SoapClient" )
   CATCH
      ALERT( "Erro! Ao tentar Acessar o WEB SERVICE")
      Return aRet
   END
END

IF vTIPO="1"
   if empty(vCEP_TEMP)
      ALERT("Obrigatorio informar o Cep, Favor Revisar")
      Return aRet
   endif
ELSE
   if empty(vEND_TEMP)
      alert("Obrigatorio informar o Endereço, Favor Revisar")
      Return aRet
   endif

   if empty(vCID_TEMP)
      alert("Obrigatorio informar o Municipio, Favor Revisar")
      Return aRet
   endif

   if empty(vUF_TEMP)
      alert("Obrigatorio informar a Unidade Federativa, Favor Revisar")
      Return aRet
   endif
ENDIF

IF vTIPO="1"
   oSoapClient:msSoapInit("http://www.byjg.com.br/site/webservice.php/ws/cep?WSDL" )
   cBuf := oSoapClient:obterLogradouroAuth(vCEP_TEMP,"usuario","senha")
   oSoapClient:=Nil

   IF !LEFT(cBuf,3) = "Cep"
      aadd( aRet, vCEP_TEMP )
      aTokens := HB_ATokens( cBuf, ",", .F., .F. )
      FOR i := 1 TO Len( aTokens )
         aadd( aRet, aTokens[i] )
      NEXT
   ENDIF
ELSE
   oSoapClient:msSoapInit("http://www.byjg.com.br/site/webservice.php/ws/cep?WSDL" )
   cBuf := oSoapClient:obterCEPAuth(alltrim(vEND_TEMP),alltrim(vCID_TEMP),alltrim(vUF_TEMP),"usuario","senha")
   oSoapClient:=Nil

   IF Upper(alltrim(cBuf[1])) # "LOGRADOURO NÃO ENCONTRADO"
      IF len(cBuf:value()) > 0
         FOR x := 1 TO len(cBuf:value())
            AADD(aRet3,alltrim(cBuf[x]))
         NEXT

         IF LEN(aRet3) > 0
            AEVAL(aRet3, {|cV,nV| IF( LEN( aRet3[nV] ) > nMAXLEN,nMAXLEN := LEN( aRet3[nV] ), NIL ) })
            vESCOLA := ACHOICE(10,1,nMAXLEN,70,aret3,.T.,,vESCOLA)

            IF vESCOLA > 0
               aTokens := HB_ATokens( aret3[vESCOLA], ",", .F., .F. )
               FOR i := 1 TO Len( aTokens )
                  aadd( aRet, aTokens[i] )
               NEXT
            ENDIF
         ENDIF
      ENDIF
   ENDIF
ENDIF

if len(aRet) = 0
   alert('Nenhum Resultado encontrado')
endif
Return aRet

**************************************
Function inetestaconectada( cAddress )
**************************************
LOCAL aHosts
LOCAL cName
InetInit()
IF cAddress == NIL
   cAddress := "www.google.com.br"
ENDIF
aHosts := InetGetHosts( cAddress )
IF aHosts == NIL .or. len(aHosts)=0
   InetCleanup()
   RETURN .f.
endif
InetCleanup()
RETURN .t.

Re: Consulta cep ou endereço em WebService - xHarbour

Enviado: 17 Jun 2009 11:51
por sygecom
Já ia esquecendo.
Como o SOAP, foi oficialmente descontinuado pela Microsoft talvez alguns sistema operacionais mais novo não de suporte mais a SOAP e não funcione o exemplo acima, mas é só instalar o link abaixo que deve funcionar:

Nota: Não testei com Windows 95 e 98
http://www.microsoft.com/downloads/deta ... layLang=en

Re: Consulta cep ou endereço em WebService - xHarbour

Enviado: 25 Jun 2009 09:15
por Antonio
Para compilar no HARBOUR:

xHarbour InetInit() => equivalente Harbour Hb_Inetinit()
xHarbour InetCleanUp() => equivalente Harbour ThtmlCleanUp()
xHarbour IneGetHosts => equivalente Harbour Hb_IneGetHosts()

Ou

#include "hbcompat.ch"

Re: Consulta cep ou endereço em WebService - xHarbour

Enviado: 27 Jun 2009 12:59
por sygecom
É nesse caso é só acresentar mesmo o #include "hbcompat.ch", porem na ultima versão BETA do Harbour, esta com um probleminha nos CreateObject() pq andou mudando algumas coisa para melhor, e nesse caso teria que pegar o arquivo: win_ole.c e o win_tole.prg que estão junto no instalador da versão beta do Harbour que esta no SourceForge e compilar junto com o exemplo para não ter problemas.

Re: Consulta cep ou endereço em WebService - xHarbour

Enviado: 20 Jul 2010 13:13
por frazato

Código: Selecionar todos

#DEFINE CRLF chr(13)+chr(10)
#INCLUDE "FILEIO.CH"


Function Main()
Local nDll , pApi
Local cCepOrigem := Space(9)
Local cCepDestino:= Space(9)
Local nPeso      := 0


      Clear
      Set Color to 'ww/BB+'
      Clear
      @ 00,00 say padc('Consulta de Tarifa Via correio ',80) Color('R+/NN+')
      @ 01,00 say padc('xHarbour 99.70',80) Color('GB+/NN+')

      @ 24,00 say padc('Joao Frazato ( sistema_jaf@hotmail.com)',80) Color('N/NN+')

      @ 10,10 say 'Nr. Cep Remetente :' Get cCepOrigem  Pict "@R 99.999-999"
      @ 12,10 say 'Nr. Cep Destino   :' Get cCepDestino Pict "@R 99.999-999"
      @ 14,10 say 'Peso              :' get nPeso Pict "@EZ 999.999"
      Read
      If LastKey()==27
         Return nil
      endif

      cUrl   := 'http://www.correios.com.br/encomendas/precos/calculo.cfm?cepOrigem='+;
                 Alltrim(cCepOrigem)+;
                 '&cepDestino='+;
                 Alltrim(cCepDestino)+;
                 '&peso='+StrZero(nPeso,11,3)

      cComando:= cUrl

       If VereficaNet( 'www.correios.com.br'  )==.f.
          Alert('Problema com o Site .....http://www.correios.com.br')
          Return Nil
       Endif

       Try
          oHttp := CreateObject("winhttp.winhttprequest.5.1")
          oHttp:Open("GET",cUrl,.f.)
          oHttp:Send()
          cResp1 := oHttp:ResponseText()
        Catch
          Return cResp
       End Try
       nPos := At('&Tarifa=',cResp1)
       nPos1 := At('&erro=',cResp1)

       cValor := Substr(cResp1,nPos+8,nPos1-1)
       Alert('Valor Encomenda :'+Transf(val(cValor),"@EZ 999,999.99") )
       *memoedit(cResp1)
       Centra(24,'')
Return ( Nil )


Function Centra(cLin,cMsg)
@ cLin,00 say Padc(cMsg,24)
Return nil

//----------------------------------------------
Function VereficaNet( cAddress )
LOCAL aHosts 
LOCAL cName
InetInit() 
IF cAddress == NIL 
   cAddress := "www.google.com.br" 
ENDIF 
aHosts := InetGetHosts( cAddress ) 
IF aHosts == NIL .or. len(aHosts)=0 
   InetCleanup() 
   RETURN .f. 
endif 
InetCleanup() 
RETURN (.T.)


Se servi, uso desta maneira para consulta valor do objeto.

Frazato

Re: Consulta cep ou endereço em WebService - xHarbour

Enviado: 21 Jul 2010 18:54
por João
Olá Frazato,

Compilei e deu erro:

xHarbour Compiler build 0.99.70 (SimpLex)
Copyright 1999-2006, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'CORREIOS.PRG'...

Lines 81, Functions/Procedures 3
Generating C source output to 'obj\CORREIOS.c'...
Done.

Building object module for 'obj\CORREIOS.c'
using C compiler 'BCC32' as defined in '\xHarbour\bin\harbour.cfg'...
Exec: BCC32 -c -D__EXPORT__ -I\xHarbour\include -d -L\xHarbour\lib -oobj\CORREIOS.obj obj\CORREIOS.c
Borland C++ 5.82 for Win32 Copyright (c) 1993, 2005 Borland
obj\CORREIOS.c:
Error E2209 \xHarbour\include\hbdefs.h 58: Unable to open include file 'stdarg.h'
Error E2209 \xHarbour\include\hbdefs.h 59: Unable to open include file 'stdio.h'
Error E2209 \xHarbour\include\hbdefs.h 60: Unable to open include file 'stdlib.h'
Error E2209 \xHarbour\include\hbdefs.h 61: Unable to open include file 'string.h'
Error E2257 \xHarbour\include\hbdefs.h 436: , expected
Error E2139 \xHarbour\include\hbvmpub.h 227: Declaration missing ;
Error E2451 obj\CORREIOS.c 47: Undefined symbol 'NULL'
Error E2141 obj\CORREIOS.c 47: Declaration syntax error
Error E2190 obj\CORREIOS.c 47: Unexpected }
Error E2040 obj\CORREIOS.c 47: Declaration terminated incorrectly
Error E2190 obj\CORREIOS.c 89: Unexpected }
Error E2109 obj\CORREIOS.c 89: Not an allowed type in function hb_vm_SymbolInit_CORREIOS
*** 12 errors in Compile ***
Done.
Deleting: "obj\CORREIOS.c"
Done.

Re: Resolvido

Enviado: 21 Jul 2010 21:16
por João
Resolví, erro de configuração do xHarbour.

Re: Consulta cep ou endereço em WebService - xHarbour

Enviado: 21 Jul 2010 22:45
por João
Isso interessou. Existe algum WebService para consulta do municipio (IBGE) e CEP ? Mão na roda para as NFe(s).

Re: Consulta cep ou endereço em WebService - xHarbour

Enviado: 22 Jul 2010 13:07
por asimoes
Aproveitando o código do Frazato,

A mesma consulta para harbour. Usando XMLHTTP

Código: Selecionar todos

#DEFINE CRLF chr(13)+chr(10)
#INCLUDE "FILEIO.CH"
#INCLUDE "HBCOMPAT.CH"

Function Main()
Local nDll , pApi
Local cCepOrigem := Space(9)
Local cCepDestino:= Space(9)
Local nPeso   := 0, cResp:=""

   Clear
   Set Color to 'ww/BB+'
   Clear
   @ 00,00 say padc('Consulta de Tarifa Via correio ',80) Color('R+/NN+')
   @ 01,00 say padc('Harbour 99.70',80) Color('GB+/NN+')

   @ 24,00 say padc('Joao Frazato ( sistema_jaf@hotmail.com)',80) Color('N/NN+')

   @ 10,10 say 'Nr. Cep Remetente :' Get cCepOrigem Pict "@R 99.999-999"
   @ 12,10 say 'Nr. Cep Destino :' Get cCepDestino Pict "@R 99.999-999"
   @ 14,10 say 'Peso       :' get nPeso Pict "@EZ 999.999"
   Read
   If LastKey()==27
      Return nil
   endif
   cUrl := 'http://www.correios.com.br/encomendas/precos/calculo.cfm?cepOrigem='+;
            Alltrim(cCepOrigem)+;
            '&cepDestino='+;
            Alltrim(cCepDestino)+;
            '&peso='+StrZero(nPeso,11,3)

   If VereficaNet( 'www.correios.com.br' )==.f.
      Alert('Problema com o Site .....http://www.correios.com.br')
      Return Nil
   Endif

   Try
      oPg := CreateObject("Microsoft.XMLHTTP")
      oPg:Open("GET",cUrl,.F.)
      oPg:Send()
      cResp1 := oPg:ResponseText
   Catch
      Return cResp
   End Try
   nPos := At('&Tarifa=',cResp1)
   nPos1 := At('&erro=',cResp1)
   cValor := Substr(cResp1,nPos+8,nPos1-1)
   Alert('Valor Encomenda :'+Transf(val(cValor),"@EZ 999,999.99") )
   //memoedit(cResp1)
   Centra(24,'')
Return ( Nil )


Function Centra(cLin,cMsg)
@ cLin,00 say Padc(cMsg,24)
Return nil

//----------------------------------------------
Function VereficaNet( cAddress )
LOCAL aHosts 
LOCAL cName
InetInit() 
IF cAddress == NIL 
 cAddress := "www.google.com.br" 
ENDIF 
aHosts := InetGetHosts( cAddress ) 
IF aHosts == NIL .or. len(aHosts)=0 
 InetCleanup() 
 RETURN .f. 
endif 
InetCleanup() 
RETURN (.T.)


Re: Consulta cep ou endereço em WebService - xHarbour

Enviado: 30 Ago 2010 22:25
por alxsts
Olá!
sygecom escreveu:Como o SOAP, foi oficialmente descontinuado pela Microsoft
Leonardo:
você confirma esta informação? Onde foi publicada? Quando?

Re: Consulta cep ou endereço em WebService - xHarbour

Enviado: 06 Set 2010 11:14
por sygecom
Olá Alexandre,
Veja no link abaixo:
http://msdn.microsoft.com/pt-br/library/aa286526.aspx
Ele foi aposentado, assim como o VFP foi também, mas ainda podemos usar por um longo tempo acredito eu, mas temos como uma boa opção o pocketSOAP:
http://www.pocketsoap.com/

Re: Consulta cep ou endereço em WebService - xHarbour

Enviado: 09 Set 2010 10:15
por alxsts
Olá!

Grato pela resposta Leonardo.

Agora entendi.
Não foi a tecnologia SOAP (Simple Object Access Protocol) que foi descontinuada e sim o Microsoft SOAP Toolkit, uma ferramenta para desenvolvimento de web services.

[Editado]
Foi descontinuada pois no Visual Studio .Net tem tudo que esta ferramenta oferece.

Re: Consulta cep ou endereço em WebService - xHarbour

Enviado: 07 Out 2010 23:43
por clodoaldomonteiro
Muito obrigado pela sua dica. Ajudou muito.

Uma dica:
Coloque no VALID do campo vCep_temp a chamada da função que valida o CEP e assim você pode preencher os campos: endereço, bairro, cidade e estado automaticamente, deixando que o usuário possa alterar ou confirmar o resultado nos próximos get's.

Uma observação:
Deu para acessar os resultados da pesquisa com o usuário: "usuario" e senha: "senha", mas ainda assim criei minha conta.

Consulta cep ou endereço em WebService - xHarbour

Enviado: 13 Set 2012 14:43
por hucf
Olá a todos,

A função de validação de CEP está sendo muito útil. Valeu SYGECOM !
Agora uma dúvida :
Após os comentários sobre como SOAP já é ultrapassado e os novos sistemas de 64 bits, existe alternativa mais "moderna" para validação de CEP ? Principalmente para dinossauros como eu que ainda usam XHarbour ...

Abraço
Hu

Consulta cep ou endereço em WebService - xHarbour

Enviado: 16 Set 2012 01:10
por sygecom
clodoaldomonteiro escreveu: Uma dica:
Coloque no VALID do campo vCep_temp a chamada da função que valida o CEP e assim você pode preencher os campos: endereço, bairro, cidade e estado automaticamente, deixando que o usuário possa alterar ou confirmar o resultado nos próximos get's.
Olá Clodoaldo,
Na verdade só montei o exemplo rapidinho em modo console, mas uso mesmo é Hwgui como visual gráfico.
Uma observação:
Deu para acessar os resultados da pesquisa com o usuário: "usuario" e senha: "senha", mas ainda assim criei minha conta.
É o certo é cada um criar seu usuário, para não ocupar esse usuário.

Olá Hu,
hucf escreveu: A função de validação de CEP está sendo muito útil. Valeu SYGECOM !
De nada.
Agora uma dúvida :
Após os comentários sobre como SOAP já é ultrapassado e os novos sistemas de 64 bits, existe alternativa mais "moderna" para validação de CEP ? Principalmente para dinossauros como eu que ainda usam XHarbour ...
Tem sim, é usando TipClientHttp(), tem que anexar a lib: TIP.LIB

Abaixo como estou usando com TipClientHttp():

Código: Selecionar todos

***************
FUNCTION MAIN()
***************
Local aRET := {}
Local cCEP_TEMP := space(8) , cEND_TEMP := space(50), cCID_TEMP := space(50), cUF_TEMP := space(2), cTIPO := space(1)

CLS

IF Inetestaconectada()=.F.
   alert("A Busca de Endereço pelo CEP é preciso acesso a Internet, Favor verificar sua Conexão")
   Return NIL
ENDIF

@ 02,02   SAY "CEP.....:"
@ 03,02   SAY "ENDERECO:"
@ 04,02   SAY "BAIRRO..:"
@ 05,02   SAY "CIDADE..:"
@ 06,02   SAY "UF......:"

@ 08,02   SAY "TIPO CONSULTA: 1=BUSCA PELO CEP 2=BUSCA APARTIR DO ENDERECO"

@ 02,11 GET cCEP_TEMP PICTURE "@R 99999-999"
@ 03,11 GET cEND_TEMP PICTURE "@!"
@ 05,11 GET cCID_TEMP PICTURE "@!"
@ 06,11 GET cUF_TEMP  PICTURE "!!"
@ 08,16 GET cTIPO     PICTURE "!"
READ

aRET:=BUSCA_CEP3(cTIPO,cCEP_TEMP,cEND_TEMP,cCID_TEMP,cUF_TEMP)
IF LEN(aRET) > 0
   @ 15,02   SAY "CEP.....:" + aRET[1]
   @ 16,02   SAY "ENDERECO:" + aRET[2]
   @ 17,02   SAY "BAIRRO..:" + aRET[3]
   @ 18,02   SAY "CIDADE..:" + aRET[4]
   @ 19,02   SAY "UF......:" + ALLTRIM(aRET[5])
ENDIF
Return Nil

**************************
STATIC FUNCTION BUSCA_CEP3(nR1_CEP,cCEP_TEMP,cEND_TEMP,cCID_TEMP,cUF_TEMP)
**************************
Local aRet := {}, oHttp
Local aRet3:= {}
LOCAL aTokens := {}
Local nMAXLEN := 0, nESCOLHA_CHOICE:=0
LOCAL I, lA1, cURL:="", cHtml:="", cRET:=''

IF STR(nR1_CEP,1)="1"
   if empty(cCEP_TEMP)
      alert("Obrigatorio informar o Cep, Favor Revisar")
      Return aRet
   endif
ELSE
   if empty(cEND_TEMP)
      alert("Obrigatorio informar o Endereço, Favor Revisar")
      Return aRet
   endif

   if empty(cCID_TEMP)
      alert("Obrigatorio informar o Municipio, Favor Revisar")
      Return aRet
   endif

   if empty(cUF_TEMP)
      alert("Obrigatorio informar a Unidade Federativa, Favor Revisar")
      Return aRet
   endif
ENDIF

/*
IF INETESTACONECTADA()=.F.
   alert('É necessário conexão com a internet para realizar esta pesquisa, verifique...')
   RETURN NIL
ENDIF
*/

IF STR(nR1_CEP,1)="1" // busca o endereço enviando o CEP por parametro
   cURL := "http://www.byjg.com.br/site/webservice.php/ws/cep?httpmethod=obterlogradouroauth&cep="+cCEP_TEMP+"&usuario=usuario&senha=senha"

   oHttp:=TipClientHttp():new( cURL )
   oHttp:open()
   cHtml := oHttp:readAll()
   oHttp:close()

   IF !EMPTY(cHtml)
      IF SUBSTR(UPPER(ALLTRIM(hb_UTF8ToStr(cHtml))),17) = "NÃO ENCONTRADO"

         alert("CEP não encontrado, favor revisar")
         Return aRet
      ENDIF
      AADD( aRet, cCEP_TEMP )
      aTokens := HB_ATokens( SUBSTR(cHtml,4), ",", .F., .F. )
      FOR i := 1 TO Len( aTokens )
         AADD( aRet, TIRAACENTO(UPPER(ALLTRIM(hb_UTF8ToStr(aTokens[i])))) )
      NEXT
   ENDIF
ELSE // busca o cep enviando o endereço por parametro
   cURL := STRTRAN("http://www.byjg.com.br/site/webservice.php/ws/cep?httpmethod=obtercepauth&logradouro="+LOWER(ALLTRIM(cEND_TEMP))+"&localidade="+LOWER(ALLTRIM(cCID_TEMP))+"&UF="+ALLTRIM(cUF_TEMP)+"&usuario=usuario&senha=senha"," ","%20")

   oHttp:=TipClientHttp():new( cURL )
   oHttp:open()
   cHtml := oHttp:readAll()
   oHttp:close()

   IF VALTYPE(cHtml)='C'
      IF LEN(cHtml) > 0
         IF SUBSTR(Upper(alltrim(hb_UTF8ToStr(cHtml))),6) # "LOGRADOURO NÃO ENCONTRADO"
            IF LEN(cHtml) > 0
               aRet3=HB_ATokens( SUBSTR(hb_UTF8ToStr(cHtml),6), "|")

               IF LEN(aRet3) > 0
                  IF aRET3[1,1] = ""
                     ADEL(aRET3,1,.T.)
                  ENDIF
                  AEVAL(aRet3, {|cV,nV| IF( LEN( aRet3[nV] ) > nMAXLEN,nMAXLEN := LEN( aRet3[nV] ), NIL ) })

	                 nESCOLHA_CHOICE := ACHOICE(10,1,nMAXLEN,70,aret3,.T.,,nESCOLHA_CHOICE)
                  IF nESCOLHA_CHOICE > 0
                     aTokens := HB_ATokens( aret3[nESCOLHA_CHOICE], ",", .F., .F. )
                     FOR i := 1 TO Len( aTokens )
                        AADD( aRet, UPPER(ALLTRIM(TiraAcento(aTokens[i]))) )
                     NEXT
                  ENDIF
               ENDIF
            ENDIF
         ELSE
            alert("Logradouro Não Localizado, Favor não informar abreviaturas como (AV.),(TRAV.) ou (ROD.)" + HB_OsNewLine() + ;
                    "ou tente buscar pelo nome apenas sem (AVENIDA), (RUA), (RODOVIA) e etc..., Favor Revisar")
         ENDIF
      ENDIF
   ENDIF
ENDIF

IF len(aRet) = 0
   alert('Nenhum Resultado encontrado')
ELSE
   IF len(aRet) < 5
      cRET="Cep Não localizado - "+HB_OsNewLine()
      FOR lA1 := 1 TO Len(aRET)
          cRET=cRET+aRET[lA1]+HB_OsNewLine()
      NEXT
      alert(cRET)
      aRet:={}
   ENDIF
ENDIF
Return aRet

**************************************
Function inetestaconectada( cAddress )
**************************************
LOCAL aHosts
LOCAL cName
InetInit()
IF cAddress == NIL
   cAddress := "www.google.com.br"
ENDIF
aHosts := InetGetHosts( cAddress )
IF aHosts == NIL .or. len(aHosts)=0
   InetCleanup()
   RETURN .f.
endif
InetCleanup()
RETURN .t.
Boa sorte...