Autor Tópico: Mudar valor de campo Select pelo OnBlur ou OnChange de outro campo  (Lida 6499 vezes)

Endrigo

  • Intermediário
  • ***
  • Mensagens: 242
    • Email
Mudar valor de campo Select pelo OnBlur ou OnChange de outro campo
« Online: Agosto 21, 2013, 04:12:00 am »
Possuo o seguinte cenário, que provavelmente algum de vocês já passaram por isso:

Tenho o meu cadastro de vendedores e clientes onde utilizo a tabela do IBGE para UF, Município e Distrito. E estou tentando utilizar o componente tipo CEP, e criei 4 campos no meu formulário para receber automaticamente os valores de Logradouro, Bairro, Cidade e UF que o componente preenche automaticamente, no OnBlur do componente CEP, estou mandando capturar os códigos IBGE das tabelas Estados e Municípios, até aí está funcionando perfeitamente, porém após a segunda saída do campo CEP, claro.

O meu problema está no seguinte, o meu campo estado é um Select que traz os estados e gravo o id no banco e o município a mesma coisa. Os municípios só aparecem quando seleciono o estado (ajax), porém quando mando alterar o conteúdo dos campos no OnBlur sem selecionar o estado e o município da lista, os campos Logradouro e Bairro também não recebem valor, porém se eu selecionar exatamente o estado e o município corretos, de acordo com o CEP digitado, os valores de Logradouro e Bairro são preenchidos.

Aqui o código que estou usando no OnBlur, passando os campos cep_logradouro, cep_bairro, cep_cidade, cep_uf como parâmetros para o evento.
Código: [Selecionar]
$msg = "";

/**
 * Monta o endereço
 */
{ven_endereco} = strtoupper($cep_logradouro);
$msg .= "Endereço: " . $cep_logradouro . "<br>";

/**
 * Monta o bairro
 */
{ven_bairro} = strtoupper($cep_bairro);
$msg .= "Bairro: " . $cep_bairro . "<br>";

/**
 * Localiza o código do estado de acordo com o cep selecionado
 */
sc_lookup(ds,"select est_id from cad_estados where est_uf = '" . $cep_uf . "'");
if (isset({ds[0][0]}))
{
$msg .= "UF: " . $cep_uf . "(" . {ds[0][0]} . ")" . "<br>";
{est_id} = {ds[0][0]};
}

/**
 * Localiza o código do município de acordo com o cep selecionado
 */
sc_lookup(ds,"select mun_id from cad_municipios where mun_descricao like '%" . $cep_cidade . "%'");
if (isset({ds[0][0]}))
{
$msg .= "Município: " . $cep_cidade . "(" . {ds[0][0]} . ")" . "<br>";
{mun_id} = {ds[0][0]};
}

//sc_ajax_message($msg, "CEP OnBlur");


Vejam bem, o evento ESTÁ FUNCIONANDO, mas somente quando seleciono manualmente o Estado e o Município CORRETOS nos campos tipo Select. Então, o que estou observando que seja o problema, é que os campos tipo Select não estão recebendo valor pelo evento.
« Última modificação: Agosto 21, 2013, 07:08:47 pm por Endrigo »
Endrigo Rodrigues
(31)3464-1020
CentOS 6 64bits + ScriptCase 8.00.0041 + PostgreSQL 9.3

Endrigo

  • Intermediário
  • ***
  • Mensagens: 242
    • Email
Re:Atualizar valor de campo Select pelo OnBlur ou OnChange
« Responder #1 Online: Agosto 21, 2013, 04:22:25 am »
Não tem um sc_consulta_cep(), onde eu passaria o CEP como parâmetro e me retornaria uma matriz com o resultado que preciso? Pois aí eu mesmo montaria o meu evento onChange para preencher os meus campos da maneira que preciso.
Endrigo Rodrigues
(31)3464-1020
CentOS 6 64bits + ScriptCase 8.00.0041 + PostgreSQL 9.3

Almeida

  • Expert
  • *****
  • Mensagens: 610
    • Email
Re:Atualizar valor de campo Select pelo OnBlur ou OnChange
« Responder #2 Online: Agosto 21, 2013, 09:17:12 am »
Quando se tem 2 select ou duploselect o tem como atualizar o segundo apartir de uma ação no primeiro select.

Ex.
Tenho um cadastro de UF
Código: [Selecionar]
UF{
  GO,  RJ,  SP,  ETC
}

