erro no campo calculado

03/02/2016

0

Está ocorrendo o erro no campo calculo no seguinte momento

---------------------------
Monitor
---------------------------
Floating point division by zero.
---------------------------
OK
---------------------------

se houver uma divisão por um valor igual ele ocorre esse erro,

procedure TDMmonitora.QueryPedidosCalcFields(DataSet: TDataSet);
begin
DMmonitora.QueryPedidos.FieldByName('totalcalcdesconto').Value := ( (1-(DMmonitora.QueryPedidos.FieldByName('desconto_real').Value)/100))*(DMmonitora.QueryPedidos.FieldByName('total_produtos').Value );
DMmonitora.QueryPedidos.FieldByName('margem').Value := (((DMmonitora.QueryPedidos.FieldByName('totalcalcdesconto').Value - DMmonitora.QueryPedidos.FieldByName('total_liquido').Value) / DMmonitora.QueryPedidos.FieldByName('total_liquido').Value)*100 );
end;
Valmir Inacio

Valmir Inacio

Responder

Posts

04/02/2016

Ruy Salles

Acredito que algum registro está retornando nulo.

Tente executar substituindo .Value para .asFloat

Espero ter ajudado
Responder

04/02/2016

Mateus Ribeiro

Bom dia! Tente fazendo a seguinte alteração

if DMmonitora.QueryPedidos.FieldByName('desconto_real').Value > 0 then
    DMmonitora.QueryPedidos.FieldByName('totalcalcdesconto').Value := ( (1-(DMmonitora.QueryPedidos.FieldByName('desconto_real').Value)/100))* (DMmonitora.QueryPedidos.FieldByName('total_produtos').Value )
  else
    DMmonitora.QueryPedidos.FieldByName('totalcalcdesconto').Value := 0;

  if (DMmonitora.QueryPedidos.FieldByName('totalcalcdesconto').Value - DMmonitora.QueryPedidos.FieldByName('total_liquido').Value) > 0 then
    DMmonitora.QueryPedidos.FieldByName('margem').Value := (((DMmonitora.QueryPedidos.FieldByName('totalcalcdesconto').Value - DMmonitora.QueryPedidos.FieldByName('total_liquido').Value) / DMmonitora.QueryPedidos.FieldByName('total_liquido').Value)*100 )
  else
    DMmonitora.QueryPedidos.FieldByName('margem').Value:= 0;


Boa sorte!
Responder

04/02/2016

Valmir Inacio

Realmente é um campo que tem valor zero, porem esses dois campos trabalham com 2 tabelas unidas, uma tem os produtos e outra os serviços, acredito que o valor igual a zero
vem quando não há produtos pois os campos estão referenciados aos produtos. tenho que corrigir a partir do script na ado ou aqui mesmo:

segue o codigo da Ado
With dmmonitora.querypedidos do
begin
SQL.Clear;
SQL.Add(' with CTE_Sum as (SELECT CODIGO, sum (QUANTIDADE * UNITARIO) as total_produtos, sum(QUANTIDADE * CUSTO_LIQUIDO) as total_liquido ');
SQL.Add(' from ITENS_PED1 group by CODIGO ) ');
SQL.Add(' ,CTE_Sum2 as ( SELECT CODIGO,sum(total) as servicos from os group by CODIGO ) ');
SQL.Add(' SELECT i.CODIGO, i.VENDEDOR_NOME,i.desconto_real,i.hora, i.CLI_NOME,i.TOTAL,i.DATA,i.cliente,i.vendedor,j.nome,l.nome, e.total_liquido,g.servicos, ');
SQL.Add(' e.total_produtos from PEDIDOS_ORCAMENTOS i INNER JOIN CTE_Sum e ON i.codigo = e.CODIGO LEFT JOIN CTE_Sum2 g ON (i.codigo = g.CODIGO)');
SQL.Add(' LEFT JOIN clientes j ON (i.cliente= j.cliente_id) LEFT JOIN vendedores l ON (i.vendedor =l.codigo) ');
SQL.Add(' where i.Data >= ');
SQL.Add(QuotedStr(FormatDateTime('yyyy/mm/dd', DateTimePicker1.Date)) + ' and i.DATA <= ');
SQL.Add(QuotedStr(FormatDateTime('yyyy/mm/dd', DateTimePicker2.Date)));

então se só houver g.servicos e não tiver nenhum valor vindo para os campos calcularem que são total_produtos e total_liquido

Testei as duas soluções mas acredito que seja isso
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar