Página 1 de 5
Consultar e Importar Cep da Internet para o Sistema.
Enviado: 27 Dez 2016 18:46
por Marcos
Senhores, alguém poderia nos ajudar com esta questão, preciso implementar em uma aplicação GUI utilizando Harbour com Minigui a consulta de Cep pela Internet, e importar as informações e assim gravar em um banco Mysql, se alguém nos ajudar seria de grande valia.
Consultar e Importar Cep da Internet para o Sistema.
Enviado: 27 Dez 2016 20:54
por fladimir
Tem algumas formas...
Vc pode usar o ACBr como ponte, gera o comando em um arquivo TXT na pasta q é monitorada pelo ACBr ou acessa o ACBr via TCP e manda o comando e le o retorno, se for via TXT o retorno será lido através de memoread por exemplo.
Fora isto se souber algum webservice q forneça a informação pode acessar o webservice e tratar o retorno através de métodos GET e POST (tem exemplo aqui no fórum)
Ou já tem tb banco de dados com os CEPs etc em SQL ai seria somente alterar o script para inserir no seu banco.
Consultar e Importar Cep da Internet para o Sistema.
Enviado: 27 Dez 2016 22:05
por Fernando queiroz
Código: Selecionar todos
***************************
static FUNCTION ConsultarCEP
***************************
LOCAL oHttp, cXML, cCep
LOCAL cRes, cResTxt, cUf, cCidade, cTipo, cEnde, cBairro
DO WHILE .T.
IF M->CEP = SPACE(09)
RETURN .F.
ENDIF
oHttp:= TIpClientHttp():new( "http://www.jpatecnologia.com.br/cep.asp?cep="+M->Cep+"&clipper=1" )
IF ! oHttp:open()
Alert( "Erro na conexů: "+ oHttp:lastErrorMessage() )
RETURN .T.
ENDIF
cXML := oHttp:readAll()
oHttp:close()
IF Empty(cXML)
** alert( "Ocorreu um erro inesperado. Tente outro CEP...")
return .t.
ENDIF
cUf := Substr( cXML, At("<uf>",cXML)+4, At("</uf>",cXML)-At("<uf>",cXML)-4 )
cCidade := Substr( cXML, At("<cidade>",cXML)+8, At("</cidade>",cXML)-At("<cidade>",cXML)-8 )
cEnde := Substr( cXML, At("<logradouro>",cXML)+12, At("</logradouro>",cXML)-At("<logradouro>",cXML)-12 )
cBairro := Substr( cXML, At("<bairro>",cXML)+8, At("</bairro>",cXML)-At("<bairro>",cXML)-8 )
IF LEN(cEnde) # 0
M->ENDER := cEnde+space(60-len(cEnde))
endif
IF LEN(cBairro) # 0
M->BAIR := cBairro+SPACE(50-LEN(Cbairro))
endif
IF LEN(cCidade) # 0
M->CIDADE:= cCidade+space(50-len(cCidade))
endif
IF LEN(cUf) # 0
M->UF:= cUf+space(02-len(cCidade))
endif
return .t.
ENDDO
Consultar e Importar Cep da Internet para o Sistema.
Enviado: 28 Dez 2016 15:28
por Fernando queiroz
Marcos
respondendo a sua indagação se a função é clipper, ela esta funcionando em HARBOUR o parâmetro clipper nela é somente para retornar todas as letras em MAIÚSCULAS E SEM ACENTOS
#include "hbgtinfo.ch" no .PRG
Consultar e Importar Cep da Internet para o Sistema.
Enviado: 28 Dez 2016 18:27
por JoséQuintas
Dividindo em etapas:
Código: Selecionar todos
PROCEDURE Main
LOCAL cCep := Space(8), cEndereco := Space(40), cBairro := Space(20), cCidade := Space(20), cUF := Space(2)
CLS
@ 2, 20 GET cCep PICTURE "99999-999" VALID CepOk( @cCep, @cEndereco, @cBairro, @cCidade, @cUF )
@ 3, 20 GET cEndereco
@ 4, 20 GET cBairro
@ 5, 20 GET cCidade
@ 6, 20 GET cUF
READ
RETURN
FUNCTION CepOk( mCep, mEndereco, mBairro, mCidade, mUf, mPesquisa )
LOCAL mTexto
hb_Default( @mPesquisa, .T. )
IF Val( SoNumeros( mCep ) ) == 0 .OR. ! mPesquisa
RETURN .T.
ENDIF
mTexto := WebCep( mCep )
mUf := Pad( XmlNode( mTexto, "UF" ), 2 )
mCidade := Pad( XmlNode( mTexto, "CIDADE" ), Len( mCidade ) )
mBairro := Pad( XmlNode( mTexto, "BAIRRO" ), Len( mBairro ) )
mEndereco := Pad( XmlNode( mTexto, "LOGRADOURO" ), Len( mEndereco ) )
RETURN .T.
FUNCTION WebCep( cCep )
LOCAL cTexto
WSave()
Mensagem( "Consultando CEP nos correios, ESC abandona" )
cTexto := DownloadTexto( ;
"http://www.jpatecnologia.com.br/cep.asp" + ;
"?cep=" + cCep + ;
"&usuario=pctoledo"+ ;
"&empresa=pctoledo" + ;
"&CLIPPER=1" )
WRestore()
cTexto := iif( ValType( cTexto ) == "C", cTexto, "" )
// Talvez salvar neste ponto
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
As funções extras são do meu aplicativo, mas pelo nome pode fazer equivalente - SE PRECISAR.
SoNumeros() - retorna só os números
WSave(), WRestore() - salva tela/restaura
Mensagem(), MsgExclamation(), etc.... - mensagens
XmlNode() - extrair blocos de XML. Tem na SefazClass a mais nova.
Consultar e Importar Cep da Internet para o Sistema.
Enviado: 28 Dez 2016 18:35
por JoséQuintas
Nota
Está separado porque:
- A rotina de baixar algo da internet serve pra muita coisa, não só pro CEP
- A rotina de consultar CEP pode ser usada em outras formas
- Validar o CEP pra preencher automático, tem a rotina própria
Consultar e Importar Cep da Internet para o Sistema.
Enviado: 30 Dez 2016 08:14
por Marcos
Obrigado a todos pelo retorno, mas não tenho conhecimento suficiente para portar isto tudo para harbour. Alguém teria algo pronto para harbour?
Consultar e Importar Cep da Internet para o Sistema.
Enviado: 30 Dez 2016 08:59
por JoséQuintas
Obrigado a todos pelo retorno, mas não tenho conhecimento suficiente para portar isto tudo para harbour. Alguém teria algo pronto para harbour?
Fiquei confuso, porque a rotina postada já é em Harbour.
Consultar e Importar Cep da Internet para o Sistema.
Enviado: 30 Dez 2016 09:13
por Marcos
JoséQuintas, na verdade sou Eu que fiz confusão, vou testar e reporto o resultado, desculpe a falta de experiência.
Consultar e Importar Cep da Internet para o Sistema.
Enviado: 30 Dez 2016 11:29
por Marcos
JoséQuintas, veja abaixo a rotina feita separadamente, não retornou nenhum resultado, acredito que esta faltando alguma coisa por ser GUI, pode me ajudar ?
Código: Selecionar todos
#include 'minigui.ch'
function Consulta_Cep()
local cCep := ''
local cEndereco:= ''
local cBairro := ''
local cCidade := ''
local cUF := ''
define window form_cep;
at 000,000;
width 500;
height 305;
title 'Consultar Cep (online)';
icon 'ICONEZED';
modal;
nosize
@ 030,005 label lbl_cep;
of form_cep;
value 'CEP';
autosize;
font 'tahoma' size 010;
bold;
fontcolor _preto_001;
transparent
@ 030,070 textbox tbox_cep;
of form_cep;
height 027;
width 85;
value cCep;
font 'tahoma' size 010;
backcolor _fundo_get;
fontcolor _letra_get_1;
inputmask '99999-999'
@ 060,005 label lbl_endereco;
of form_dados;
value 'Endereço';
autosize;
font 'tahoma' size 010;
bold;
fontcolor _preto_001;
transparent
@ 060,070 textbox tbox_endereco;
of form_cep;
height 027;
width 380;
value cEndereco;
font 'tahoma' size 010;
backcolor _fundo_get;
fontcolor _letra_get_1
@ 090,005 label lbl_bairro;
of form_dados;
value 'Bairro';
autosize;
font 'tahoma' size 010;
bold;
fontcolor _preto_001;
transparent
@ 090,070 textbox tbox_bairro;
of form_cep;
height 027;
width 280;
value cBairro;
font 'tahoma' size 010;
backcolor _fundo_get;
fontcolor _letra_get_1
@ 0120,005 label lbl_cidade;
of form_dados;
value 'Cidade';
autosize;
font 'tahoma' size 010;
bold;
fontcolor _preto_001;
transparent
@ 0120,070 textbox tbox_cidade;
of form_cep;
height 027;
width 250;
value cCidade;
font 'tahoma' size 010;
backcolor _fundo_get;
fontcolor _letra_get_1
@ 0160,005 label lbl_uf;
of form_dados;
value 'UF';
autosize;
font 'tahoma' size 010;
bold;
fontcolor _preto_001;
transparent
@ 0160,070 textbox tbox_uf;
of form_cep;
height 027;
width 30;
value cUf;
font 'tahoma' size 010;
backcolor _fundo_get;
fontcolor _letra_get_1
define label linha_rodape
col 000
row form_cep.height-090
value ''
width form_cep.width
height 001
backcolor _preto_001
transparent .F.
end label
* botões
define buttonex button_ok
picture 'IMG_BUSCA'
col form_cep.width-225
row form_cep.height-085
width 120
height 050
caption 'Ok, buscar'
action CepOk( @cCep, @cEndereco, @cBairro, @cCidade, @cUF )
fontbold .T.
tooltip 'Buscar online as informações Digitadas'
flat .F.
noxpstyle .T.
end buttonex
define buttonex button_cancela
picture 'IMG_VOLTAR'
col form_cep.width-100
row form_cep.height-085
width 090
height 050
caption 'Voltar'
action form_cep.release
fontbold .T.
tooltip 'Sair desta tela sem gravar informações'
flat .F.
noxpstyle .T.
end buttonex
end window
form_cep.center
form_cep.activate
return(nil)
*-------------------------------------------------------------------------------
static function CepOk( mCep, mEndereco, mBairro, mCidade, mUf, mPesquisa )
mTexto := WebCep( mCep )
mUf := Pad( XmlNode( mTexto, "UF" ), 2 )
mCidade := Pad( XmlNode( mTexto, "CIDADE" ), Len( mCidade ) )
mBairro := Pad( XmlNode( mTexto, "BAIRRO" ), Len( mBairro ) )
mEndereco := Pad( XmlNode( mTexto, "LOGRADOURO" ), Len( mEndereco ) )
******ACRESCENTEI ESTA PARTE ****
if form_cep.tbox_endereco.Value = mEndereco
msgstop('Esta aqui', + mEndereco)
else
msgstop('Esta aqui')
endif
**************************************
RETURN NIL
*-------------------------------------------------------------------------------
FUNCTION WebCep( cCep )
LOCAL cTexto
*Mensagem( "Consultando CEP nos correios, ESC abandona" )
cTexto := DownloadTexto( ;
"http://www.jpatecnologia.com.br/cep.asp" + ;
"?cep=" + cCep + ;
"&usuario=pctoledo"+ ;
"&empresa=pctoledo" + ;
"&CLIPPER=1" )
cTexto := iif( ValType( cTexto ) == "C", cTexto, "" )
// Talvez salvar neste ponto
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
*-------------------------------------------------------------------------------
FUNCTION XmlNode( cXml, cNode, lComTag )
LOCAL nInicio, nFim, cResultado := ""
hb_Default( @lComTag, .F. )
nInicio := At( "<" + cNode, cXml )
// a linha abaixo é depois de pegar o início, senão falha
IF " " $ cNode
cNode := Substr( cNode, 1, At( " ", cNode ) - 1 )
ENDIF
IF nInicio != 0
IF ! lComTag
nInicio := nInicio + Len( cNode ) + 2
IF nInicio != 1 .AND. Substr( cXml, nInicio - 1, 1 ) != ">" // Quando tem elementos no bloco
nInicio := hb_At( ">", cXml, nInicio ) + 1
ENDIF
ENDIF
nFim := hb_At( "</" + cNode + ">", cXml, nInicio )
IF nFim != 0
nFim -=1
IF lComTag
nFim := nFim + Len( cNode ) + 3
ENDIF
cResultado := Substr( cXml, nInicio, nFim - nInicio + 1 )
ENDIF
ENDIF
RETURN cResultado
Consultar e Importar Cep da Internet para o Sistema.
Enviado: 30 Dez 2016 12:22
por Toledo
Amigo, tente estas modificações:
Código: Selecionar todos
@ 030,070 textbox tbox_cep;
of form_cep;
height 027;
width 85;
value cCep;
font 'tahoma' size 010;
backcolor _fundo_get;
fontcolor _letra_get_1;
inputmask '99999-999';
on enter {|| CepOk(StrTran(form_cep.tbox_cep.Value,"-",""))}
Código: Selecionar todos
static function CepOk( mCep )
mTexto := WebCep( mCep )
form_cep.tbox_uf.Value := Pad( XmlNode( mTexto, "uf" ), 2 )
form_cep.tbox_cidade.Value := Pad( XmlNode( mTexto, "cidade" ), 25 )
form_cep.tbox_bairro.Value := Pad( XmlNode( mTexto, "bairro" ), 25 )
form_cep.tbox_endereco.Value := Pad( XmlNode( mTexto, "logradouro" ), 40 )
RETURN NIL
No campo CEP digite o cep e depois pressione ENTER.
Abraços,
Consultar e Importar Cep da Internet para o Sistema.
Enviado: 30 Dez 2016 13:25
por JoséQuintas
A minigui não aceita algo assim?
Código: Selecionar todos
... on enter { || CepOk( @form_cep.tbox_cep.Value, @form_cep.tbox_endereco.Value, @form_cep.tbox_bairro.value, @form_cep.tbox.cidade.value, @form_cep.tbox_uf.value ) }
Consultar e Importar Cep da Internet para o Sistema.
Enviado: 30 Dez 2016 14:59
por Marcos
Mestres Toledo e JoséQuintas não deu certo nenhuma opção, se colocar no evento on enter não acontece nada, se colocar no evento action do botão dá erro.
Consultar e Importar Cep da Internet para o Sistema.
Enviado: 30 Dez 2016 16:53
por Toledo
Amigo, segue em anexo o seu código com as alterações que passei na minha mensagem anterior.
Abraços,
Consultar e Importar Cep da Internet para o Sistema.
Enviado: 30 Dez 2016 21:53
por JoséQuintas
Fugindo um pouco do assunto principal, mas sobre o exemplo postado:
Dá pra gerar a minigui que foi usada nesse exemplo com Harbour 3.4?
Como chegar até ela?
Sei que tem pelo menos 3 versões de minigui, e geralmente com Harbour próprio, então não sei se isso é possível, ou quais os caminhos.