E um cadastro de cidades.
Código: [Selecionar]
Cidades 1 = {
nome: Goiânia,
UF: GO
},{
nome: Rio Janeiro
UF: RJ
}

Com esses dados coloco o primeiro select para atualizar o segundo. Abaixo do lookup do select tem um atributo, processar evento ajax, aonde se marca e escolhe qual select deseja carregar após a seleção do primeiro. No lookup do segundo select se coloca um select usando algum filtro de acordo com a seleção do primeiro, ex do lookup do segundo select:

Código: [Selecionar]
SELEC IdCidade, Nome
FROM cidades
WHERE UF = '{UF}' -> esse {UF} é o primeiro select.

Espero ter lhe ajudado.

Att.
Eliezer Almeida
eliezeralmeidago@hotmail.com
www.infotecsoft.com.br - Modernidade e Eficiência

Almeida

  • Expert
  • *****
  • Mensagens: 610
    • Email
Re:Atualizar valor de campo Select pelo OnBlur ou OnChange
« Responder #3 Online: Agosto 21, 2013, 09:19:54 am »
Mas tem como sim montar um select apartir do onBlur ou onChange, não nativamente da ferramenta, mais utlizando seus recursos, como o Métodos Javascript.

O Haroldo tem uns exemplos no seu site de Selects dinâmicos, não é um bicho de sete cabeças fazer e é bem útil. Caso não consiga fazer, poste aqui que procuro um código que usei e posto para você tirar ideias.

Att.
Eliezer Almeida
eliezeralmeidago@hotmail.com
www.infotecsoft.com.br - Modernidade e Eficiência

Endrigo

  • Intermediário
  • ***
  • Mensagens: 242
    • Email
Re:Atualizar valor de campo Select pelo OnBlur ou OnChange
« Responder #4 Online: Agosto 21, 2013, 12:45:38 pm »
Quando se tem 2 select ou duploselect o tem como atualizar o segundo apartir de uma ação no primeiro select.

Ex.
Tenho um cadastro de UF
Código: [Selecionar]
UF{
  GO,  RJ,  SP,  ETC
}

E um cadastro de cidades.
Código: [Selecionar]
Cidades 1 = {
nome: Goiânia,
UF: GO
},{
nome: Rio Janeiro
UF: RJ
}

Com esses dados coloco o primeiro select para atualizar o segundo. Abaixo do lookup do select tem um atributo, processar evento ajax, aonde se marca e escolhe qual select deseja carregar após a seleção do primeiro. No lookup do segundo select se coloca um select usando algum filtro de acordo com a seleção do primeiro, ex do lookup do segundo select:

Código: [Selecionar]
SELEC IdCidade, Nome
FROM cidades
WHERE UF = '{UF}' -> esse {UF} é o primeiro select.

Espero ter lhe ajudado.

Almeida, você não entendeu.

Isso eu já faço, como eu disse, está funcionando. O que preciso é alterar o conteúdo do campo est_id e mun+id através do evento OnBlur ou OnChange.

E vejo que se existisse uma função sc_consulta_cep() passando como parâmetro o CEP desejado e tendo como retorno uma matriz contendo os 6 valores necessários.

Leia novamente o meu texto e o meu código fonte do evento que você entenderá o que estou dizendo.
Endrigo Rodrigues
(31)3464-1020
CentOS 6 64bits + ScriptCase 8.00.0041 + PostgreSQL 9.3

Endrigo

  • Intermediário
  • ***
  • Mensagens: 242
    • Email
Re:Atualizar valor de campo Select pelo OnBlur ou OnChange
« Responder #5 Online: Agosto 21, 2013, 06:07:23 pm »
Veja bem, estou dizendo que preciso editar o conteúdo dos campos est_id (Select), e mun_id (Select) quando executar o evento OnChange do campo ven_cep (CEP). Ainda nem passei pelos campos est_id e mun_id, estou ainda no campo ven_cep.

Entenderam agora?
Endrigo Rodrigues
(31)3464-1020
CentOS 6 64bits + ScriptCase 8.00.0041 + PostgreSQL 9.3

Endrigo

  • Intermediário
  • ***
  • Mensagens: 242
    • Email
Re:Atualizar valor de campo Select pelo OnBlur ou OnChange
« Responder #6 Online: Agosto 21, 2013, 06:09:29 pm »
E mais uma vez questiono: Não existe um sc_consulta_cep()?
Endrigo Rodrigues
(31)3464-1020
CentOS 6 64bits + ScriptCase 8.00.0041 + PostgreSQL 9.3

