Diferença no Saldo com erro

Olá Pessoal,

Tenho uma tabela com a movimentação financeira: descrição, data, tipo e valor. No valor fiz uma rotina para quando gravar no banco Tipo(Entrada, Saída) valor ele recebe saida (-2000) e quando entrada (2000). até ai tudo bem.

Tenho várias grids para mostrar: Todo o período, Dia, Mes e ano.

Na grid no evento OnScriptnit tenho essa rotina:

$sqlE = "select sum(valor) from movimento where tipo = ‘Entrada’ AND month(data)=‘3’ ";
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’, ‘’);

//despesa
$sqlS = "select sum(valor) from movimento where tipo = ‘Saída’ AND month(data)=‘3’ ";
sc_lookup(lookupS,$sqlS);
[glo_Saida] = (empty({lookupS})) ? 0 : {lookupS[0][0]}; //corrigido de: {lookupD[0][0];

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

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

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

No rodaté da consulta chamo as váriáveis globais:

Entradas R$ [glo_Entrada] | Saídas R$ [glo_Saida]

Saldo R$ [glo_Saldo]

Os problemas agora:

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

3º - O saldo não está vindo o valor correto:
Entradas R$ 24.077,05 | Saídas R$ -17.361,88 Saldo R$ 6.716
O Correto seria Saldo R$ 6.715,17

Criou outro tópico sobre um assunto já em discussão?

Mas lá não obtive resposta e nesse caso acredito não ser é um bug da plataforma, por isso abri aqui

Acredito que aqui será da mesma forma.

Como falei no outro tópico: usar global para isso não acho confiável.

Sugestão: Monte um select somente pegando os dois valores de entrada e saida conforme exemplo abaixo
select
sum(case when tipo = ‘Entrada’ then valor else 0 end) as valor_entrada,
sum(case when tipo = ‘Saida’ then valor else 0 end) as valor_saida
from
movimento
where
month(data)=3

Cria uma variável $this->valorRodape e monta o que você quer imprimir com os valores e na definição do rodapé coloque essa variável para ser impressa e veja se vai te atender

Você já fez isso antes @ronaldobraz?

Sim! E em alguns casos eu monto todo um html dentro dessa variável!

Olá Ronaldo muito obrigado pela atenção.

Então vou pegar as entradas e saídas até ai blz consegui fazer.

Agora a dúvida é em relação ao saldo ficaria mais ou menos assim?

$this->valorRodape = $valor_entrada - $valor_saida;

Eu já monto todo o valor que vai ficar no rodapé nessa variável como abaixo:
$this->valorRodape = 'Saldo: '.numbert_format($valor_entrada - $valor_saida, 2, ‘,’, ‘.’);

Olá Ronaldo,

Teria como mostrar a sua rotina como exemplo porque estou levando uma surra aqui nesse bendito Saldo.

No evento onScriptInit você coloca os códigos abaixo:

$sql = “select
sum(case when tipo = ‘Entrada’ then abs(valor) else 0 end) as valor_entrada,
sum(case when tipo = ‘Saida’ then abs(valor) else 0 end) as valor_saida
from
movimento
where
month(data)=3”;

sc_lookup(rs, $sql);

$valorEntrada = {rs[0][0]};
$valorSaida = {rs[0][1]};
$valorSaldo = $valorEntrada - $valorSaida;

$this->valorRodape = 'Entradas R$: '.numbert_format($valorEntrada, 2, ‘,’, ‘.’);
$this->valorRodape .= ’ Saidas R$: '.numbert_format($valorSaida, 2, ‘,’, ‘.’);
$this->valorRodape .= ’ Saldo R$: '.numbert_format($valorSaldo, 2, ‘,’, ‘.’);

Ai é só colocar a variável $this->valorRodape na definição da grid como eu mostrei a imagem no poste anterior.