Jump to content
Fivewin Brasil

Busca CEP infalível


mkyx

Recommended Posts

ccep := BuscaCEP():New(aGetCli.cep)

aGetCli.endereco := LEFT(RemoverAcentos(ccep:GetTipo() + " " + ccep:GetLogradouro())+SPACE(40),40)

aGetCli.bairro := LEFT(RemoverAcentos(ccep:GetBairro())+SPACE(15),15)

aGetCli.cidade := UPPER(LEFT(RemoverAcentos(ccep:GetCidade())+SPACE(60),60))

aGetCli.estado := LEFT(ccep:GetUF()+SPACE(02),02)

class BuscaCEP

private:

data cLogradouro init ""

data cBairro init ""

data cCidade init ""

data cTipo init ""

data cCep init ""

data cUF init ""

data cSrvResp init ""

public:

method new(cep) constructor

method busca(cep)

inline method GetLogradouro()

return ::cLogradouro

endmethod

inline method GetBairro()

return ::cBairro

endmethod

inline method GetCidade()

return ::cCidade

endmethod

inline method GetTipo()

return ::cTipo

endmethod

inline method GetUF()

return ::cUF

endmethod

inline method GetSrvSts()

return ::cSrvResp

endmethod

endclass

method new(cep) class BuscaCEP

if cep != nil

::cCep := cep

else

::cCep := "99999999"

endif

::busca()

return self

method busca(cep) class BuscaCEP

local oHttp, cXML

local oDoc, oIterator

if cep != nil

::cCep := cep

endif

oHttp:= TIpClientHttp():new( "http://cep.republicavirtual.com.br/web_cep.php?cep=]http://cep.republicavirtual.com.br/web_cep.php?cep=]http://cep.republicavirtual.com.br/web_cep.php?cep="+::cCep+"&formato=xml")

//"http ://cep.republicavirtual.com.br/web_cep.php?cep="+::cCep+"&formato=xml"

oHttp:open()

cXML := oHttp:readAll()

oHttp:close()

oDoc := TXmlDocument():New(cXML, HBXML_STYLE_NOESCAPE)

if oDoc:nError != HBXML_ERROR_NONE

? "Erro ao ler o XML dos correios"

endif

TRY

oIterator := TXmlIterator():New( oDoc:findfirst( "webservicecep" ) )

if oIterator:Next():cData == "1"

::cSrvResp := oIterator:Next():cData

::cUF := oIterator:Next():cData

::cCidade := oIterator:Next():cData

::cBairro := oIterator:Next():cData

::cTipo := oIterator:Next():cData

::cLogradouro := oIterator:Next():cData

else

// ? "ERRO :("

endif

CATCH

END

CursorArrow()

return nil

Link to comment
Share on other sites

  • 1 month later...

Ola, boa noite

Creio que a melhor opção para voce usar vai ser a:

PIPED

cep:01001-000|logradouro:Praça da Sé|complemento:lado ímpar|
bairro:Sé|localidade:São Paulo|uf:SP|ibge:3550308

pois desta forma voce pode colocar os PIPE "|" em um array com o HB_ATOKENS da seguinte forma

aRetorno := HB_aTokens( cRetorno_Url, "|" )

Desta forma fica facil de voce pegar os retornos onde:

aRetorno[1] = "cep:01001-000"

aRetorno[2] = "logradouro:Praça da Sé"

...

E assim por diante, bem pratico mesmo

Espero ter ajudado.

Link to comment
Share on other sites

usando xml:

function FindCEP( cCep, ccepa, oJan, dEnd, dBai, dCid, dEst)
Local oPg, cBuf, tmp, aRet := array(7)
aFill(aRet,'')
cbuf :=space(255)
xcep := (cCep)
  mcepa  = alltrim(tiratraco(ccepa))
  mcepx  = alltrim(xcep)
  *
  If Empty(xCep) .Or. Len(AllTrim(xCep)) <= 1
    MsgGet( "É Preciso Digitar o Cep","CEP",@xCEP,,"CEP")
    xCep := (xCep)
    mcepx  = alltrim(xcep)
      End
  *
  *if mcepx <> mcepa
  *if mcepx <> "00000000"  