Allan Medeiros

  • Expert
  • *****
  • Mensagens: 504
    • Email
Re:Mudar valor de campo Select pelo OnBlur ou OnChange de outro campo
« Responder #7 Online: Agosto 21, 2013, 08:59:31 pm »
Tenho um problema semelhante, estou pensando em desenvolver uma função de cep paralela.
A idéia seria aproveitar a base de cep do scriptcase.
[]s
Allan Medeiros
Analista de Informática
__________________________________________
Companhia de Processamento de Dados da Paraíba
medeiros@codata.pb.gov.br

Endrigo

  • Intermediário
  • ***
  • Mensagens: 242
    • Email
Re:Mudar valor de campo Select pelo OnBlur ou OnChange de outro campo
« Responder #8 Online: Agosto 21, 2013, 09:35:17 pm »
Tenho um problema semelhante, estou pensando em desenvolver uma função de cep paralela.
A idéia seria aproveitar a base de cep do scriptcase.
[]s

Bom, se quiser me ajudar.

Desenvolvi uma biblioteca fazendo adaptação do código do CEP no php do próprio ScriptCase, porém não consigo ver onde está dando erro.

Aqui é a biblioteca que criei em Ferramentas / Bibliotecas / Publicas:
Código: [Selecionar]
/**
 * Funções de consulta de CEP ScriptCase
 */
