Campos Calculados IBO - Dúvida 2

Delphi

22/04/2005

Pessoal, vou postar aki um exemplo que fiz no meu sistema com campos calculados, um funcionando e o outro nao, pra ver aonde podemos chegar com o intuito de tirar dúvidas que persistem em mertelar a minha cabeça e quem sabe de um montão de gente de nossa comunidade.

a bronca é com os campos calculados do IBO, o primeiro exemplo está funcionando numa boa, mas gostaria de informações se a minha linha de penssamento está correta.

// cálculo do total das horas normais previsto
if AField.FieldName = ´TOTALHORASPREVISTO´ then
begin
index := 1;
for index := 1 to 2 do
begin
if index = 1 then
begin
turno1 := (arow.byname(´PREVISTO_HORA_FINAL´).AsDateTime -
arow.byname(´PREVISTO_HORA_INICIAL´).AsDateTime) ;
AField.AsDateTime := (turno1+turno2);
end;
if index = 2 then
begin
turno2 := (arow.byname(´PREVISTO_HORA_FINAL´).AsDateTime -
arow.byname(´PREVISTO_HORA_INICIAL´).AsDateTime) ;
end;
end;
end;

esse exemplo acima, criei uma variavel index pra saber em que turno (na minha grid), está posicionada o ponteiro de dados, tanto, que apos a criação dessa variavel, verifico em qual turno está o ponteiro e alimento uma variavel turno1, faço o mesmo pro outro turno e na verificação do turno1, retorno ao grid um somatório dos valores das 2 variáveis que são alimentadas com os dados dos 2 turnos.

funciona numa boa, mas se por exemplo, eu pegar a linha de código que fica situada na primeira condição e a colocar na segunda condição, fica tudo doido na grid.

Acima já tem uma dúvida em questão.

agora vamos a um problema mais chatinho:

essa rotina abaixo verifica a quantidade de horas extras:

if AField.FieldName = ´HORASEXTRASTRABALHADO´ then
begin
afield.AsDateTime :=(arow.byname(´TOTALHORASTRABALHADO´).AsDateTime) -
(arow.byname(´LIMITE_HORA_NORMAL_DIA´).AsDateTime);
end;

o que ela me retorna um valor correto, agora só se que ele apresenta o valor na grid abaixo da grid corrente, onde o ponteiro de dados está situado.

isso é errado e vai dar um problemão mais a frente.

Vale ressaltar que esses erros que coloquei acima, estão descritos de uma maneira bem mastigada, que na realidade estão me dando a maior dor de cabeça, e atrasando o projeto, que é de uma folha de apuração de ponto.

Se tiverem exemplos, aplicações ou mesmo units onde puder de ajudar com uma maior gama de informações. fico agradecido.

Technos


Technos

Technos

Curtidas 0

Respostas

Technos

Technos

22/04/2005

Só lembrando:

Pelo o que andei percebendo com essa rotina oncalculateFields do IBO query, é que a mesma trabalha linha por linha da tabela, ou seja, se voce faz um calculo, ele replica o mesmo calculo pra todos os registros.

De imediato, notei isso, estou certo ou errado ?


GOSTEI 0
Technos

Technos

22/04/2005

observando a questão, estou notando um comportamento do IBO em relação a campos calculados:

Ele nao usa como parametro de cálculo de um outro campo calculado, o valor de um campo calculado...

Ainda mais na minha questão, pois estou exibindo os valores desses calculos diretamente numa grid.

Vajamos por que:

Tentei realizar uma soma por exemplo... ele fez e eu exibi na grid. Até aí tudo bem. Mas, quando eu pego o valor dessa soma, e na mesma grid, na mesma ´TUPLA´ de registro, tento realizar alguma operação com esse valor para alimentar outro campo calculado, ele faz o cálculo, mas só exibe na ´TUPLA´ abaixo da corrente.

Penssei numa questão de sincronismo... mas nao deu certo.

o que esto uachando é isso, o valor de um campo calculado nao pode ser usado como parametro de um outro campo calculado, na mesma linha de registro.

Sabem algo sobre isso ?
A linha de penssamento que estou seguindo está correta ?

Desde já agradeço.

Technos


GOSTEI 0
POSTAR