[RESOLVIDO] Problema com campo moeda

Bom dia,
estou enfrentando graves problemas com o campo moeda, já verifiquei configurações regionais, o campo está tipo decimal (10,2) tanto no banco MySQL quanto no formulário e simplesmente começou a apresentar problemas:

Se o valor é 1500,00 ele salva na tabela de item corretamente, porém se eu precisar utilizar a macro sc_master_update e salvar o total na tabela pai, o valor vai para 15000,00.

Antes de dar o update na tabela pai já utilizei a macro sc_format_num.

A variável $valor_total é alimentada através de uma consulta.

[code]sc_format_num($valor_total, ‘’, ‘.’, 2, ‘S’, ‘1’, ‘’);

sc_exec_sql(“UPDATE tabxxxx SET valor_total = ‘$valor_total’, valor_total_materiais = ‘$valor_total_materiais’, valor_total_despesas = ‘$valor_total_despesas’, valor_total_equipamentos = ‘$valor_total_equipamentos’, valor_total_imposto = ‘$valor_imposto’ WHERE cod_orcamento = {cod_orcamento}”);
[/code] e não adianta.

O problema começou a aparecer esse ano, em 2018 funcionava normalmente e a aplicação não teve nenhuma alteração.

Estou hospedado com o Hoo.st e com chamados abertos sem retorno.

Vi um problema parecido aqui no fórum, tentei as alternativas apresentadas mas não obtive sucesso.

Almas caridosas conto com vocês!

Obrigado.

Já fez o teste de aplicar a soma via banco? Ler o total da tabela detalhe e aplicar na mestre. Sei que o desejo é exibir o total no form mestre, mas falo isso pelo menos como teste.

Renato,

na verdade já faço isso toda vez que insiro um registro na detalhes:

[code]sc_lookup(dataset,“SELECT SUM(valor_total), SUM(qte_hora), SUM(custo_hora * qte_hora)
FROM
orcamento_equipamentos
WHERE
cod_orcamento_itens = '”.{cod_orcamento_itens}."’
AND
cod_orcamento = ‘".{cod_orcamento}."’
AND
num_revisao = ‘".{num_revisao}."’

			   ");    

$total_equipamento = {dataset[0][0]};
$horas_equipamento = {dataset[0][1]};
$custo_equipamento = {dataset[0][2]};

[/code]

ai pego esses valores e aplico


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

e depois dou update no banco.

Seria isso o que você sugeriu?

Faça o UPDATE primeiro, depois use o sc_format_num e o sc_master_value, que deve resolver.

Jailton,

como a situação não acontece em todos os registros, vou fazer como você sugeriu e depois de alguns testes posto o retorno.

Obrigado.

Seria isso sim, mas alterando o total do mestre no banco logo após o insert do detalhe e usando sc_commit_trans().
Outro detalhe é que vc comentou que não acontece com todos os registros. Vc tem certeza dos valores que estão no banco, fez uma consulta por fora do sistema pra ter certeza dos valores envolvidos?

Sim Rodrigo,

os valores estão no banco.

Ex do comportamento estranho do sistema

estou alterando as rotinas conforme orientação do Jailton.

Estranho é que sempre funcionou e de repente acontece essas coisas, o que as vezes desanima usar o scriptcase é esse tipo de situação, fora que tenho Suporte PAGO e a turma lá sequer respondeu que estaria analisando.

Consegui chegar no momento que o erro acontece:

ao incluir um item no detalhe (grid_editável_view) e salvar o erro ocorre se o usuário clicar no botão Salvar do formulário Mestre.

Porém no formulário Mestre não tem nenhuma função formatar esses campos e nenhum código dos eventos onAfterUpdate e onBeforeUpdate

Antes de Clicar no Botão Salvar (formulário mestre):

Após clicar no Botão Salvar (formulário mestre):

Ja implementei a sugestão do Jailton e continua apresentando o problema.

Faz muito tempo, mas acho que já resolvi isso uma vez dando um redir em pra aplicação mestre apontando o registro pra abrir. É um reload forçcado e gambiarra total rsrs.

Uma tentativa é toda vez que clicar no salvar do detalhe executar um salvar no mestre automaticamente

esse código nas onAfter, no detalhe.

$javascript_function = ‘parent.nm_atualiza’; // Javascript function name
$javascript_parameters = array(‘alterar’);
sc_ajax_javascript($javascript_function, $javascript_parameters);

uso isso pois o usuário tem mania de alterar campos no mestre vai para o detalhe salva no detalhe e acha que os dados alterados no mestre são salvos também mas não.

  • Não sei se o código funciona para as versões mais recentes do SC.

Haroldo,

seu código funciona nas versões mais novas do SC.

Após algumas tentativas ainda dando erro, reposicionei o código e alterei


$javascript_function   = 'parent.nm_atualiza';  // Javascript function name
	$javascript_parameters = array('alterar');
	sc_ajax_javascript($javascript_function, $javascript_parameters);

 	sc_format_num($custo_equipamento, '', ',', 2, 'S', '1', '');    

	sc_master_value('valor_total_equipamentos', $custo_equipamento);

===> sc_format_num($custo_equipamento, ‘’, ‘,’, 2, ‘S’, ‘1’, ‘’); no lugar da vírgula estava (.) pois estava tentando forçar a formatação antes de salvar no banco, sendo assim a macro ===> sc_master_value(‘valor_total_equipamentos’, $custo_equipamento); gerava o erro.

Agora funcionou!

Minha preocupação é que antes já funcionava e fica inviável corrigir um sistema inteiro em todas as telas geradas a partir de novas releases que podem apresentar esse problema.

Obrigado a todos pela atenção!