function fs_consulta_cep($CEP, &$cep_uf, &$cep_nome, &$cep_cidade, &$cep_bairro, &$cep_rua)
{
$cep_uf = "";
$cep_nome = "";
$cep_cidade = "";
$cep_bairro = "";
$cep_rua = "";

/**
* $Id: nm_gp_gera_cep.php,v 1.5 2011-10-06 15:56:00 sergio Exp $
*/
/*******************************************************************
* Script Case
*------------------------------------------------------------------
* Arquivo  : nm_cep.php
* Modulo   : CEP
* Criacao  : 18.12.2001
* Alteracao: 19.12.2001
*------------------------------------------------------------------
* Busca de CEPs
*------------------------------------------------------------------
* © NetMake Solucoes em Informatica Ltda
*******************************************************************/

$cep_localidades = array();
$cep_especiais   = array();
$cep_quant_loc   = 0;
$cep_quant_esp   = 0;
$arq_logr        = "";
$achou_logr      = "";
$achou_cep       = "";
$local_cep       = "";
$Opcao           = "";
$Est             = "";
$Localidade      = "";
$Tipo            = "";
$Logradouro      = "";
$form_origem     = "";
$cep_path = $_SESSION['scriptcase']['nm_root_cep'] . $_SESSION['scriptcase']['nm_path_cep'];

$UF      = "";
$NOME    = "";
$CEP8    = "";
$CIDADE  = "";
$BAIRRO  = "";
$RUA     = "";

$_SESSION['scriptcase']['nm_charset_cep'] = "ISO-8859-1";
if (isset($_SESSION['scriptcase']['charset']) && !empty($_SESSION['scriptcase']['charset']))
{
    $_SESSION['scriptcase']['nm_charset_cep'] = $_SESSION['scriptcase']['charset'];
}

$mens_erro = "";
// Verifica integridade dos arquivos do CEP
if (is_file($cep_path . "/arquivos/cep_contrl_arq.txt"))
{
    $raq_contrl = file($cep_path . "/arquivos/cep_contrl_arq.txt");
    foreach ($raq_contrl as $cada_contrl)
    {
       $dados_contrl = explode("@#@", $cada_contrl);
       if (isset($dados_contrl[1]) && !empty($dados_contrl[0]))
       {
           if (md5_file($cep_path . "/arquivos/cep_logradouros_" . $dados_contrl[0] . ".txt") != $dados_contrl[1])
           {
               $mens_erro .= "Os arquivos de acesso ao CEP est&atilde;o corrompidos. <br>";
               break;
           }
       }
    }
}

// Verifica existencia dos arquivos do CEP
if (!is_file($cep_path . "/arquivos/cep_faixas_estados.txt"))
{
    $mens_erro .= "N&atilde;o foram encontrados os arquivos de acesso ao CEP. <br>";
}

// Busca por CEP
if (isset($CEP) && !empty($CEP))
{
    $CEP       = str_replace(".", "", str_replace("-", "", $CEP));
}
// Erro
else
{
    $mens_erro .= "CEP n&atild;o especificado.";
}

if (!empty($mens_erro))
{
    $mens_erro .= "Estes arquivos podem ser baixados do site do Scriprcase e copiados para o diret&oacute;rio onde foi instalado o PROD, <br>";
    $mens_erro .= "dentro da seguinte estrutura: ../prod/cep/arquivos.<br>";
    if (isset($_GET["onchange"]) && $_GET["onchange"] == "s")
    {
        $mens_erro = str_replace("<br>", "", $mens_erro);
    }
return($mens_erro);
    exit;
}


// Decide qual acao sera executada
// Localiza UF
$UF = "";
$estados  = file($cep_path . "/arquivos/cep_faixas_estados.txt");
foreach ($estados as $cada_faixa)
{
    $est_dados = explode("@nm@", $cada_faixa);
    if ( ($CEP >= $est_dados[1]) && ($CEP <= $est_dados[2]) )
    {
        $UF = $est_dados[0];
        break;
    }
}
if ("" == $UF)
{
return("CEP N&atilde;o encontrado.");
}
// Busca por Localidade
nm_cep_ler_localidades(strtolower($UF));
$registros = 0;
while ($registros < $cep_quant_loc)
{
       $cada_loc = explode("@nm@", $cep_localidades[$registros]);
       if ($cada_loc[0] == $UF && $cada_loc[2] == $CEP)
       {
           $CIDADE = $cada_loc[1];
           $CEP8   = $CEP;
           $registros = $cep_quant_loc;
       }
       $registros++;
}
// Busca por Logradouro
nm_cep_ler_faixas_cep_localidades(strtolower($UF), $CEP);
$registros = 0;
if ($achou_cep == "S")
{
    while ($registros == 0)
    {
       $cada_logradouro = fgets($arq_logr, 1024);
       $cada_loc = explode("@nm@", $cada_logradouro);
       if (isset($cada_loc[3]) && $cada_loc[3] == $CEP)
       {
           $UF      = $cada_loc[0];
           $NOME    = $cada_loc[2];
           $CEP8    = $cada_loc[3];
           $CIDADE  = $cada_loc[4];
           $BAIRRO  = $cada_loc[5];
           $TIPOEXT = $cada_loc[6];
           if (!empty($cada_loc[1]))
           {
/*                       $TIPOEXT .= " " . $cada_loc[1]; */
               $NOME  =  trim($cada_loc[1]) . " " . $NOME;
           }
           $COMPLE  = $cada_loc[7];
           $registros = 1;
       }
       else
       {
           if (!isset($cada_loc[4]) || $local_cep != $cada_loc[4])
           {
               $registros = 1;
           }
       }
    }
    fclose($arq_logr);
}
// Busca por Logradouro Especial
nm_cep_ler_especiais(strtolower($UF));
$registros = 0;
while ($registros < $cep_quant_esp)
{
       $cada_loc = explode("@nm@", $cep_especiais[$registros]);
       if ($cada_loc[1] == $CEP)
       {
           $UF      = $cada_loc[2];
           $NOME    = $cada_loc[0];
           $CEP8    = $cada_loc[1];
           $CIDADE  = $cada_loc[4];
           $BAIRRO  = $cada_loc[5];
           $RUA     = $cada_loc[7];
           $TIPOEXT = $cada_loc[6];
           if (!empty($cada_loc[8]))
           {
               $RUA  =  trim($cada_loc[8]) . " " . $RUA;
           }
           if (!empty($cada_loc[3]))
           {
               $RUA .= ", " . $cada_loc[3];
           }
           $COMPLE = "";
           $registros = $cep_quant_esp;
       }
       $registros++;
}

$cep_uf = $UF;
$cep_nome = $NOME;
$cep_cidade = $CIDADE;
$cep_bairro = $BAIRRO;
$cep_rua = $RUA;

return($mens_erro);
}

function nm_cep_ler_localidades($estado)
{
    global $cep_path, $cep_localidades, $cep_quant_loc;
    if (!empty($cep_localidades))
    {
        return;
    }
    $cep_localidades  = file($cep_path . "/arquivos/cep_localidades_" . $estado . ".txt");
    $cep_quant_loc   = count($cep_localidades);
}

