Problema com evento ajax

(pedroms) #1

galera to fazendo um script para quando eu digitar um codigo de serie, o sistema busque o codigo de cliente no banco e grave o codigo vai abaixo.

sc_lookup(dataset,"select cliente from Cliente where serial = {cliente}");
if(empty({dataset}))
{
 sc_ajax_message("Cliente não encontrado");
}else{   //aqui o sistema tinha que pegar o codigo de cliente e colocar no campo do form.
$cli = {dataset[0][0]};
sc_ajax_message($cli);
{cliente} = $cli;
}

abaixo a img da tela;

(Haroldo) #2

Eu passei esse problema na última segunda feira para bug@netmake.com.br.
Hoje vi o email confirmando o BUG.

(Diogo Toscano) #3

Esse caso dele acredito q seja diferente … pois ele ta com aquele problema … num cmapo autocomplete tentando pegar o que foi digitado …

Muda o teu campo para numero normal … e ao invez de atribuir o nome do cliente, ja que voce deve querer gravar o codigo e mostrar o nome, usar lookup de consulta que existe no formulario.
Ou seja, o que q pessoa digitar, depois o campo vai fazer o lookup e exibir o nome ao lado.

E ai seu codigo ajax seria apenas:

sc_lookup(dataset,"select cliente from Cliente where serial = {cliente}"); if(empty({dataset})) { sc_ajax_message("Cliente não encontrado"); }

(Haroldo) #4

mas este me parece ser um autocomplete com captura, não sensível a digitação.

(pedroms) #5

a ideia é o seguinte: o campo cliente ele pode ser pesquisado com o link para consulta de clientes, ou ser digitado o numero de serie, dai eu fiz o lookup para tentar pelo serial achar o codigo de cliente.

acredito ser bug sim pois, no sc_ajax_message ele retorna o codigo do cliente, mais quando coloco
{cliente} = {dataset[0][0]} ele não consegue substituir o serial digitado pelo codigo de cliente.

em alguns testes feitos consegui fazer
if strlen > 8 {
{cliente} = ‘12345’;
}
e funcionou. mais o cliente recebendo o dataset não vai… e agora zé? rsrs.

(Diogo Toscano) #6

so pra testar igual aqui, cola a estrutura da tabela clientes e dessa de chamado.

(Tiago Kirsten) #7

Fiz uns testes aqui e funcionou normalmente da seguinte maneira:

sc_lookup(dataset, "
SELECT
cd_departamento||’ - '||
ds_departamento
FROM
manutencao.tb_departamento
WHERE
cd_departamento = {campo1}");

if (FALSE === {dataset})
{
sc_error_message(“Ocorreu um erro no acesso ao banco de dados.
”);
}
elseif (empty({dataset}))
{
sc_error_message(“Nenhum valor foi retornado pelo banco.
”);
}
else
{
{campo1} = {dataset[0][0]};
}

ta deste jeito ai?

(Diogo Toscano) #8

Por isso pedi a estrutura … testei aqui e tambem funcionou.

(pedroms) #9

extrutura da tabela:
{mysql 5}
tabela Cliente
id not null auto_increment,
cliente varchar(6),
nomecliente(50),
serial varchar( 8 );

codigo executado no onchange do ajax.

if strlen < 7 {
//aqui vai o codigo para verificar se o cliente esta em debito e bla bla bla
} else {
sc_lookup (dataset,"select cliente from Cliente where serial = {cliente});
if ({dataset} === false) {
sc_error_message(“Ocorreu erro ao acessar o Banco de dados”);
} elseif (empty({dataset})) {
sc_ajax_message("Cliente não encontrado);
} else
{
{cliente} = {dataset[0][0]};
}

resalto, se eu trocar {cliente} = {dataset[0][0]} por sc_ajax_message({dataset[0][0]}) o sistema mostra o codigo do cliente.
se ficar {cliente}={dataset[0][0]} o campo cliente continua com o numero de serie que eu digitei.
querem que eu coloque no ar para voces testarem?

aproveitando o ensejo. alguem pode me explicar o pq do dataset[0][0]? se eu tiver um select cliente, telefone, contato.

como eu acho o cliente, ou telefone ou contato?
Abraços

(belgadata) #10

aproveitando o ensejo. alguem pode me explicar o pq do dataset[0][0]? se eu tiver um select cliente, telefone, contato.

como eu acho o cliente, ou telefone ou contato?
Abraços

Amigo : dataset[L][C] corresponde a L -> numero da linhas retornada e C -> Numero da coluna da Linha. A primeira linha e primeira coluna começa com 0 (zero), ou seja, quando voce seleciona dados de uma tabela, eles são retornados em uma matriz com duas dimensões.
Respondendo conforme seu exemplo: o conteudo de cliente dataset[0][0], de telefone dataset[0][1], de contato dataset[0][2] . Isso para o primeiro registro retornado. No segundo registro seria: cliente dataset[1][0], de telefone dataset[1][1], de contato dataset[1][2]
Espero ter ajuda !

(pedroms) #11

belgadata obrigado ajudou sim, e foi bem claro.

agora vamos ver se o pessoal consegue dar uma luz quanto ao meu codigo rsrs

(Tiago Kirsten) #12

Esse código que você postou, você copiou ou digitou aqui?

Nesse primeiro IF creio que tenha que colocar o campo para contar, está funcionando ai sem o campo? e qual o motivo de usar o ‘strlen’?

Dei uma ajustada, verifica se funciona agora.

if (strlen({campo}) < ‘7’)
{
//aqui vai o codigo para verificar se o cliente esta em debito e bla bla bla
}
else
{
sc_lookup (dataset, “select cliente from Cliente where serial = {cliente}”);
if (FALSE === {dataset})
{
sc_error_message(“Ocorreu erro ao acessar o Banco de dados”);
}
elseif (empty({dataset}))
{
sc_ajax_message(“Cliente não encontrado”);
}
else
{
{cliente} = {dataset[0][0]};
}
}

(Diogo Toscano) #13

agora q eu vi if strlen < 7 { … strlen de qm??

(pedroms) #14

sim sim sim, if strlen({cliente} < 7 { //aqui ele compara se o cliente ta em debito


} else
{ // se chegou aqui tem 8 digitos entao quero ver se acho ele como serial
sc_lookup (dataset,"select cliente from Cliente where serial = {cliente}

}

meu pc ta com problema mal consigo acessar ele no modo seguranca, como eu “backupeio” os dados sem conseguir abrir o sc ?
vou perder meus dados? rsrs