Totalizar valor da variável

Delphi

30/08/2010

Amigos

Como posso obter o total do valor armazenado?

Ex.

Tenho a tabela e cada item recebe um valor. Ao final, todo valor deverá ser somado.

var
hr1   : TDateTime;
hr2   : TDateTime;
hrt   : TDateTime;
begin
  hr1 := sdsTabela.FieldByName('INI_PAUSA').AsDateTime;
  hr2 := sdsTabela.FieldByName('FIM_PAUSA').AsDateTime;
  hrt := hr2-hr1;
  (frxRelatorio.FindObject('Total_Pausa') as TfrxMemoView).Text := TimeToStr(hrt);
end;


Até aí tudo bem!
E pra colocar um total do hrt?
Vejo que preciso de mais uma variável, certo?

Ex. visualizado!

COD    INICIO   FIM       TOTAL
01       13:00    13:40    00:40
02       14:00    14:30    00:30

TOTAL GERAL                01:10
Elton Ésqui

Elton Ésqui

Curtidas 0

Respostas

Eriley Barbosa

Eriley Barbosa

30/08/2010

Você pode criar um campo agregado no simpleDataset.
GOSTEI 0
Elton Ésqui

Elton Ésqui

30/08/2010

Não sei como faz isso!
Eu tentei por osmose, mas quando adiciono esse campo os outros campos somem.
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

30/08/2010

Selecione o ClientDataset, e modifique a sua propriedade AggregatesActive para True a fim de habilitar o uso de campos agregados.   Aplique um duplo clique no ClientDataset e no seu editor de campos clique com o botão direito do mouse e selecione a opção New Field.   Na tela de configuração do campo, defina sua propriedade Name como VirtTotalGeral, sua propriedade Type como Time e em Field Type, selecione a opção Aggregate e em seguida clique no botão OK para criar o campo.   O campo agregado aparece numa área destacada em virtude de não haver uma ocorrência deste para cada registro como no campo calculado convencional, este ocorre uma vez só para todo o ClientDataSet. Prosseguindo com a sua configuração, selecione o campo VirtTotalGeral no editor de campos e modifique a sua propriedade Active para True a fim de habilitarmos o seu uso. na propriedade Expression defina o seguinte comando SUM(Campo), podemos notar bastante semelhança com o comando referente na linguagem sql, justamente para agregar valores calculados ou não, numa amostragem a partir de um campo.   Atenciosamente   Eriley
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

30/08/2010

Não vi que você não tinha o campo total de horas ele é calculado no Delphi e não no sql, então esqueça o campo agregado e faça um While varendo sua consulta depois de aberta e também grave numa variavel, depois basta exibir a variavel no relatório.
GOSTEI 0
Elton Ésqui

Elton Ésqui

30/08/2010

Tentei aqui, mas não rolou.
Detalhe:
Field Type, selecione a opção Aggregate

O type Aggregate não existe quando seleciona TIME.
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

30/08/2010

Leia meu ultimo post.
GOSTEI 0
Leonardo Bertolini

Leonardo Bertolini

30/08/2010

Boa Noite Amigos,

Bom pelo que entendi o mais simples possível seria criar uma variável global (la em cima no Private) e ir somando a variavel hrt nela.

ValTotal := ValTotal + hrt;

Depois exibir ValTotal no relatório.

abraços

twiiter.com/leobertolini
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

30/08/2010

Conseguiu?
GOSTEI 0
Elton Ésqui

Elton Ésqui

30/08/2010

Consegui assim:

Segue o código inteiro!

procedure TDMForm.frxRelatorioBeforePrint(Sender: TfrxReportComponent);
var
hr1             :  TDateTime;
hr2             :  TDateTime;
hrt             :  TDateTime;
ini_oper        :  TDateTime;
fim_oper        :  TDateTime;
tot_oper        :  TDateTime;
hr_trab         :  TDateTime;
tmp_requ        :  TDateTime;
begin
  if (FormADQ652.cbxOperador.Checked) then
  begin
    (frxRelatorio.FindObject('GroupHeader1') as TfrxGroupHeader).StartNewPage := True;
  end;
  begin
    hr1 := sdsOperad.FieldByName('INI_PAUSA').AsDateTime;
    hr2 := sdsOperad.FieldByName('FIM_PAUSA').AsDateTime;
    hrt := hr2-hr1;
    (frxRelatorio.FindObject('Total_Pausa') as TfrxMemoView).Text := TimeToStr(hrt);
  end;
  begin
    tmp_requ := sdsOperad.FieldByName('TEMPO_TURNO').AsDateTime;
    ini_oper := sdsOperad.FieldByName('INI_OPER').AsDateTime;
    fim_oper := sdsOperad.FieldByName('FIM_OPER').AsDateTime;
    tot_oper := fim_oper - ini_oper;
    hr_trab := tot_oper - hrt;

    if hr_trab < tmp_requ then
    begin
       (frxRelatorio.FindObject('hr_trab') as TfrxMemoView).Text := TimeToStr(hr_trab);
       (frxRelatorio.FindObject('hr_trab') as TfrxMemoView).Font.Color := clRed;
    end
    else
    begin
       (frxRelatorio.FindObject('hr_trab') as TfrxMemoView).Text := TimeToStr(hr_trab);
       (frxRelatorio.FindObject('hr_trab') as TfrxMemoView).Font.Color := clBlack;
    end;
  end;
end;

GOSTEI 0
POSTAR