if internet_ok("www.terra.com.br",80)
  if xCep <> "00000000"
       oPg := CreateObject("Microsoft.XMLHTTP") 
xComando := "https://viacep.com.br/ws/" + xCEP + "/xml"
oPg:Open("GET",xComando,.f.)
        oPg:Send()            
         cBuf := oPg:responseBody
         if .f. // rtrim(substr(cBuf, at('<resultado_txt>', cBuf)+15, 7)) <> "sucesso"
            MsgInfo("CEP não encontrado, favor verificar....","Busca")
          cBuf = space(255)
           return .t.
         endif
     endif       
*
mestado  := AllTrim((substr(cBuf, at('<uf>', cBuf) + 4, 2)))
mCidade  := AllTrim((substr(cBuf, at('<localidade>', cBuf) + 12, at('</localidade>', cBuf) - (at('<localidade>', cBuf) + 12))))
mxBairro := AllTrim((substr(cBuf, at('<bairro>', cBuf) + 8, at('</bairro>', cBuf) - (at('<bairro>', cBuf) + 8))))
mxEndere := AllTrim((substr(cBuf, at('<tipo_logradouro>', cBuf) + 17, at('</tipo_logradouro>', cBuf) - (at('<tipo_logradouro>', cBuf) + 17))))
mxendere += " "+((substr(cBuf, at('<logradouro>', cBuf) + 12, at('</logradouro>', cBuf) - (at('<logradouro>', cBuf) + 12))))
*
mxBairro := HB_OemToAnsi( HB_UTF8ToStr( mxBairro ))
mxEndere := AllTrim( HB_OemToAnsi( HB_UTF8ToStr( mxEndere )) )
mCidade  := HB_OemToAnsi( HB_UTF8ToStr( mCidade ))
*
if empty(mxEndere)
              if MsgYesNo("Cidade sem Logradouro nos Correios, Confirma troca ?") 
mEndere := mxendere
mBairro := mxBairro
Else
Return .f.
endif                
else
  mEndere := mxendere
  mBairro := mxBairro 
endif
               mCod_cidade := upper((substr(cBuf,at('<ibge_municipio_verificador>', cBuf) + 28, 07)))
               mIbgeUF  := upper((substr(cBuf, at('<ibge_uf>', cBuf)+ 9, 02))) 
*
dEnd  := Substr(mEndere+space(40),1,40)
dBai := Substr(mBairro+space(30),1,40)
dCid := Substr(mCidade+space(50),1,50) 
dEst := Substr(mestado+space(2),1,2)
dCep := SubStr(xCep,1) // ,5)+"-"+SubStr(xCep,6)
*
oJan:Update()
oJan:Display()
SysRefresh()
     endif
     *endif
      *endif
return .t.
 
Link to comment
Share on other sites

Theotokos, completa aqui pra mim. Como eu tiro esse acento do São Paulo?

sTB8FFc.png

#include "FiveWin.ch"
 
static oJan
 
//----------------------------------------------------------------//
 
function Main()
 
   local oBar, cCep, ccepa, dEnd, dBai, dCid, dEst
 
   cCep  := "01313-000"
   ccepa := "01313000" //??? sem traco
   //oJan  := oWnd     //???
   dEnd  := SPACE(40)
   dBai  := SPACE(20)
   dCid  := SPACE(20)
   dEst  := SPACE(02)
 
   DEFINE WINDOW oJan TITLE "Find Cep"
 
   DEFINE BUTTONBAR oBar _3D OF oJan
 
   DEFINE BUTTON OF oBar ;
          ACTION FindCEP( cCep, ccepa, oJan, dEnd, dBai, dCid, dEst )
 
   SET MESSAGE OF oJan TO "Find Cep" NOINSET CLOCK DATE KEYBOARD
 
   ACTIVATE WINDOW oJan
 
