Moderador: Moderadores
***************************
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
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
Obrigado a todos pelo retorno, mas não tenho conhecimento suficiente para portar isto tudo para harbour. Alguém teria algo pronto para harbour?
#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
@ 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,"-",""))}
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
... 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 ) }
Usuários vendo este fórum: Nenhum usuário registrado online e 9 visitantes