Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Calcular Horas do Mesmo campo!


jaumDoDelphi

Pergunta

Ola amigos do ScriptBrasil, boa tarde!

Estou com um problema simples mais ao mesmo tempo complicado "FALTA de LOGICA" :(

Tenho um programa bem simples de controle de horas, estou fazendo ele com:

- Delphi 2010

- DBAccess

- ADOQuery

A Tabela é simples tem hora de chegada e saida e total com uma tabela mestre com o MÊS atual. "segue a imagem abaixo"

82760993.jpg

O calculo de hora de entrada/saida é diariamente.

Mas no final do mês eu gostaria que somassem todas as horas do campo "HORA_T"

dai eu tentei desta forma eu sei que estou errado mais acho que quase isso:

procedure TfHORA.btnCALCTClick(Sender: TObject);
var
h1, h2, h3 : TDateTime;
begin
//j
h1 := STRtoTIME(DM.ADOQhoraHORA_TT.Text);
h2 := STRtoTIME('00:00:00');
DM.ADOQhora.First;
while not DM.ADOQhora.Eof do
  begin
    h3 := h1 + h1;
    DM.ADOQhora.Next;
    lblHT.Caption := TimeToSTR(H3)
  end;
end;

Com este código atual não soma nada, Sim é um problema lógico heheeh :lol: ! sexta-feira é difícil de utilizar o lado lógico de cérebro kkkk

Profavor se alguém poder dar uma luz?

Agradeço desde já!

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

exemplo:

procedure TForm1.Button1Click(Sender: TObject);
var h1,h2,h3,h4, tot : TTime;
begin
   h1 := strtotime('02:00:12');
   h2 := strtotime('00:40:14');
   h3 := strtotime('01:30:42');
   h4 := strtotime('00:25:15');
   tot := h1+h2+h3+h4;
   label1.Caption := timetostr(tot);
end;

basta adaptar o código se for para ler um campo da tabela

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas obrigado meu amigo.

Alterei as variaveis para "TTime"

Mas ainda ele não esta somando as horas corretamente.

Ou melhor somando corretamente ele esta sim, mas na hora de exibir o resultado TOTAL de HORAS ele exibe da seguinte forma.

HORAS TOTAIS

11:00 + 10:00 + 12:00 + 14:30 + 15:50 = 15:20

Mas como assim??? o total somando de horas na verdade seria 63:20 (sessenta e tres horas e vinte minutos)

e não 15:20 (quinze horas e vinte minutos)

dai fiquei vendo e percebi uma coisa muito peculiar, a soma esta correta mas ao invez dele me retornar as horas somadas

ele esta retornando como "2 dias 15 horas e 20 minutos" dai sempre me retorna só as horas no meu LABEL total de horas.

Segue o codigo abaixo:

var
h1, h2, tot : TTime;
begin
h1 := STRtoTIME(DM.ADOQhoraHORA_TT.Text);
h2 := STRtoTIME(lblHT.Caption);
//DM.ADOQhora.First;
//while not DM.ADOQhora.Eof do
//  begin
    tot := h1 + h2;
//    DM.ADOQhora.Next;
//  end;
lblHT.Caption := TimeToSTR(tot)

O maior problema estaria no final para ser exibida o total de horas!

alguém ai sabe o comando para me voltar o total de horas sem contar 24h = 1 dia???

Link para o comentário
Compartilhar em outros sites

  • 0
HORAS TOTAIS

11:00 + 10:00 + 12:00 + 14:30 + 15:50 = 15:20

Mas como assim??? o total somando de horas na verdade seria 63:20 (sessenta e tres horas e vinte minutos)

e não 15:20 (quinze horas e vinte minutos)

achei que voce ia sacar o lance de que o somatório de valores time, sempre retorna um valor decimal

exemplo: sendo t uma variavel do tipo real e h* do tipo TTime

h1 := strtotime('11:00:00');
h2 := strtotime('10:00:00');
h3 := strtotime('12:00:00');
h4 := strtotime('14:30:00');
h5 := strtotime('15:50:00');


t := h1+h2+h3+h4+h5;
seria o mesmo que : t := 0,45833333333 + 0,4166666667 + 0,5 + 0,6972222222 + 0,65972222222 então voce poderia fazer uma conversão do valor decimal para hora ----------------------------------------------------------------------------- outra possibilidade seria converter as horas em segundos e depois fazer o somátorio exemplo:
uses DateUtils;

//Função converter Segundos para Horas

function Seg_Hora( Seg:LongInt ):string;
Var Hora,Min:LongInt;
  Tmp : Double;
begin
   Tmp := Seg / 3600;
   Hora := Round(Int(Tmp));
   Seg :=  Round(Seg - (Hora*3600));
   Tmp := Seg / 60;
   Min := Round(Int(Tmp));
   Seg :=  Round(Seg - (Min*60));
   Result := FormatFloat( '00', Hora )+ ':' + FormatFloat( '00', Min ) + ':' + FormatFloat( '00', Seg );
end;


procedure TForm1.Button1Click(Sender: TObject);
var h1,h2,h3,h4,h5, tot : TTime; seg : integer;
begin
   //11:00 + 10:00 + 12:00 + 14:30 + 15:50 = 63:20:00
   seg := 0;

   h1 := strtotime('11:00:00');
   h2 := strtotime('10:00:00');
   h3 := strtotime('12:00:00');
   h4 := strtotime('14:30:00');
   h5 := strtotime('15:50:00');

   seg := seg + SecondsBetween(0,h1);
   seg := seg + SecondsBetween(0,h2);
   seg := seg + SecondsBetween(0,h3);
   seg := seg + SecondsBetween(0,h4);
   seg := seg + SecondsBetween(0,h5);

   label1.Caption := Seg_Hora(seg);
end;

o resultado final sera: 63:20:00

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas novamente muito Obrigado! :)

Agora sim esta [RESOLVIDO] este meu problema com os cálculos de horas.

Parece simples somar horas mas vi que isso não mudou muito desde a década passada como na época do CLIPPER.

Ultimas vez que fiz um aplicativo para soma de hora me lembro que foi na época que estudei um pouco de clipper nos anos 90.

Mas ao passar dos anos sempre utilizei o MS EXCELL e tinha me esquecido que 1Hora não é 100 kkkk!

A sua ajuda foi Extremamente util principalmente na Function esta função me ajudou muito mesmo, e vai ajudar mta gente

nova que esta começando a mergulhar no mundo do Delphi, vale nota 10!

abaixo o código final, funcionando perfeitamente com a sua Função "Seg_hora"

procedure TfHORA.btnTMPCALCClick(Sender: TObject);                              
var
h1,h2 : TTime;
seg : integer;
begin
  seg := 0;
  lblHT.Caption := '00:00:00';
  DM.ADOQhora.First;
while not DM.ADOQhora.Eof do
  begin
   h1 := STRtoTIME(DM.ADOQhoraHORA_TT.Text);
   h2 := STRtoTIME(lblHT.Caption);
   seg := seg + SecondsBetween(0,h1);
   seg := seg + SecondsBetween(0,h2);
   DM.ADOQhora.Next;
  end;
lblHT.Caption := Seg_Hora(seg);
end;

muito obrigado e um grande abraço! :D

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...