return nil
 
 
function FindCEP( cCep, ccepa, oJan, dEnd, dBai, dCid, dEst )
 
   Local oPg, cBuf, tmp, aRet := array(7)
   Local xCep, mcepx, xComando
   Local mestado, mCidade, mxBairro, mxEndere
   LOCAL MENDERE, MBAIRRO, MCOD_CIDADE, MIBGEUF, DCEP
 
   aFill(aRet,'')
 
   cbuf :=space(255)
 
   xcep := (cCep)
 
   //? cCepa
 
   //mcepa  = alltrim(tiratraco(ccepa))  // cade a funcao
 
   mcepx  = alltrim(xcep)
 
   If Empty(xCep) .Or. Len(AllTrim(xCep)) <= 1
      MsgGet( "É Preciso Digitar o Cep","CEP",@xCEP,,"CEP")
      xCep := (xCep)
      mcepx  = alltrim(xcep)
   End
 
   //if internet_ok("www.terra.com.br",80)  // cade a funcao??
 
   IF ISINTERNET()
 
      if xCep <> "00000000"
 
         oPg := CreateObject("Microsoft.XMLHTTP")
 
         xComando := "https://viacep.com.br/ws/" + xCEP + "/xml"
 
         oPg:Open("GET",xComando,.f.)
 
         oPg:Send()
 
         cBuf := oPg:responseBody
 
         if .f. // rtrim(substr(cBuf, at('<resultado_txt>', cBuf)+15, 7)) <> "sucesso"
 
            MsgInfo("CEP não encontrado, favor verificar....","Busca")
 
            cBuf = space(255)
 
            return .t.
 
         endif
 
      endif
 
      mestado  := AllTrim((substr(cBuf, at('<uf>', cBuf) + 4, 2)))
      mCidade  := AllTrim((substr(cBuf, at('<localidade>', cBuf) + 12, at('</localidade>', cBuf) - (at('<localidade>', cBuf) + 12))))
      mxBairro := AllTrim((substr(cBuf, at('<bairro>', cBuf) + 8, at('</bairro>', cBuf) - (at('<bairro>', cBuf) + 8))))
      mxEndere := AllTrim((substr(cBuf, at('<tipo_logradouro>', cBuf) + 17, at('</tipo_logradouro>', cBuf) - (at('<tipo_logradouro>', cBuf) + 17))))
      mxendere += " "+((substr(cBuf, at('<logradouro>', cBuf) + 12, at('</logradouro>', cBuf) - (at('<logradouro>', cBuf) + 12))))
 
      mxBairro := HB_OemToAnsi( HB_UTF8ToStr( mxBairro ))
      mxEndere := AllTrim( HB_OemToAnsi( HB_UTF8ToStr( mxEndere )) )
      mCidade  := HB_OemToAnsi( HB_UTF8ToStr( mCidade ))
 
      if empty(mxEndere)
 
         if MsgYesNo("Cidade sem Logradouro nos Correios, Confirma troca ?")
 
            mEndere := mxendere
            mBairro := mxBairro
 
         Else
 
            Return .f.
 
         endif
 
      else
 
         mEndere := mxendere
         mBairro := mxBairro
 
      endif
 
      mCod_cidade := upper((substr(cBuf,at('<ibge_municipio_verificador>', cBuf) + 28, 07)))
      mIbgeUF  := upper((substr(cBuf, at('<ibge_uf>', cBuf)+ 9, 02)))
 
      dEnd := Substr(mEndere+space(40),1,40)
      dBai := Substr(mBairro+space(30),1,40)
      dCid := Substr(mCidade+space(50),1,50)
      dEst := Substr(mestado+space(2),1,2)
      dCep := SubStr(xCep,1) // ,5)+"-"+SubStr(xCep,6)
 
      ? dEnd, dBai, dCid, dEst, dCep
 
      oJan:Update()
      // oJan:Display() //??? Nao entendi... O que faz isso? Quebrou.
 
      //SysRefresh() // Porque? Tem algum looping aqui?
 
   endif
 
