Página 2 de 5

Consultar e Importar Cep da Internet para o Sistema.

Enviado: 31 Dez 2016 08:37
por Marcos
Obrigado ao JoséQuintas e a todos que me ajudaram, especialmente ao Toledo que me enviou a Função Funcional, Feliz 2017 a todos do fórum e não sei o que seriamos de nós sem este canal de ajuda mútua.

Abraços e feliz Ano Novo!!!

Consultar e Importar Cep da Internet para o Sistema.

Enviado: 31 Dez 2016 08:41
por Marcos
JoséQuintas no meu caso estou usando a versão 16.10 da Minigui, esta versão Eu adquiri num pacote com outros programas já pronto para aprendizado.
Abraços,

Consultar e Importar Cep da Internet para o Sistema.

Enviado: 31 Dez 2016 09:28
por Toledo
JoséQuintas escreveu:Dá pra gerar a minigui que foi usada nesse exemplo com Harbour 3.4?
Amigo, neste exemplo que passei, compilei com a MiniGui Extended. E com ela, tem como usar o Harbour 3.4, para isto basta compilar as LIBs da MiniGui novamente com a versão do Harbour que você deseja. Mas lembrando, a MiniGui Extended usa o Borland BCC como compilador, então o ideal é usar a mesma versão do BCC que foi utilizada para compilar as LIBs do seu Harbour.

Então, como compilar:

1 - na pasta \BATCH da MiniGui, procure o arquivo MakeLibOpt.bat, editar este arquivo e procurar por :PARPARSE, inserir na linha seguinte:

SET MG_BCC=c:\Borland\BCC55
SET MG_HRB=c:\Harbour34

Obs.: informe nas variáveis acima a localização do seu BCC e do seu Harbour e salve/feche o arquivo.

2 - entre na pasta \SOURCE da MiniGui e execute o arquivo MakeAllMiniguiLibs.bat.

Ai é só esperar concluir a compilação das LIBs da MiniGui.

3 - na pasta \BATCH da MiniGui, procure o arquivo Compile.bat, editar este arquivo e procurar por :PARPARSE, inserir na linha seguinte:

SET MG_BCC=c:\Borland\BCC55
SET MG_HRB=c:\Harbour34

Obs.: informe nas variáveis acima a localização do seu BCC e do seu Harbour e salve/feche o arquivo.

4 - Execute a IDE da MiniGui (c:\minigui\IDE) e escolha a opção "Tools" e "Preferences" e informe a pasta do BCC e Harbour que você está usando.

Pronto, a MiniGui já está configurada para a sua versão do Harbour.

Abraços,

Consultar e Importar Cep da Internet para o Sistema.

Enviado: 02 Jan 2017 20:56
por Nascimento
Toledo eu sempre usei a minigui extended, com o mingw apanhei no começo mais depois peguei o jeito agora , no real queria saber qual a diferença entre os 2 compiladores
que ate hj nao entendo porque é uma confusão , o harbour usa o mingw como padrão ja a minigui extended usa o bcc

eu queria entender a diferenças entre os 2 e quais dos 2 são melhores? pq percebi que o bcc gera binarios menores
é so uma grande duvida que sempre tive

OBS: caso seja caracterizado desvio de assunto pode mudar o post de lugar

Att: Nascimento

Consultar e Importar Cep da Internet para o Sistema.

Enviado: 03 Jan 2017 11:33
por Softwhouse
Olá,

O que é necessário linkar para usar a essa função ?

Win_OleCreateObject( "MSXML2.ServerXMLHTTP" )

Grato.

Consultar e Importar Cep da Internet para o Sistema.

Enviado: 03 Jan 2017 11:46
por Softwhouse
Toledo,

Linkei as funções lxhb.lib e lhbwin.lib no seu exemplo e consegui compilar, entretanto, não retorna nada na pesquisa.

Consultar e Importar Cep da Internet para o Sistema.

Enviado: 03 Jan 2017 12:30
por JoséQuintas
hbmk2 test hbwin.hbc

Código: Selecionar todos

PROCEDURE Main

   wapi_MessageBox( wapi_GetActiveWindow(), WebCep( "03676-080" ) )

   RETURN

