erro no campo calculado
03/02/2016
0
---------------------------
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
Posts
04/02/2016
Ruy Salles
Tente executar substituindo .Value para .asFloat
Espero ter ajudado
04/02/2016
Mateus Ribeiro
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!
04/02/2016
Valmir Inacio
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
Clique aqui para fazer login e interagir na Comunidade :)