return .t.
 
function tiratraco(ccepa)  // cade a funcao?
 
return nil
abs
Link to comment
Share on other sites

Nem assim tira a acentuação...



#include "FiveWin.ch"

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PTISO
REQUEST HB_CODEPAGE_PT850

static oJan

//----------------------------------------------------------------//

function Main()

local oBar, cCep, ccepa, dEnd, dBai, dCid, dEst

HB_LANGSELECT("PT")
HB_SETCODEPAGE( "PT850" )
HB_SETCODEPAGE("PTISO")

cCep := "01313-000"
ccepa := "01313000" //??? sem traco
//oJan := oWnd //???
dEnd := SPACE(40)
dBai := SPACE(20)
dCid := SPACE(20)
dEst := SPACE(02)

DEFINE WINDOW oJan TITLE "Find Cep"

DEFINE BUTTONBAR oBar _3D OF oJan

DEFINE BUTTON OF oBar ;
ACTION FindCEP( cCep, ccepa, oJan, dEnd, dBai, dCid, dEst )

SET MESSAGE OF oJan TO "Find Cep" NOINSET CLOCK DATE KEYBOARD

ACTIVATE WINDOW oJan

return nil


function FindCEP( cCep, ccepa, oJan, dEnd, dBai, dCid, dEst )

Local oPg, cBuf, tmp, aRet := array(7)
Local xCep, mcepx, xComando
Local mestado, mCidade, mxBairro, mxEndere
LOCAL MENDERE, MBAIRRO, MCOD_CIDADE, MIBGEUF, DCEP

aFill(aRet,'')

cbuf :=space(255)

xcep := (cCep)

//? cCepa

//mcepa = alltrim(tiratraco(ccepa)) // cade a funcao

mcepx = alltrim(xcep)

If Empty(xCep) .Or. Len(AllTrim(xCep)) <= 1
MsgGet( "É Preciso Digitar o Cep","CEP",@xCEP,,"CEP")
xCep := (xCep)
mcepx = alltrim(xcep)
End

//if internet_ok("www.terra.com.br",80) // cade a funcao??

IF ISINTERNET()

if xCep <> "00000000"

oPg := CreateObject("Microsoft.XMLHTTP")

xComando := "https://viacep.com.br/ws/" + xCEP + "/xml"

oPg:Open("GET",xComando,.f.)

oPg:Send()

cBuf := oPg:responseBody

if .f. // rtrim(substr(cBuf, at('<resultado_txt>', cBuf)+15, 7)) <> "sucesso"

MsgInfo("CEP não encontrado, favor verificar....","Busca")

cBuf = space(255)

return .t.

endif

endif

mestado := AllTrim((substr(cBuf, at('<uf>', cBuf) + 4, 2)))
mCidade := AllTrim((substr(cBuf, at('<localidade>', cBuf) + 12, at('</localidade>', cBuf) - (at('<localidade>', cBuf) + 12))))
mxBairro := AllTrim((substr(cBuf, at('<bairro>', cBuf) + 8, at('</bairro>', cBuf) - (at('<bairro>', cBuf) + 8))))
mxEndere := AllTrim((substr(cBuf, at('<tipo_logradouro>', cBuf) + 17, at('</tipo_logradouro>', cBuf) - (at('<tipo_logradouro>', cBuf) + 17))))
mxendere += " "+((substr(cBuf, at('<logradouro>', cBuf) + 12, at('</logradouro>', cBuf) - (at('<logradouro>', cBuf) + 12))))

mxBairro := HB_OemToAnsi( HB_UTF8ToStr( mxBairro ))
mxEndere := AllTrim( HB_OemToAnsi( HB_UTF8ToStr( mxEndere )) )
mCidade := HB_OemToAnsi( HB_UTF8ToStr( mCidade ), ,"PTISO" )