function nm_cep_ler_especiais($estado)
{
    global $cep_path, $cep_especiais, $cep_quant_esp;
    if (!empty($cep_especiais))
    {
        return;
    }
    $cep_especiais  = file($cep_path . "/arquivos/cep_grandes_usuarios_" . $estado . ".txt");
    $cep_quant_esp   = count($cep_especiais);
}

function nm_cep_ler_faixas_cep_localidades($estado, $cep)
{
    global $cep_path, $achou_cep, $achou_logr, $local_cep;

    $achou_cep = "N";
    $cep_faixas  = file($cep_path . "/arquivos/cep_faixas_localidades.txt");
    foreach ($cep_faixas as $cada_faixa)
    {
        $cada_loc = explode("@nm@", $cada_faixa);
        if ($cada_loc[0] == strtoupper($estado) && ($cep >= $cada_loc[2] && $cep <= $cada_loc[3]))
        {
            $achou_cep = "S";
            break;
        }
    }
    if ($achou_cep == "S")
    {
        $local_cep = $cada_loc[1];
        nm_cep_ler_pointer_logradouros($estado, $cada_loc[1]);
        if ($achou_logr == "N")
        {
            $achou_cep = "N";
        }
    }
}

function nm_cep_ler_pointer_logradouros($estado, $cidade)
{
    global $cep_path, $arq_logr, $achou_logr;

    $achou_logr = "N";
    $arq_point = file($cep_path . "/arquivos/cep_pointer_log_" . $estado . ".txt");
    $cid_pesq  = RetiraAcentos($cidade);
    foreach ($arq_point as $cada_point)
    {
        $cada_loc = explode("@nm@", $cada_point);
        $cid_pt   = RetiraAcentos($cada_loc[0]);
        if ($cid_pt == $cid_pesq)
        {
            $achou_logr = "S";
            break;
        }
    }
    if ($achou_logr == "N")
    {
        return;
    }
    $arq_logr  = fopen($cep_path . "/arquivos/cep_logradouros_" .  strtolower($estado) . ".txt", 'r');
    fseek($arq_logr, $cada_loc[1]);
}

function RetiraAcentos($Campo)
{
   $Campo = strtolower($Campo);
   $Campo = str_replace("á", "a", $Campo);
   $Campo = str_replace("à", "a", $Campo);
   $Campo = str_replace("ã", "a", $Campo);
   $Campo = str_replace("â", "a", $Campo);
   $Campo = str_replace("é", "e", $Campo);
   $Campo = str_replace("ê", "e", $Campo);
   $Campo = str_replace("í", "i", $Campo);
   $Campo = str_replace("ó", "o", $Campo);
   $Campo = str_replace("õ", "o", $Campo);
   $Campo = str_replace("ô", "o", $Campo);
   $Campo = str_replace("ú", "u", $Campo);
   $Campo = str_replace("ü", "u", $Campo);
   $Campo = str_replace("ç", "c", $Campo);
   return $Campo;
}

function nm_decode_ISO(&$val)
{
    $val = mb_convert_encoding($val, $_SESSION['scriptcase']['nm_charset_cep'], "ISO-8859-1");
}


E aqui é o meu evento OnChange do campo CEP:
Código: [Selecionar]
try {
$cep_uf = "";
$cep_nome = "";
$cep_cidade = "";
$cep_bairro = "";
$cep_rua = "";

$resp = fs_consulta_cep($ven_cep, $cep_uf, $cep_nome, $cep_cidade, $cep_bairro, $cep_rua);
{ven_bairro} = $cep_bairro;
} catch(Exception $e) {
$resp = $e->getMessage();
{ven_bairro} = $resp;
}


Aparece o processamento ajax mas não mostra nada na tela, e também não altera o meu campo {ven_bairro}.
Endrigo Rodrigues
(31)3464-1020
CentOS 6 64bits + ScriptCase 8.00.0041 + PostgreSQL 9.3

Endrigo

  • Intermediário
  • ***
  • Mensagens: 242
    • Email
Re:Mudar valor de campo Select pelo OnBlur ou OnChange de outro campo
« Responder #9 Online: Agosto 21, 2013, 09:44:13 pm »
Parece que a função está gerando alguma exceção mas não me apresenta nada.
Endrigo Rodrigues
(31)3464-1020
CentOS 6 64bits + ScriptCase 8.00.0041 + PostgreSQL 9.3

Allan Medeiros

  • Expert
  • *****
  • Mensagens: 504
    • Email