FUNCTION WebCep( cCep )

 LOCAL cTexto

 cTexto := DownloadTexto( ;
   "http://www.jpatecnologia.com.br/cep.asp" + ;
   "?cep=" + cCep + ;
   "&usuario=pctoledo"+ ;
   "&empresa=pctoledo" + ;
   "&CLIPPER=1" )
 cTexto := iif( ValType( cTexto ) == "C", cTexto, "" )

 RETURN cTexto

FUNCTION DownloadTexto( cUrl )

 LOCAL oSoap, cRetorno, aRetorno, nAscii

 cRetorno := ""
 BEGIN SEQUENCE WITH __BreakBlock()
   oSoap := Win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
   oSoap:Open( "GET", cUrl, .F.)
   oSoap:Send()
   aRetorno := oSoap:ResponseBody()
   IF ValType( aRetorno ) == "C"
    cRetorno := aRetorno
   ELSE
    cRetorno := ""
    FOR EACH nAscii IN aRetorno
      cRetorno += Chr( nAscii )
    NEXT
   ENDIF
 END SEQUENCE

 RETURN cRetorno
cep2.png

A partir daí, é usar o que achar melhor pra separar o que interessa.
Foge da consulta de CEP, e passa a ser usar suas ferramentas pessoais.

Consultar e Importar Cep da Internet para o Sistema.

Enviado: 03 Jan 2017 12:43
por JoséQuintas
E acrescentando a separação que já mencionei, aqui em versão reduzida:

Código: Selecionar todos

PROCEDURE Main

   LOCAL cTexto

   cTexto := WebCep( "03676-080" )
   wapi_MessageBox( wapi_GetActiveWindow(), ;
      XmlNode( cTexto, "cep" ) + hb_Eol() + ;
      XmlNode( cTexto, "logradouro" ) + hb_Eol() + ;
      XmlNode( cTexto, "bairro" ) + hb_Eol() + ;
      XmlNode( cTexto, "cidade" ) + hb_Eol() + ;
      XmlNode( cTexto, "uf" ) + hb_Eol() )

   RETURN

FUNCTION XmlNode( cXml, cNode )

   LOCAL cNodeIni, cNodeFim, nPosIni, nPosFim, cTexto

   cNodeIni := "<" + cNode + ">"
   cNodeFim := "</" + cNode + ">"
   nPosIni := At( cNodeIni, cXml )
   nPosFim := At( cNodeFim, cXml )
   IF nPosIni <= 0 .OR. nPosFim <= 0
      RETURN ""
   ENDIF
   nPosIni += Len( cNodeIni )
   cTexto := Substr( cXml, nPosIni, nPosFim - nPosIni )

   RETURN cTexto
cep3.png
cep3.png (6.55 KiB) Exibido 5540 vezes

Consultar e Importar Cep da Internet para o Sistema.

Enviado: 03 Jan 2017 14:37
por JoséQuintas
Este tópico tá parecendo ressaca de final de ano....

É fonte Harbour, e pedindo pra converter pra Harbour....

É usar minigui, e não saber usar minigui....

É não saber usar o retorno, mas considerar que rotina está errada...

É pedir suporte pra minigui, pra quem nem usa minigui....

Parece que beberam demais.... rs

Consultar e Importar Cep da Internet para o Sistema.

Enviado: 03 Jan 2017 22:22
por Daniel
Ola
Este não e tão bom quanto o do José Quintas
falta a função de importar

Consultar e Importar Cep da Internet para o Sistema.

Enviado: 04 Jan 2017 08:45
por Marcos
Daniel escreveu:Ola
Este não e tão bom quanto o do José Quintas
falta a função de importar
Daniel, baixei seu exemplo mas não executa.

Consultar e Importar Cep da Internet para o Sistema.

Enviado: 06 Jan 2017 17:55
por Daniel
Marcos

baixei o arquivo em dois pcs e executou certinho
voce desbloqueou o arquivo baixado?
Botão direito desbloquear

Consultar e Importar Cep da Internet para o Sistema.

Enviado: 07 Jan 2017 12:52
por Marcos
Daniel, baixei novamente e não executa, não tem o que desbloquear, o que fiz foi descompactar o arquivo.

Consultar e Importar Cep da Internet para o Sistema.

Enviado: 17 Jan 2017 16:54
por gilbertosilverio
Ola Amigos,

Montei este exemplo em HWGUI, baseado na rotina do DANIEL, para tentar entender como funciona a pesquisa do CEP pelo TIP, mais infelizmente a rotina não localiza nenhum endereço.