// ? mCidade

if empty(mxEndere)

if MsgYesNo("Cidade sem Logradouro nos Correios, Confirma troca ?")

mEndere := mxendere
mBairro := mxBairro

Else

Return .f.

endif

else

mEndere := mxendere
mBairro := mxBairro

endif

mCod_cidade := upper((substr(cBuf,at('<ibge_municipio_verificador>', cBuf) + 28, 07)))
mIbgeUF := upper((substr(cBuf, at('<ibge_uf>', cBuf)+ 9, 02)))

dEnd := Substr(mEndere+space(40),1,40)
dBai := Substr(mBairro+space(30),1,40)

//dCid := Substr(mCidade+space(50),1,50)
//dCid := HB_UTF8TOSTR( Substr(mCidade+space(50),1,50),"PTISO" )

dCid := TIRA_ACENTUACAO( mCidade )

dEst := Substr(mestado+space(2),1,2)
dCep := SubStr(xCep,1) // ,5)+"-"+SubStr(xCep,6)

? dEnd, dBai, dCid, dEst, dCep

oJan:Update()
// oJan:Display() //??? Nao entedi...

//SysRefresh() // Porque? Tem algum looping aqui?

endif

return .t.

function tiratraco(ccepa) // cade a funcao?

return nil

FUNCTION TIRA_ACENTUACAO( cStr )

local cStrNew := "", nX

cAcentos := {"—","ƒ","Æ","Ç"," ","µ","…","·","‚","É","ê","ˆ","","Ò","í","Í","ó","¢","à","ä","å","“","â","ú","é","","š","ç","€","ã","Ã","á","Á","à","À","é","É","ê","Ê","í","Í","ó","Ó","õ","Õ","ô","Ô","ú","Ú","ü","Ü","ç","ù","AAO","§","¦","º","ª","€","‡","Ç","ç","'","`","ø","¡","Þ","×","Ø", chr(239)}

cLetras := {"U","A","A","A","A","A","A","A","E","E","E","E","E","E","I","I","O","O","O","O","O","O","O","U","U","U","U","C","C","A","A","A","A","A","A","E","E","E","E","I","I","O","O","O","O","O","O","U","U","U","U","C"," ","CAO",".",".",".",".","C","C","C","C","" ,"" ,".","I","I","I","I", "" }

For nX := 1 TO LEN(cAcentos)

cStrNew := StrTran(cStr, cAcentos[nX], cLetras[nX])
cStr := cStrNew

Next

Return( cStrNew )


Link to comment
Share on other sites

Nem assim tira a acentuação...
#include "FiveWin.ch"
 
REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PTISO
REQUEST HB_CODEPAGE_PT850
 
static oJan
 
//----------------------------------------------------------------//
 
function Main()
 
   local oBar, cCep, ccepa, dEnd, dBai, dCid, dEst
 
   HB_LANGSELECT("PT")
   HB_SETCODEPAGE( "PT850" )
   HB_SETCODEPAGE("PTISO")
 
   cCep  := "01313-000"
   ccepa := "01313000" //??? sem traco
   //oJan  := oWnd     //???
   dEnd  := SPACE(40)
   dBai  := SPACE(20)
   dCid  := SPACE(20)
   dEst  := SPACE(02)
 
   DEFINE WINDOW oJan TITLE "Find Cep"
 
   DEFINE BUTTONBAR oBar _3D OF oJan
 
   DEFINE BUTTON OF oBar ;
          ACTION FindCEP( cCep, ccepa, oJan, dEnd, dBai, dCid, dEst )
 
   SET MESSAGE OF oJan TO "Find Cep" NOINSET CLOCK DATE KEYBOARD
 
   ACTIVATE WINDOW oJan
 
