Totalizar valor da variável
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.
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
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
Curtidas 0
Respostas
Eriley Barbosa
30/08/2010
Você pode criar um campo agregado no simpleDataset.
GOSTEI 0
Elton Ésqui
30/08/2010
Não sei como faz isso!
Eu tentei por osmose, mas quando adiciono esse campo os outros campos somem.
Eu tentei por osmose, mas quando adiciono esse campo os outros campos somem.
GOSTEI 0
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
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
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.
Detalhe:
Field Type, selecione a opção Aggregate
O type Aggregate não existe quando seleciona TIME.
GOSTEI 0
Eriley Barbosa
30/08/2010
Leia meu ultimo post.
GOSTEI 0
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
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
30/08/2010
Conseguiu?
GOSTEI 0
Elton Ésqui
30/08/2010
Consegui assim:
Segue o código inteiro!
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