Re:Mudar valor de campo Select pelo OnBlur ou OnChange de outro campo
« Responder #10 Online: Agosto 21, 2013, 10:10:36 pm »
Vou copiar o teu código e fazer uns testes.
[]s
Allan Medeiros
Analista de Informática
__________________________________________
Companhia de Processamento de Dados da Paraíba
medeiros@codata.pb.gov.br

Allan Medeiros

  • Expert
  • *****
  • Mensagens: 504
    • Email
Re:Mudar valor de campo Select pelo OnBlur ou OnChange de outro campo
« Responder #11 Online: Agosto 22, 2013, 11:01:59 am »
Endrigo,
Reescrevi a função da netmake pra poder entender e encontrei o problema.
Fica faltando a busca na tabela de municipio para poder colocar o código do município no combobox ao invés do nome.
Estou trabalhando nisso.
Segue o código do evento onChange do campo cep:
Código: [Selecionar]
try {
$cep_uf = "";
$cep_nome = "";
$cep_cidade = "";
$cep_bairro = "";
$cep_rua = "";

$resp = consultaCEP({CEP}, $cep_uf, $cep_nome, $cep_cidade, $cep_bairro, $cep_rua, $cep_tipoext);
{Bairro} = $cep_bairro;
{Endereco} = $cep_nome;
{Municipio} = $cep_cidade;
{Complemento} = $cep_tipoext;
{UF} = $cep_uf;
} catch(Exception $e) {
$resp = $e->getMessage();
{Bairro} = $resp;
}

E o código da função reescrito:
Código: [Selecionar]
<?php
/**
 * Funções de consulta de CEP ScriptCase
 */