return nil
 
 
function FindCEP( cCep, ccepa, oJan, dEnd, dBai, dCid, dEst )
 
   Local oPg, cBuf, tmp, aRet := array(7)
   Local xCep, mcepx, xComando
   Local mestado, mCidade, mxBairro, mxEndere
   LOCAL MENDERE, MBAIRRO, MCOD_CIDADE, MIBGEUF, DCEP
 
   aFill(aRet,'')
 
   cbuf :=space(255)
 
   xcep := (cCep)
 
   //? cCepa
 
   //mcepa  = alltrim(tiratraco(ccepa))  // cade a funcao
 
   mcepx  = alltrim(xcep)
 
   If Empty(xCep) .Or. Len(AllTrim(xCep)) <= 1
      MsgGet( "É Preciso Digitar o Cep","CEP",@xCEP,,"CEP")
      xCep := (xCep)
      mcepx  = alltrim(xcep)
   End
 
   //if internet_ok("www.terra.com.br",80)  // cade a funcao??
 
   IF ISINTERNET()
 
      if xCep <> "00000000"
 
         oPg := CreateObject("Microsoft.XMLHTTP")
 
         xComando := "https://viacep.com.br/ws/" + xCEP + "/xml"
 
         oPg:Open("GET",xComando,.f.)
 
         oPg:Send()
 
         cBuf := oPg:responseBody
 
         if .f. // rtrim(substr(cBuf, at('<resultado_txt>', cBuf)+15, 7)) <> "sucesso"
 
            MsgInfo("CEP não encontrado, favor verificar....","Busca")
 
            cBuf = space(255)
 
            return .t.
 
         endif
 
      endif
 
      mestado  := AllTrim((substr(cBuf, at('<uf>', cBuf) + 4, 2)))
      mCidade  := AllTrim((substr(cBuf, at('<localidade>', cBuf) + 12, at('</localidade>', cBuf) - (at('<localidade>', cBuf) + 12))))
      mxBairro := AllTrim((substr(cBuf, at('<bairro>', cBuf) + 8, at('</bairro>', cBuf) - (at('<bairro>', cBuf) + 8))))
      mxEndere := AllTrim((substr(cBuf, at('<tipo_logradouro>', cBuf) + 17, at('</tipo_logradouro>', cBuf) - (at('<tipo_logradouro>', cBuf) + 17))))
      mxendere += " "+((substr(cBuf, at('<logradouro>', cBuf) + 12, at('</logradouro>', cBuf) - (at('<logradouro>', cBuf) + 12))))
 
      mxBairro := HB_OemToAnsi( HB_UTF8ToStr( mxBairro ))
      mxEndere := AllTrim( HB_OemToAnsi( HB_UTF8ToStr( mxEndere )) )
      mCidade  := HB_OemToAnsi( HB_UTF8ToStr( mCidade ), ,"PTISO" )
 
      // ? mCidade
 
      if empty(mxEndere)
 
         if MsgYesNo("Cidade sem Logradouro nos Correios, Confirma troca ?")
 
            mEndere := mxendere
            mBairro := mxBairro
 
         Else
 
            Return .f.
 
         endif
 
      else
 
         mEndere := mxendere
         mBairro := mxBairro
 
      endif
 
      mCod_cidade := upper((substr(cBuf,at('<ibge_municipio_verificador>', cBuf) + 28, 07)))
      mIbgeUF  := upper((substr(cBuf, at('<ibge_uf>', cBuf)+ 9, 02)))
 
      dEnd := Substr(mEndere+space(40),1,40)
      dBai := Substr(mBairro+space(30),1,40)
 
      //dCid := Substr(mCidade+space(50),1,50)
      //dCid := HB_UTF8TOSTR( Substr(mCidade+space(50),1,50),"PTISO" )
 
      dCid := TIRA_ACENTUACAO( mCidade )
 
      dEst := Substr(mestado+space(2),1,2)
      dCep := SubStr(xCep,1) // ,5)+"-"+SubStr(xCep,6)
 
      ? dEnd, dBai, dCid, dEst, dCep
 
      oJan:Update()
      // oJan:Display() //??? Nao entedi...
 
      //SysRefresh() // Porque? Tem algum looping aqui?
 
   endif
 