Alguém poderia me ajuda a entender como isso funciona.

Compila normalmente, com hwgui 2.20 + HB34, mais não localiza nenhum cep.

ps. Desculpem pelo codigo meia boca... rsrsrsrs

Código: Selecionar todos

/*
COMPILAR:

HBMK2 C:\HWGUI\HWGUI.HBC C:\HB34\CONTRIB\HBTIP\HBTIP.HBC HBWIN.HBC XHB.HBC CEP.PRG


Baseado no exemplo de:
//=========================================================================
//
// Arquivo.....: Cep.prg
// Criado em...: 02-01-2017 as 07:56 PM
//
// Projeto.....: Consulta Simples
//
// Programador.: Daniel Denobie - denobie@hotmail.com
//
//=========================================================================
*/

#include "hwgui.ch"
#include "directry.ch"
#include "Fileio.ch"
#include "tip.ch"
#include "xhb.ch"

MemVar cUrl, cUrl1, cQuery, oServer, cCookie, cRet, cFile, cRet1, cRet2, nIni, nFim
Memvar cArq, cArq1, cArq2, cArq3

**********************************************
Function Main()
  private cCep:=SPAC(08), cLogradouro:=spac(20), cUf

  MsgGet_Correio([Rua:],[Teste Rua], cLogradouro)

  Consulta_Cep(cCEP,cLogradouro,cUF)

Return Nil

***********************************************

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *>

Function MsgGet_Correio( cTitle, cText, cLogradouro)
   Local oModDlg, oFont := HFont():Add( "MS Sans Serif",0,-13 )
   LOCAL oGET101

   INIT DIALOG oModDlg TITLE cTitle SIZE 300,140 ;
        FONT oFont CLIPPER STYLE DS_MODALFRAME + WS_POPUP + WS_VISIBLE + WS_CAPTION + WS_SYSMENU + DS_CENTER

        @ 20,10 SAY cText SIZE 260,22
        @ 20,35 GET oGET101 VAR cLogradouro SIZE 150,24 PICTURE "@X" STYLE WS_TABSTOP

        @ 200,95  BUTTON "Ok"  ID IDOK  SIZE 80,24

   ACTIVATE DIALOG oModDlg

   oFont:Release()
Return cLogradouro

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


