Problema com Exclusão no Detalhes

Pessoal, tudo bem, estou com um problema no Mestre Detalhe, fiz todos os procedimentos conforme tutoriais no site do Scriptcase, a principio tudo funciona, mas descobri um probleminha.

Quando adiciono vários pedidos nos detalhes ele inclui normalmente, fiz um teste excluindo todos os itens do Detalhe ele exclui e altera o total para zero mas quando atualizo a pagina ele exibe o último registro que foi excluído, veja o update_master abaixo.

sc_lookup(dataset,“select SUM((quantidade*preco_unitario)- desconto) FROM tbl_itens_movimento
WHERE client_id = {client_id}”);

if(!empty({dataset[0][0]}))
{
$total = {dataset[0][0]};
sc_exec_sql(“UPDATE tbl_cliente SET Total = $total WHERE idCliente = {client_id}”);
sc_format_num($total, ‘.’, ‘,’, 2, ‘S’, ‘1’, ‘’);
sc_master_value(‘Total’,$total);
} else {

$total = 0;
sc_format_num($total, ‘.’, ‘,’, 2, ‘S’, ‘1’, ‘’);
sc_master_value(‘Total’,$total);

}

Se tiver 10 registros nos detalhes ele exclui os 10 mas ao atualizar ele deixa 1 resgitro que no caso foi o último excluido, ou se eu incluir apenas 1 registro, ao excluir ele zera o Mestre mas não zera o banco de dados, por isso ao atualizar a pagina do formulario e volta com o valor.

Alguem pode me ajudar.

é porque o SUM deve estar vindo com Nulos por não ter mais registros.

Teste a nulidade e mova zero para o total.

Total já não está zerado.

$total = 0;
sc_format_num($total, ‘.’, ‘,’, 2, ‘S’, ‘1’, ‘’);
sc_master_value(‘Total’,$total);

}

Não entendi Haroldo, onde que vou zerar?

Alguém tem uma solução pro meu problema ainda não consegui resolver.

else {
$total = 0;
sc_format_num($total, ‘.’, ‘,’, 2, ‘S’, ‘1’, ‘’);
sc_master_value(‘Total’,$total);
sc_exec_sql(“UPDATE tbl_cliente SET Total = $total WHERE idCliente = {client_id}”);
}

vc tem que atualizar o mestre no else também.

Na verdade vc atualiza o meste sempre o update pode ficar após o if else.

adiciona um sc_commit_trans() após o update.

Eu coloquei um botão salvar no mestre, aí quando excluo tudo eu clico em salvar e salva no banco também.

Mas vou fazer da forma que vc orientou pra ver se dá certo, também.

Só com o botão salvar mesmo, mas obrigado pela ajuda.

Qual evento vc faz updade?
Cole.aqui seu código.

Ruim excluir itens e clicar em salvar mestre depois isso podelevsr a erros de.sistema apesar de ser uma situação muito incomum remover.todo detalhe.

Coloquei o código no onAfterUpdate, e onAfterDelete, o código que faz a update e o delete é esse abaixo.

sc_lookup(retorno,“select SUM((quantidade*preco_unitario)- desconto) FROM tbl_itens_movimento
WHERE client_id = {client_id}”);

if(!empty({retorno[0][0]}))
{
$total = {retorno[0][0]};
sc_exec_sql(“UPDATE tbl_cliente SET Total = $total WHERE idCliente = {client_id}”);
sc_format_num($total, ‘.’, ‘,’, 2, ‘S’, ‘1’, ‘’);
sc_master_value(‘Total’,$total);
} else {

$total = 0;
sc_format_num($total, ‘.’, ‘,’, 2, ‘S’, ‘1’, ‘’);
sc_master_value(‘Total’,$total);
}

Tentei colocar o Update no final depois do if e do else mas não deu, criei dois Update um para o if e outro para o else e também não deu, analisei o código exemplo (samples) que instalei no meu SC, e ele está com o mesmo problema.

então remova o código de todas esses eventos e coloque o código abaixo no evento onvalidatesucess e teste.

$total = 0;

$_sql="select SUM( (quantidade*preco_unitario) - desconto ) FROM tbl_itens_movimento WHERE client_id = {client_id}";
sc_lookup(retorno,$_sql);

if(!empty($retorno)) { $total = {retorno[0][0]}; }

sc_exec_sql("UPDATE tbl_cliente SET Total = $total WHERE idCliente = {client_id}"); 
sc_commit_trans();

sc_format_num($total, '.', ',', 2, 'S', '1', '');
sc_master_value('Total',$total);

Fiz e deu esses Erros UPDATE tbl_cliente SET Total = WHERE idCliente = 1

Erro ao acessar o banco de dados
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘WHERE idCliente = 1’ at line 1

Mas é exatamente o seu código.

Quando coloquei no onvalidatesucess apresentou este erro, retornei os Eventos anteriores e parou de dar erro, tirando o onvalidatesucess. Agora eu não sei.

Coloca em modo debug para analisar melhor ou copia o código para os eventos onafter insert, update e delete.