return .t.
 
function tiratraco(ccepa)  // cade a funcao?
 
return nil
 
FUNCTION TIRA_ACENTUACAO( cStr )
 
   local cStrNew := "", nX
 
   cAcentos := {"—","ƒ","Æ","Ç"," ","µ","…","·","‚","É","ê","ˆ","","Ò","í","Í","ó","¢","à","ä","å","“","â","ú","é","","š","ç","€","ã","Ã","á","Á","à","À","é","É","ê","Ê","í","Í","ó","Ó","õ","Õ","ô","Ô","ú","Ú","ü","Ü","ç","ù","AAO","§","¦","º","ª","€","‡","Ç","ç","'","`","ø","¡","Þ","×","Ø", chr(239)}
 
   cLetras  := {"U","A","A","A","A","A","A","A","E","E","E","E","E","E","I","I","O","O","O","O","O","O","O","U","U","U","U","C","C","A","A","A","A","A","A","E","E","E","E","I","I","O","O","O","O","O","O","U","U","U","U","C"," ","CAO",".",".",".",".","C","C","C","C","" ,"" ,".","I","I","I","I",    ""   }
 
   For nX := 1 TO LEN(cAcentos)
 
      cStrNew := StrTran(cStr, cAcentos[nX], cLetras[nX])
      cStr := cStrNew
 
   Next
 
Return( cStrNew )

mCidade := AllTrim((substr(cBuf, at('<localidade>', cBuf) + 12, at('</localidade>', cBuf) - (at('<localidade>', cBuf) + 12))))

Seria assim

mCidade := HB_UTF8ToStr( mCidade , "PTISO" )

Link to comment
Share on other sites

Resolvido:

IN86GvH.png

#include "FiveWin.ch"
 
REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PTISO
REQUEST HB_CODEPAGE_PT850
 
static oJan
 
//----------------------------------------------------------------//
 
function Main()
 
   local oBar, cCep, ccepa, dEnd, dBai, dCid, dEst
 
   HB_LANGSELECT("PT")
   HB_SETCODEPAGE( "PT850" )
   HB_SETCODEPAGE("PTISO")
 
   cCep  := "01313-000"
   ccepa := "01313-000" //??? sem traco
   //oJan  := oWnd     //???
   dEnd  := SPACE(50)
   dBai  := SPACE(30)
   dCid  := SPACE(30)
   dEst  := SPACE(02)
 
   DEFINE WINDOW oJan TITLE "Find Cep"
 
   DEFINE BUTTONBAR oBar _3D OF oJan
 
   DEFINE BUTTON OF oBar ;
          ACTION FindCEP( cCep, ccepa, oJan, dEnd, dBai, dCid, dEst )
 
   SET MESSAGE OF oJan TO "Find Cep" NOINSET CLOCK DATE KEYBOARD
 
   ACTIVATE WINDOW oJan
 
