Problemas com InternalCalc
Bom gente, tenho um campo na minha tabela que se chama COMISSAO, este campo é calculado da seguinte forma:
VALORTOTAL * 0.1
Até ae tudo bem, então coloquei o código no evento OnCalcFields do CDS e deixei o campo como InternalCalc, porém quando vo executar o Sistema da o erro: name not unique in this context.
Então resolvi deixar o campo como fkData mesmo, então o sistema rodou normal, porém ao fazer o Calculo deste campo da estouro de pilho (stack overflow).
O que fazer ?
VALORTOTAL * 0.1
Até ae tudo bem, então coloquei o código no evento OnCalcFields do CDS e deixei o campo como InternalCalc, porém quando vo executar o Sistema da o erro: name not unique in this context.
Então resolvi deixar o campo como fkData mesmo, então o sistema rodou normal, porém ao fazer o Calculo deste campo da estouro de pilho (stack overflow).
O que fazer ?
Ronaldo Lanhellas
Curtidas 0
Respostas
Ronaldo Lanhellas
21/06/2011
Este é o codigo para calcular a comissão, dentro dele já tem outros campos sendo calculados também, como o VALOR_PENDENTE:
with DataSet do
begin
// Calcula o Valor pendente do Vendedor
FieldByName('VALOR_PENDENTE').Value := FieldByName('VALOR_A_PAGAR').AsFloat - FieldByName('VALOR_PAGO').AsFloat;
// Calcula % da Comissão e o Valor da Comissão
/// //////////////////
// Se o vendido for menor que 50% então ele só receberá 30% do valor total vendido, se for maior ele recebe 40%
if ((cdsDistribuicao_Produto.FieldByName('qtdTotalVendido').Value * 100) / cdsDistribuicao_Produto.FieldByName
('qtdTotalDistribuido').Value) < 50 then
begin
FieldByName('COMISSAOREAL').AsFloat := cdsDistribuicao_Produto.FieldByName('valorTotalVendido').Value * 0.3;
FieldByName('COMISSAOPERC').ASInteger := 30;
end
else
begin
FieldByName('COMISSAOREAL').AsFloat := cdsDistribuicao_Produto.FieldByName('valorTotalVendido').Value * 0.4;
FieldByName('COMISSAOPERC').ASInteger := 40;
end;
/// /////////////////////////////////////////////////////////////////////
// Calcula o valor_a_pagar pelo Vendedor. Com base no : totalVendido - suaComissao
FieldByName('VALOR_A_PAGAR').Value := cdsDistribuicao_Produto.FieldByName('valorTotalVendido').Value - FieldByName
('COMISSAOREAL').Value;
end;
with DataSet do
begin
// Calcula o Valor pendente do Vendedor
FieldByName('VALOR_PENDENTE').Value := FieldByName('VALOR_A_PAGAR').AsFloat - FieldByName('VALOR_PAGO').AsFloat;
// Calcula % da Comissão e o Valor da Comissão
/// //////////////////
// Se o vendido for menor que 50% então ele só receberá 30% do valor total vendido, se for maior ele recebe 40%
if ((cdsDistribuicao_Produto.FieldByName('qtdTotalVendido').Value * 100) / cdsDistribuicao_Produto.FieldByName
('qtdTotalDistribuido').Value) < 50 then
begin
FieldByName('COMISSAOREAL').AsFloat := cdsDistribuicao_Produto.FieldByName('valorTotalVendido').Value * 0.3;
FieldByName('COMISSAOPERC').ASInteger := 30;
end
else
begin
FieldByName('COMISSAOREAL').AsFloat := cdsDistribuicao_Produto.FieldByName('valorTotalVendido').Value * 0.4;
FieldByName('COMISSAOPERC').ASInteger := 40;
end;
/// /////////////////////////////////////////////////////////////////////
// Calcula o valor_a_pagar pelo Vendedor. Com base no : totalVendido - suaComissao
FieldByName('VALOR_A_PAGAR').Value := cdsDistribuicao_Produto.FieldByName('valorTotalVendido').Value - FieldByName
('COMISSAOREAL').Value;
end;
GOSTEI 0
Ronaldo Lanhellas
21/06/2011
Resolvido !!!
Descobri que o Intercalc e o Calculated Fields só funciona em campos que não são "nativos" da minha tabela, ou seja, são criados em tempo de projeto na propria IDE.
Descobri que o Intercalc e o Calculated Fields só funciona em campos que não são "nativos" da minha tabela, ou seja, são criados em tempo de projeto na propria IDE.
GOSTEI 0