Fórum Problemas com InternalCalc #431280
19/12/2012
0
Uma Tabela Master com o campo InternalCalc TOTAL_GERAL e uma Tabela Detail com o campo InternalCalc VALOR_PERCENT.
O Campo VALOR_PERCENT é calculado com base do valor TOTAL_GERAL, isto é, o InternalCalc do DETAIL depende do InternalCalc do Master, só que isso não funciona.
Ronaldo Lanhellas
Curtir tópico
+ 0Posts
19/12/2012
Ronaldo Lanhellas
Gostei + 0
19/12/2012
Ronaldo Lanhellas
Gostei + 0
19/12/2012
Claudia Nogueira
Está usando Table ou Query?
Não é aconselhado usar campo calculado em Table/Query que retorna muitos registros, o certo é usar Query e já trazer as informações da sentença SQL.
Gostei + 0
19/12/2012
Ronaldo Lanhellas
Gostei + 0
19/12/2012
Claudia Nogueira
E qual o cálculo do outro campo?
O que tem no CommandText do TSqlDataSet?
Gostei + 0
19/12/2012
Ronaldo Lanhellas
Tenho uma Tabela PROJETO (Master), SERVICOS (Detail), PRODUTOS (Detail), COMISSOES (Detail).
Nas Tabelas SERVICOS e PRODUTOS tenho em ambas 1 campo chamado TOTAL (aggregate). Na Tabela PROJETO tenho um InternalCalc chamado TOTAL_GERAL que soma TOTAL DE SERVICOS + TOTAL DE PRODUTOS.
Na Tabela COMISSOES tenho um campo InternalCalc VALOR_PERCENT que pega o TOTAL_GERAL da Tabela PROJETO e retira 10% deste. Aqui ocorre o problema: Identifiquei que os Campos Calculados do Detail são executados primeiro do que do Master, dessa forma eu não tenho como pegar o TOTAL_GERAL se ele ainda nem foi calculado.
Gostei + 0
20/12/2012
Ronaldo Lanhellas
Gostei + 0
20/12/2012
Claudia Nogueira
SELECT p.id, p.nome, SUM(s.total) AS total_servico,
SUM(p.total) AS total_produto,
SUM(s.tota + p.total) AS total_geral
FROM projeto pj
LEFT OUTER JOIN servicos s ON (s.id_projeto = pj.id)
LEFT OUTER JOIN produtos p ON (p.id_projeto = pj.id)
GROUP BY 1,2
E da comissão assim:
SELECT c.id, c.nome,
SUM((s.tota + p.total) - ((s.tota + p.total) * 10 / 100)) AS VALOR_PERCENT
FROM comissoes c
LEFT OUTER JOIN projeto pj ON (pj.id = c.id_projeto)
LEFT OUTER JOIN servicos s ON (s.id_projeto = pj.id)
LEFT OUTER JOIN produtos p ON (p.id_projeto = pj.id)
GROUP BY 1,2
Vai ter erro de digitação pois não tenho a estrutura de suas tabelas.
Se quiser alguma coisa mais específica, posta a estrutura das tabelas.
Gostei + 0
20/12/2012
Ronaldo Lanhellas
Gostei + 0
20/12/2012
Claudia Nogueira
Gostei + 0
20/12/2012
Ronaldo Lanhellas
Veja, 1 PROJETO pode ter 1:N COMISSOES, onde em cada linha da tabela COMISSAO eu tenho uma PERCENTAGEM, vamos supor que seja 5%. Então o campo VALOR_PERCENT deve fazer:
cdsCOMISSAO.FieldByName('VALOR_PERCENT').AsFloat:= (cdsCOMISSAO.FieldByName('PERCENT').AsFloat * / 100) + cdsPROJETO.FieldByName('TOTAL_GERAL').AsFloat;
Gostei + 0
20/12/2012
Ronaldo Lanhellas
Gostei + 0
23/12/2012
Ronaldo Lanhellas
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)