return nil
 
 
function FindCEP( cCep, ccepa, oJan, dEnd, dBai, dCid, dEst )
 
   Local oPg, cBuf, tmp, aRet := array(7)
   Local xCep, mcepx, xComando, mcepa
   Local mestado, mCidade, mxBairro, mxEndere
   LOCAL MENDERE, MBAIRRO, MCOD_CIDADE, MIBGEUF, DCEP
 
   aFill(aRet,'')
 
   cbuf :=space(255)
 
   xcep := (cCep)
 
   mcepa = alltrim(tiratraco(ccepa))  // cade a funcao
 
   mcepx  = alltrim(xcep)
 
   If Empty(xCep) .Or. Len(AllTrim(xCep)) <= 1
 
      MsgGet( "É Preciso Digitar o Cep","CEP",@xCEP,,"CEP")
 
      xCep := (xCep)
 
      mcepx  = alltrim(xcep)
 
   End
 
   //if internet_ok("www.terra.com.br",80)  // cade a funcao??
 
   IF ISINTERNET()
 
      if xCep <> "00000000"
 
         oPg := CreateObject("Microsoft.XMLHTTP")
 
         xComando := "https://viacep.com.br/ws/" + xCEP + "/xml"
 
         oPg:Open("GET",xComando,.f.)
 
         oPg:Send()
 
         cBuf := oPg:responseBody
 
         if .f. // rtrim(substr(cBuf, at('<resultado_txt>', cBuf)+15, 7)) <> "sucesso"
 
            MsgInfo("CEP não encontrado, favor verificar....","Busca")
 
            cBuf = space(255)
 
            return .t.
 
         endif
 
      endif
 
      mestado  := AllTrim((substr(cBuf, at('<uf>', cBuf) + 4, 2)))
 
      mCidade  := AllTrim((substr(cBuf, at('<localidade>', cBuf) + 12, at('</localidade>', cBuf) - (at('<localidade>', cBuf) + 12))))
 
      mxBairro := AllTrim((substr(cBuf, at('<bairro>', cBuf) + 8, at('</bairro>', cBuf) - (at('<bairro>', cBuf) + 8))))
 
      mxEndere := AllTrim((substr(cBuf, at('<tipo_logradouro>', cBuf) + 17, at('</tipo_logradouro>', cBuf) - (at('<tipo_logradouro>', cBuf) + 17))))
 
      mxendere += " "+((substr(cBuf, at('<logradouro>', cBuf) + 12, at('</logradouro>', cBuf) - (at('<logradouro>', cBuf) + 12))))
 
      mxBairro := HB_OemToAnsi( HB_UTF8ToStr( mxBairro ))
 
      mxEndere := AllTrim( HB_OemToAnsi( HB_UTF8ToStr( mxEndere )) )
 
      // mCidade  := HB_OemToAnsi( HB_UTF8ToStr( mCidade ), ,"PTISO" )
      // mCidade  := HB_OemToAnsi( HB_UTF8ToStr( mCidade ))
      mCidade  := HB_UTF8ToStr( mCidade )
 
      if empty(mxEndere)
 
         if MsgYesNo("Cidade sem Logradouro nos Correios, Confirma troca ?")
 
            mEndere := mxendere
            mBairro := mxBairro
 
         Else
 
            Return .f.
 
         endif
 
      else
 
         mEndere := mxendere
         mBairro := mxBairro
 
      endif
 
      mCod_cidade := upper((substr(cBuf,at('<ibge_municipio_verificador>', cBuf) + 28, 07)))
      mIbgeUF  := upper((substr(cBuf, at('<ibge_uf>', cBuf)+ 9, 02)))
 
      dEnd := Substr(mEndere+space(40),1,40)
      dBai := Substr(mBairro+space(30),1,40)
 
      dCid := Substr(mCidade+space(50),1,50)
      //dCid := HB_UTF8TOSTR( Substr(mCidade+space(50),1,50),"PTISO" )
 
 
      dEst := Substr(mestado+space(2),1,2)
      dCep := SubStr(xCep,1) // ,5)+"-"+SubStr(xCep,6)
 
      ? dEnd, dBai, dCid, dEst, dCep
 
      oJan:Update()
 
      // oJan:Display() // ??? Nao entedi...
 
      // SysRefresh()   // Porque? Tem algum looping aqui?
 
   endif
 
return .t.
 
Function TiraTraco(xStr)
 
   xStr := StrTran(xStr,"-","")
 
Return(xStr)
Obg. abs.
Link to comment
Share on other sites

Olá João.

Só peguei a sua função, copiei e colei, e continua mostrando caracteres errados na cidade.

Tente com um cep aqui de ribeirão: 14056-701, veja se retorna Ribeirão Preto corretamente por favor.

Beto.

Ps.: Testando agora, fiz assim e funcionou: mCidade := HB_OemToAnsi( HB_UTF8ToStr( mCidade ))

Vlw

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...