function consultaCEP($CEP, &$cepUF, &$cepNome, &$cepCidade, &$cepBairro, &$cepRua, &$cepTipoExt)
{
$cepUF "";
$cepNome "";
$cepCidade "";
$cepBairro "";
$cepRua "";

global $cepPath$achouCEP$achouLogr$arqLogr$localCEP;
global $cepLocalidades$cepQuantLoc$cepEspeciais$cepQuantEsp;

$cepLocalidades = array();
$cepEspeciais   = array();
$cepQuantLoc   0;
$cepQuantEsp   0;
$arqLogr        "";
$achouLogr      "";
$achouCEP       "";
$localCEP       "";
$opcao           "";
$est             "";
$localidade      "";
$tipo            "";
$logradouro      "";
$formOrigem     "";
$cepPath $_SESSION['scriptcase']['nm_root_cep'] . $_SESSION['scriptcase']['nm_path_cep'];

$_UF      "";
$_NOME    "";
$_CEP8    "";
$_CIDADE  "";
$_BAIRRO  "";
$_RUA     "";

$_SESSION['scriptcase']['nm_charset_cep'] = "ISO-8859-1";
if (isset($_SESSION['scriptcase']['charset']) && !empty($_SESSION['scriptcase']['charset']))
{
$_SESSION['scriptcase']['nm_charset_cep'] = $_SESSION['scriptcase']['charset'];
}

$mensErro "";
// Verifica integridade dos arquivos do CEP
if (is_file($cepPath "/arquivos/cep_contrl_arq.txt"))
{
$raqContrl file($cepPath "/arquivos/cep_contrl_arq.txt");
foreach ($raqContrl as $cadaContrl)
{
   $dadosContrl explode("@#@"$cadaContrl);
   if (isset($dadosContrl[1]) && !empty($dadosContrl[0]))
   {
   if (md5_file($cepPath "/arquivos/cep_logradouros_" $dadosContrl[0] . ".txt") != $dadosContrl[1])
   {
   $mensErro .= "Os arquivos de acesso ao CEP est&atilde;o corrompidos. <br>";
   break;
   }
   }
}
}

// Verifica existencia dos arquivos do CEP
if (!is_file($cepPath "/arquivos/cep_faixas_estados.txt"))
{
$mensErro .= "N&atilde;o foram encontrados os arquivos de acesso ao CEP. <br>";
}

// Busca por CEP
if (isset($CEP) && !empty($CEP))
{
$CEP       str_replace("."""str_replace("-"""$CEP));
}
// Erro
else
{
$mensErro .= "CEP n&atild;o especificado.";
}

if (!empty($mensErro))
{

$mensErro .= "Estes arquivos podem ser baixados do site do Scriprcase e copiados para o diret&oacute;rio onde foi instalado o PROD, <br>";
$mensErro .= "dentro da seguinte estrutura: ../prod/cep/arquivos.<br>";
if (isset($_GET["onchange"]) && $_GET["onchange"] == "s")
{
$mensErro str_replace("<br>"""$mensErro);
}
return($mensErro);
exit;
}

// Decide qual acao sera executada
// Localiza UF
$_UF "";
$estados  file($cepPath "/arquivos/cep_faixas_estados.txt");
foreach ($estados as $cadaFaixa)
{
$estDados explode("@nm@"$cadaFaixa);
if ( ($CEP >= $estDados[1]) && ($CEP <= $estDados[2]) )
{
$_UF $estDados[0];
break;
}
}
if ("" == $_UF)
{
return("CEP N&atilde;o encontrado.");
}

// Busca por Localidade
cepLerLocalidades(strtolower($_UF));
$registros 0;

while ($registros $cepQuantLoc)
{
   $cadaLoc explode("@nm@"$cepLocalidades[$registros]);
   if ($cadaLoc[0] == $_UF && $cadaLoc[2] == $CEP)
   {
   $_CIDADE $cadaLoc[1];
   $_CEP8   $CEP;
   $registros $cepQuantLoc;
   }
   $registros++;
}

// Busca por Logradouro
cepLerFaixasCepLocalidades(strtolower($_UF), $CEP);
$registros 0;
if ($achouCEP == "S")
{
while ($registros == 0)
{
   $cadaLogradouro fgets($arqLogr1024);
   $cadaLoc explode("@nm@"$cadaLogradouro);

   if (isset($cadaLoc[3]) && $cadaLoc[3] == $CEP)
   {
   $_UF      $cadaLoc[0];
   $_NOME    $cadaLoc[2];
   $_CEP8    $cadaLoc[3];
   $_CIDADE  $cadaLoc[4];
   $_BAIRRO  $cadaLoc[5];
   $_TIPO_EXT $cadaLoc[6];
   if (!empty($cadaLoc[1]))
   {
/*                       $_TIPO_EXT .= " " . $cadaLoc[1]; */
   $_NOME  =  trim($cadaLoc[1]) . " " $_NOME;
   }
   $_COMPLE  $cadaLoc[7];
   $registros 1;
   }
   else
   {
   if (!isset($cadaLoc[4]) || $localCEP != $cadaLoc[4])
   {
   $registros 1;
   }
   }
}
fclose($arqLogr);
}

// Busca por Logradouro Especial
cepLerEspeciais(strtolower($_UF));
$registros 0;
while ($registros $cepQuantEsp)
{
   $cadaLoc explode("@nm@"$cepEspeciais[$registros]);
   if ($cadaLoc[1] == $CEP)
   {
   $_UF      $cadaLoc[2];
   $_NOME    $cadaLoc[0];
   $_CEP8    $cadaLoc[1];
   $_CIDADE  $cadaLoc[4];
   $_BAIRRO  $cadaLoc[5];
   $_RUA     $cadaLoc[7];
   $_TIPO_EXT $cadaLoc[6];
   if (!empty($cadaLoc[8]))
   {
   $_RUA  =  trim($cadaLoc[8]) . " " $_RUA;
   }
   if (!empty($cadaLoc[3]))
   {
   $_RUA .= ", " $cadaLoc[3];
   }
   $_COMPLE "";
   $registros $cepQuantEsp;
   }
   $registros++;
}

$cepUF $_UF;
$cepNome $_NOME;
$cepCidade $_CIDADE;
$cepBairro $_BAIRRO;
$cepRua $_RUA;
$cepTipoExt $_TIPO_EXT;

return($mensErro);
}

function cepLerLocalidades($pEstado)
{
global $cepPath$cepLocalidades$cepQuantLoc;

if (!empty($cepLocalidades))
{
return;
}
$cepLocalidades  file($cepPath "/arquivos/cep_localidades_" $pEstado ".txt");
$cepQuantLoc   count($cepLocalidades);

}

function cepLerEspeciais($pEstado)
{
global $cepPath$cepEspeciais$cepQuantEsp;
if (!empty($cepEspeciais))
{
return;
}
$cepEspeciais  file($cepPath "/arquivos/cep_grandes_usuarios_" $pEstado ".txt");
$cepQuantEsp   count($cepEspeciais);
}

