Cópia de dados em outros campos após preencher CEP

Prezados,

Tenho 3 tipos endereços no meu cadastro de clientes: correspondência, entrega, cobrança.

Quando crio um novo registro, ao preencher o CEP de correspondência, programei o Scriptcase para preencher o Logradouro, Cidade, Bairro, etc. automaticamente para os 3 tipos de endereços.

Minha necessidade é: por se tratar de um novo registro, ao preencher o primeiro tipo endereço, gostaria de verificar “se o tipo de endereço entrega e cobrança estiverem vazios, então copiar os dados preenchidos no endereço de correspondência para cobrança e entrega”.

Sugestões de como se fazer isso? O evento lostfocus ocorre antes da busca dos dados do CEP, então não é possível utilizar esta funcionalidade.

Guariba bom dia,

Deixa eu ver se entendi: Se o registro é novo, então os endereços de entrega e cobrança sempre estarão vazios, certo? Então se for assim, use o evento ajax OnChange em cima do campo CEP para fazer o preenchimento dos campos, preenchendo não somente os de endereço, como também os campos de cobrança e entrega.

Kleyber,

Não funcionou também. Suponho que o evento onchange ocorra antes da busca dos dados do CEP, tal como o lostfocus. Fiz um teste novamente, o único campo que consigo copiar foi o que eu acabei de digitar que é o próprio campo CEP.

Na realidade eu precisava identificar “quando o evento buscar o endereço através do CEP finalizar”, a partir daí eu copio os dados.

A não ser que haja uma alternativa, por exemplo: já que o evento onchange consegue copiar o CEP que digitei para o “CEP de cobrança” e “CEP de entrega”, então eu chamaria apenas o evento de buscar o CEP desses dois campos. Mas não sei qual é a função.

Guariba,

Como foi que você fez? Podes mostrar detalhadamente?

Ok, primeiramente tenho os seguintes campos na minha tabela e formulário:

cep
uf
cidade
bairro
logradouro

cob_cep
cob_uf
cob_cidade
cob_bairro
cob_logradouro

ent_cep
ent_uf
ent_cidade
ent_bairro
ent_logradouro

No formulário, configurei o campo CEP como “Tipo de Dado = CEP” e, em “Formatação de Valores” eu indiquei o campo uf como UF, o campo cidade como Cidade, o campo bairro como Bairro e campo logradouro como Logradouro. Fiz isso para o cob_cep e ent_cep também. Portanto, ao preencher o campo cep, os campos uf, cidade, bairro e logradouro são preenchidos automaticamente. O mesmo ocorre quando preencho o campo cob_cep, os campos cob_uf, cob_cidade, cob_bairro e cob_logradouro são preenchidos automaticamente, idem para ent_cep e respectivos campos.

Até aqui tudo bem.

Sobre “como tentei copiar” como sugerido do evento onchange, passo a passo:

  • cliquei em Eventos Ajax / Novo Evento Ajax
  • em “Escolha o Campo para criar um evento” escolhi “cep”
  • em “Escolha o Evento no qual deseja executar o Ajax” escolhi “onChange”
  • em “Campos que vão ser passados como parâmetros” não escolhi
  • então cliquei no botão Criar Evento
  • no evento cep_onChange coloquei o seguinte código:

{cob_cep} = {cep}; {cob_cidade} = {cidade};

  • por último cliquei em Executar e fiz um teste

Note que o campo cep é copiado para cob_cep, mas cidade (que estava em branco) é copiado para cob_cidade em branco pois, imagino que o evento onChange ocorreu antes dos dados do logradouro serem preenchidos com base no cep digitado.

Entendi… bom, e por que não fazes o OnChange em cima do campo endereço ao invés de usar o campo cep? Nunta tentei desta forma, mas é algo a se testar.

Kleyber,
Fiz o que sugeriu, foi boa idéia, mas não adiantou, não ocorre o evento change. Nada acontece. Se tiver outra boa idéia informe, vou pensando em alguma solução.

Eu não uso o sistema de cep do SC, eu tenho uma função e faço a atualização de campos via webservice republicavirtual.com.br/cep/, com essa função eu coloca a informação em quantos campos eu quiser.

No OnChange do CEP eu coloco:

$resultado_busca = busca_cep({cep});

switch($resultado_busca['resultado']){  
    
    case '2':  

{cidade} = $resultado_busca['cidade'];
{estado} = $resultado_busca['uf'];

    break;  
   
    case '1':
    
{tipo_logr} = $resultado_busca['tipo_logradouro'];
{logradouro} = $resultado_busca['logradouro'];
{bairro} = $resultado_busca['bairro'];
{cidade} = $resultado_busca['cidade'];
{estado} = $resultado_busca['uf'];



    break;
}

A função é esta:

function busca_cep($bcep){ 
     $resultado = @file_get_contents('http://republicavirtual.com.br/web_cep.php?cep='.urlencode($bcep).'&formato=query_string');   
     if(!$resultado){   
     $resultado = "&resultado=0&resultado_txt=erro+ao+buscar+cep";   
     }   
  parse_str($resultado, $retorno);    
  return $retorno;  
} 

Cara muito obrigado, se todos colocassem claramente e tão bem explicado assim, muitos problemas já teriam sido resolvidos !!!

Obrigado e parabéns pela postagem !

saulobborges, bom dia!

estou tentando usar a sua função, mas ainda não tive sucesso. Eu a coloquei em “Métodos PHP” de um formulário. É isso mesmo?

obrigado