Totalização de uma campo de consulta SQL não funciona!

Bom dia,

Estou migrando um sistema escrito originalmente na versão 5 do Scriptcase para a novo versão 9.6. Estou rescrevendo o sistema na versão 9.6 tomando como parâmetro o sistema feito na versão 5.
Em uma dada aplicação de consulta eu necessito fazer um cálculo de porcentagem simples. A SQL dessa aplicação é:

SELECT EM.NM_EMPRESA AS NM_EMPRESA,
EX.DT_LANCAMENTO AS DT_LANCAMENTO,
sum(nvl(EX.QTDE_EXPORTADA*EX.VLR_UNITARIO,0)) AS TOTAL
FROM TB_MOVIMENTO M INNER JOIN TB_MOV_PRODUTO MOV ON M.NUM_FORM_PADRAO = MOV.NUM_FORM_PADRAO AND M.NUM_NCM = MOV.NUM_NCM
INNER JOIN TB_LOCALIDADE PA ON M.ID_LOCALIDADE = PA.ID_LOCALIDADE
INNER JOIN TB_EMPRESA EM ON M.CNPJ_EMPRESA = EM.CNPJ_EMPRESA
INNER JOIN TB_PRODUTO PR ON MOV.ID_PRODUTO = PR.ID_PRODUTO
LEFT JOIN TB_EXPORTACAO EX ON MOV.NUM_FORM_PADRAO = EX.NUM_FORM_PADRAO
WHERE (M.NUM_FORM_PADRAO) = MOV.NUM_FORM_PADRAO
GROUP BY EM.NM_EMPRESA,EX.DT_LANCAMENTO
ORDER BY NM_EMPRESA

Eu utilizo o recurso Quebra para poder formatar apresentação dos resultados da consulta usando o campo NM_EMPRESA como parâmetro.
Para o cálculo da porcentagem eu utilizei o recurso de Totalização que a aplicação de consulta disponibiliza para fazer a soma parcial do campo TOTAL agrupado em função da quebra de NM_EMPRESA da consulta.
Eu consigo criar um campo que deveria conter a somatória de TOTAL que recebeu o nome TOTAL_sum. No cálculo da porcentagem TOTAL_sum é usado como o divisor da fórmula.
Eu utilizo o evento onRecord para fazer o cálculo. O cálculo é:

{PARTICIP} = (({TOTAL}/{TOTAL_sum})*100);

Ob.: o campo {PARTICIP} é criado manualmente.

Entretanto, quando executoi a aplicação ocorre o erro “Division by zero”.
Verifiquei o campo da somatória e ele está zerado. Ou seja, a somatória não está sendo feita.
O que posso verificar na configuração da aplicação para resolver esse problema.

usa oracle? se for mysql ‘acho’ que o nvl não funciona

já verificou se todos os campos retornados tem valor? como usou o left join para o EX pode ser que não encontre algum.

ou tente no on record colocar uma condição, pode ser que o primeiro esteja com 0 ai vai dar erro na divisão por zero
tipo:

if({TOTAL_sum} > 0)
    {PARTICIP} = (({TOTAL}/{TOTAL_sum})*100);
}
else
{
     {PARTICIP} = 1;  //ou o valor inicial
}

Bom dia Jair,

Obrigado por responder!
O banco de dados é Oracle sim.
Apesar de um ou outro registro vir com zero, os outros registro de uma dada empresa vem com algum valor de modo que a somatória em TOTAL_sum não devesse vir zerada!
Já fiz essa condição, mas como toda a somatória das diferentes empresa vem zeradas, o cálculo não é feito e o campo {PARTICIP} vem em branco!
Acredito que deve ser alguma coisa na configuração da aplicação que deve estar faltando para que TOTAL_sum venha zerado!
Digo isso porque a aplicação original funciona essa somatória e a divisão nunca da erro!

estes errinhos matam, pode ser uma coisa simples, só fazendo testes para ver, coloca no onrecord um echo “
”.{TOTAL_sum}; ai vai saber em em que momento ela se perde e pode achar problema, talvez tenha que controlar em uma global.

Olá Jair,

Todas as totalizações vem zeradas! Não tem exceção alguma!