Function Consulta_Cep(cCep, cLogradouro, cUf) // consulta do cep esta funcionando ate bem
   LOCAL MATA:={}

   If !Empty(AllTrim(cLogradouro))
      cUrl  := 'http://www.buscacep.correios.com.br/sistemas/buscacep/BuscaCep.cfm'
      cUrl1 := 'http://www.buscacep.correios.com.br/sistemas/buscacep/resultadoBuscaCep.cfm'
      cQuery:= 'UF=' + cUf                           +;
               '&Localidade=' + cCep                 +;
               '&Tipo='                              +;
               '&Logradouro=' + AllTrim(cLogradouro) +;
               '&Numero='
   Else
      cUrl  := "http://www.buscacep.correios.com.br/sistemas/buscacep/BuscaCepEndereco.cfm"
      cUrl1 := 'http://www.buscacep.correios.com.br/sistemas/buscacep/resultadoBuscaCepEndereco.cfm'
      cQuery:= "relaxation=" + AllTrim(cCep) +;
               "&tipoCEP=ALL" +;
               "&semelhante=N"
   EndIf

   BEGIN SEQUENCE WITH __BreakBlock()
      oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP.5.0")
      HWG_MSGINFO([PASSOU 1])
   End

   BEGIN SEQUENCE WITH __BreakBlock()
      oServer:Open( "GET", cUrl, .f. )
      oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
      oServer:SetRequestHeader( "Connection", "keep-alive" )
      oServer:Send()
      oServer:WaitForResponse( 5000 )
      HWG_MSGINFO([PASSOU 2])
   End
   cCookie:= oServer:getResponseHeader("Set-Cookie")
   cRet   := oServer:ResponseBody
   //MemoWrit("site.txt", cRet)

   BEGIN SEQUENCE WITH __BreakBlock()
      oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP.5.0")
      HWG_MSGINFO([PASSOU 3])
   End

   BEGIN SEQUENCE WITH __BreakBlock()
      oServer:Open( "POST", cUrl1, .f. )
      oServer:SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
      oServer:SetRequestHeader("Connection", "keep-alive" )
      oServer:SetRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
      oServer:SetRequestHeader("Accept-Language", "pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3")
      oServer:SetRequestHeader("Upgrade-Insecure-Requests", '1')
      oServer:SetRequestHeader("Cookie", cCookie)
      oServer:Send(cQuery)
      oServer:WaitForResponse( 5000 )
      HWG_MSGINFO([PASSOU 4])
   end

   cFile:= oServer:ResponseBody
   cRet1:= StrTran(cFile,Chr(13)+Chr(10),"")
   cRet2:= StrTran(cRet1,Chr(160),"")
   cRet := StrTran(cRet1,Chr(13),"")
   //MemoWrit("Result.txt", cRet)

   nIni := At('function detalhaCep(CEP)', cRet)

   If nIni == 0
      hwg_MsgInfo('Sem arquivo de CEP ', 'Aviso') // para aqui?????
      Return Nil
   EndIf

   nIni := At('document.Geral.submit();}</script><p>', cRet)
   If nIni == 0
      Return nil
   EndIf
   nIni+= 37
   cRet1:= SubStr(cRet, nIni)
   nFim := At('</p>', cRet1) - 1

   hwg_msgInfo(Troca_Acento(SubStr(cRet, nIni, nFim)), [teste aqui])

   HWG_MSGINFO([PASSOU 5])

   While .t.
      nIni := At('<td width="150">', cRet)
      if nIni == 0
         exit
      EndIf
      nIni+= 16
      cRet1:= SubStr(cRet, nIni)
      If At('<a href="javascript:detalhaCep', cRet1) == 1
         nIni  += 45
	 cRet1 := SubStr(cRet, nIni)
	 nFim  := At(' </a>', cRet1) - 1
	 cArq  := Troca_Acento(StrTran(SubStr(cRet, nIni, nFim), '<br><br>', '-')) //Endereço
      Else
         nFim := At(' </td>', cRet1) - 1
	 cArq := Troca_Acento(SubStr(cRet, nIni, nFim)) //Endereço
      EndIf

      nIni := At(' </td><td width="90">', cRet)
      If nIni == 0
         nIni:= At(' </a></td><td width="90"', cRet)
   	 nIni+= 30
      Else
        nIni+= 26
      EndIf

      cRet1:= SubStr(cRet, nIni)
      nFim := At(' </td>', cRet1) - 1
      cArq1:= Troca_Acento(SubStr(cRet, nIni, nFim)) //Bairro

      nIni := At(' </td><td width="80">', cRet)
      nIni += 26
      cRet1:= SubStr(cRet, nIni)
      nFim := At('</td><td width="55">', cRet1) - 1
      cArq2:= Troca_Acento(SubStr(cRet, nIni, nFim)) //Cidade/Uf

      nIni := (At('</td><td width="55">', cRet) + 20)
      cRet1:= SubStr(cRet, nIni)
      nFim := At('</td></tr>', cRet1) - 1
      cArq3:= SubStr(cRet, nIni, nFim) //CEP
      cRet := cRet1

      HWG_MSGINFO([PASSOU 6])

      IF !EMPTY(cArq3)
         AADD ( MATA, {cArq3, cArq, cArq1, cArq2} )
         HWG_MSGINFO(STR(LEN(MATA)))
         TELA()
      ELSE
         HWG_MSGINFO(cArq3)
         HWG_MSGINFO(cArq)
         HWG_MSGINFO(cArq1)
         HWG_MSGINFO(cArq2)
      ENDIF
   End

Return Nil


