A non well formed numeric value encountered

Olá Pessoal,

Tenho uma aplicação de entrada, saída e saldo e preciso mostrar no relatório os respectivos campos.

Ao colocar a função sc_format_num começou a aparecer esse erro.

No evento onScriptInit da consulta tem o seguinte código:

$sqlE = "select sum(valor) from movimento where tipo = ‘Entrada’ ";
sc_lookup(lookupE,$sqlE);

[glo_Entrada] = (empty({lookupE})) ? 0 : {lookupE[0][0]}; // corrigido de: {lookupD[0][0];

sc_format_num([glo_Entrada], ‘.’, ‘,’, 2, ‘S’, ‘1’, ‘’);

No rodapé da consulta chamo a variável global:

Receitas R$ [glo_Entrada]

Bug:
Rodo a aplicação vem tudo certinho mas aparece a seguinte mensagem de erro:
A non well formed numeric value encountered

Versão do SC: 9.6.006

Onde vc alimenta a glo_entrada, use uma variavel local, formate com num_format do php e depois mova para glo_entrada.

1 Curtida

Olá Haroldo,

Fiz conforme a sua dica mas mesmo assim continua a mensagem de erro:

$sqlE = "select sum(valor) from movimento where tipo = ‘Entrada’ ";
sc_lookup(lookupE,$sqlE);

$var_entrada = (empty({lookupE})) ? 0 : {lookupE[0][0]}; // corrigido de: {lookupD[0][0];

sc_format_num($var_entrada, ‘.’, ‘,’, 2, ‘S’, ‘1’, ‘’);

[glo_Entrada] = $var_entrada ;

Coloque em modo debug e rode a quero direto no banco

1 Curtida

Olá Haroldo,

1 - Coloquei em modo debug, e aparentemente está tudo ok:

pdo-mysql): select count(*), sum(valor) from movimento (pdo-mysql): SELECT id_categoria, data, descricao, tipo, valor, id_membro, id_movimento from movimento LIMIT 0,12 (pdo-mysql): SELECT valor FROM movimento WHERE tipo = ‘Entrada’ AND id_movimento = ‘1’ (pdo-mysql): SELECT valor FROM movimento WHERE tipo = ‘Saída’ AND id_movimento = ‘1’ (pdo-mysql): select sum(valor) from movimento where tipo = ‘Entrada’ (pdo-mysql): select sum(valor) from movimento where tipo = ‘Saída’

Atenção
A non-numeric value encountered

2 - Rodei a query direto no banco e funcionou perfeitamente

1 Curtida

esse erro deve ocorrer em alguma linha do código fonte.
Verifique no código fonte a linha do erro e apresente aqui as 10 linhas anteriores do código e as 10 posteriores.

1 Curtida

Acredito que o problema esteja na soma…
o campo valor, está somando corretamente ?
pega apenas 1 registro (usa where) que você tenha certeza que o valor está vindo correto e vê se vai dar o msm problema…

1 Curtida

No intuito de querer ajudar o amigo @danyx, eu acho que o problema está nesta linha:

$var_entrada = (empty({lookupE})) ? 0 : {lookupE[0][0]};

Experimenta da forma abaixo e nos diga se o erro persiste ou não:

$var_entrada = !isset({lookupE}) ? 0 : {lookupE[0][0]}; 
1 Curtida

@Kleyber, ao executar sc_lookup o dataset é criado ou como array ou com valor null, ou seja o empty vai pegar nas 2 situações mas o atributo vai ser criado de qualquer forma.

Basta executar um var_dump depois do sc_lookup.

Você pode fazer !isset({lookupE[0][0]})

2 Curtidas

Senhores obrigado pela Ajuda, estava rodando em localhost, mas quando subi para o servidor de produção a mensagem de erro sumiu.

Só que tem mais dois erros:

1º - Na variável globlal Saldo que pega a entrada e diminui pela saida, na subtração não funciona, mas quando coloco a soma ele subtrai e dá certo. Como pode isso?

2 º - Na formatação da variavel global saldo não aparece os dois últimos dígitos.
Ex: Saldo R$ -3.244
O correto seria R$ -3.244,00

Está assim a rotina:

[glo_Saldo] = [glo_Entrada] + [glo_Saida];
$saidaSaldo = [glo_Saldo];

sc_format_num($saidaSaldo, ‘.’, ‘,’, 2, ‘S’, ‘1’, ‘’);

usar global em app grid para isso acho meio estranho e arriscado.

1 Curtida

Qual seria a solução para esse caso?

Não sei qual o objetivo da grid, mas tudo que se relaciona a entrada, saida e saldo eu resolvo diretamente no sql principal da consulta ou criando tabela temporária populada antes da carga da aplicação.

1 Curtida

A grid é para mostrar todas as entradas e saídas e no rodapé pegar todas as entradas e saídas e saldo do mês X por exemplo.

se todos os registros forem referentes a 1 mês (previamente já filtrado) a própria sumarização do Scriptcase resolve o problema.

Nas quebras vc manipula a exibição dos totais.

1 Curtida