function cepLerFaixasCepLocalidades($pEstado$pCEP)
{
global $cepPath$achouCEP$achouLogr$localCEP;
$achouCEP "N";
$cepFaixas  file($cepPath "/arquivos/cep_faixas_localidades.txt");
foreach ($cepFaixas as $cadaFaixa)
{
$cadaLoc explode("@nm@"$cadaFaixa);
if ($cadaLoc[0] == strtoupper($pEstado) && ($pCEP >= $cadaLoc[2] && $pCEP <= $cadaLoc[3]))
{
$achouCEP "S";
break;
}
}
if ($achouCEP == "S")
{
$localCEP $cadaLoc[1];
cepLerPointerLogradouros($pEstado$cadaLoc[1]);
if ($achouLogr == "N")
{
$achouCEP "N";
}
}
}

function cepLerPointerLogradouros($pEstado$pCidade)
{
global $cepPath$arqLogr$achouLogr;

$achouLogr "N";
$arqPoint file($cepPath "/arquivos/cep_pointer_log_" $pEstado ".txt");

$cidPesq  retiraAcentos($pCidade);

foreach ($arqPoint as $cadaPoint)
{
$cadaLoc explode("@nm@"$cadaPoint);
$cidPt   retiraAcentos($cadaLoc[0]);
if ($cidPt == $cidPesq)
{
$achouLogr "S";
break;
}
}
if ($achouLogr == "N")
{
return;
}
$arqLogr  fopen($cepPath "/arquivos/cep_logradouros_" .  strtolower($pEstado) . ".txt"'r');
fseek($arqLogr$cadaLoc[1]);
}

function retiraAcentos($pCampo)
{

   $pCampo strtolower($pCampo);
   $pCampo str_replace("á""a"$pCampo);
   $pCampo str_replace("à""a"$pCampo);
   $pCampo str_replace("ã""a"$pCampo);
   $pCampo str_replace("â""a"$pCampo);
   $pCampo str_replace("é""e"$pCampo);
   $pCampo str_replace("ê""e"$pCampo);
   $pCampo str_replace("í""i"$pCampo);
   $pCampo str_replace("ó""o"$pCampo);
   $pCampo str_replace("õ""o"$pCampo);
   $pCampo str_replace("ô""o"$pCampo);
   $pCampo str_replace("ú""u"$pCampo);
   $pCampo str_replace("ü""u"$pCampo);
   $pCampo str_replace("ç""c"$pCampo);
   return $pCampo;
}

function decodeISO(&$val)
{
$val mb_convert_encoding($val$_SESSION['scriptcase']['nm_charset_cep'], "ISO-8859-1");
}


?>

[]s
Allan Medeiros
Analista de Informática
__________________________________________
Companhia de Processamento de Dados da Paraíba
medeiros@codata.pb.gov.br

Endrigo

  • Intermediário
  • ***
  • Mensagens: 242
    • Email
Re:Mudar valor de campo Select pelo OnBlur ou OnChange de outro campo
« Responder #12 Online: Agosto 22, 2013, 02:09:32 pm »
Allan, não funcionou, e a aplicação ficou travada. Não salva, e não movimenta entre os registros, e também não apresenta erros.
Endrigo Rodrigues
(31)3464-1020
CentOS 6 64bits + ScriptCase 8.00.0041 + PostgreSQL 9.3

Allan Medeiros

  • Expert
  • *****
  • Mensagens: 504
    • Email
Re:Mudar valor de campo Select pelo OnBlur ou OnChange de outro campo
« Responder #13 Online: Agosto 22, 2013, 08:12:21 pm »
Aqui deu certo.
Vc modificou alguma coisa?
Quer me mandar um export do teu form pra eu testar?
[]s
Allan Medeiros
Analista de Informática
__________________________________________
Companhia de Processamento de Dados da Paraíba
medeiros@codata.pb.gov.br

Endrigo

  • Intermediário
  • ***
  • Mensagens: 242
    • Email
Re:Mudar valor de campo Select pelo OnBlur ou OnChange de outro campo
« Responder #14 Online: Agosto 22, 2013, 10:40:24 pm »
Aqui deu certo.
Vc modificou alguma coisa?
Quer me mandar um export do teu form pra eu testar?
[]s

Deu certo aqui. Parabéns Allan.
Endrigo Rodrigues
(31)3464-1020
CentOS 6 64bits + ScriptCase 8.00.0041 + PostgreSQL 9.3