**************************************
Function Troca_Acento(cTexto)

   cTexto := StrTran( cTexto, "ç", "ç" )
   cTexto := StrTran( cTexto, "Ç", "Ç" )
   cTexto := StrTran( cTexto, "ã", "ã" )
   cTexto := StrTran( cTexto, "Ã", "Ã" )
   cTexto := StrTran( cTexto, "õ", "õ" )
   cTexto := StrTran( cTexto, "Õ", "Õ" )
   cTexto := StrTran( cTexto, "â" , "â" )
   cTexto := StrTran( cTexto, "Â" , "Â" )
   cTexto := StrTran( cTexto, "ê" , "ê" )
   cTexto := StrTran( cTexto, "Ê" , "Ê" )
   cTexto := StrTran( cTexto, "á", "á" )
   cTexto := StrTran( cTexto, "Á", "Á" )
   cTexto := StrTran( cTexto, "é", "é" )
   cTexto := StrTran( cTexto, "É", "É" )
   cTexto := StrTran( cTexto, "í", "í" )
   cTexto := StrTran( cTexto, "Í", "Í" )
   cTexto := StrTran( cTexto, "ó", "ó" )
   cTexto := StrTran( cTexto, "Ó", "Ó" )
   cTexto := StrTran( cTexto, "ú", "ú" )
   cTexto := StrTran( cTexto, "Ú", "Ú" )
   cTexto := StrTran( cTexto, "à", "à" )
   cTexto := StrTran( cTexto, "À", "À" )
   cTexto := StrTran( cTexto, "è", "è" )
   cTexto := StrTran( cTexto, "È", "È" )
   cTexto := StrTran( cTexto, "ì", "ì" )
   cTexto := StrTran( cTexto, "Ì", "Ì" )
   cTexto := StrTran( cTexto, "ò", "ò" )
   cTexto := StrTran( cTexto, "Ò", "Ò" )
   cTexto := StrTran( cTexto, "ù", "ù" )
   cTexto := StrTran( cTexto, "Ù", "Ù" )
   cTexto := StrTran( cTexto, "ï"  , "ï" )
   cTexto := StrTran( cTexto, "Ï"  , "Ï" )
   cTexto := StrTran( cTexto, "ü"  , "ü" )
   cTexto := StrTran( cTexto, "Ü"  , "Ü" )
   Return cTexto


FUNCTION TELA()

   LOCAL oDlg_Dados_NFe, oBrw_NFE, oButton1

      INIT DIALOG oDlg_Dados_NFe TITLE "Dados"  AT 0, 0 SIZE 993,606       ;
           FONT HFont():Add( 'Verdana',0,-14,400,,,) CLIPPER  NOEXITESC                             ;
           STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+WS_SIZEBOX+WS_MINIMIZEBOX+WS_MAXIMIZEBOX+DS_CENTER

        This_Hwg_Dados_NFe := oDlg_Dados_NFe

        @ 15,45 BROWSE oBrw_NFE ARRAY SIZE 935,350 STYLE WS_TABSTOP+WS_HSCROLL

        hwg_CREATEARLIST( oBrw_NFE, Mata )

        oBrw_NFE:aColumns[01]:heading  := "CEP"
        oBrw_NFE:aColumns[02]:heading  := "Endereco"
        oBrw_NFE:aColumns[03]:heading  := "Bairro"
        oBrw_NFE:aColumns[03]:heading  := "Cidade"

        oBrw_NFE:aColumns[01]:nJusHead := DT_CENTER
        oBrw_NFE:aColumns[02]:nJusHead := DT_LEFT
        oBrw_NFE:aColumns[03]:nJusHead := DT_LEFT
        oBrw_NFE:aColumns[04]:nJusHead := DT_LEFT

        oBrw_NFE:Refresh()
        oBrw_NFE:Setfocus()


        @ 841,556 BUTTON oButton1 CAPTION "Sai&r"  SIZE 135,35 STYLE BS_CENTER +WS_TABSTOP ;
                  ON CLICK {|| xVAI:=[N], This_Hwg_Dados_NFe:Close() }

      ACTIVATE DIALOG oDlg_Dados_NFe

RETURN NIL


Consultar e Importar Cep da Internet para o Sistema.

Enviado: 17 Jan 2017 19:26
por JoséQuintas
A rotina faz dois acessos: na primeira "rouba" o cookie de segurança, e na segunda faz a pesquisa propriamente dita.
Não sei se pela hbtip dá pra fazer isso.

Toledo, só agora vi sua resposta.
Não compila com msvc, acusa erros até nos CH do msvc.
o harbour usa o mingw como padrão ja a minigui extended usa o bcc
eu queria entender a diferenças entre os 2 e quais dos 2 são melhores? pq percebi que o bcc gera binarios menores
Que eu saiba é apenas questão de velocidade, ou da LIB exigir determinada versão.
Aqui não tenho paciência de esperar uma linquedição de mingw, parece que a máquina tá travada.
o que o msvc leva 10 segundos pra linqueditar, com mingw leva 10 minutos, parece uma eternidade.
O tamanho do EXE é o que menos importa, mas é menor também.

Em 20 compilacões... 200 minutos, são mais de 3 horas perdidas.