Calculo de Horas com DELPHI XE5 Mysql

MySQL

Delphi

13/10/2015

Boa tarde a todos, dando continuidade depois de um bom tempo parado com este meu projeto: Link do Post anterior..

Breve explicação: No post anterior, consegui fazer gravar os horários no banco de dados de acordo com o que foi proposto.
Minha dúvida agora é como calcular os valores referentes aos horários que o funcionário marcou.
Tenho os seguintes campos na tabela de ponto.
[img:descricao=Tabela Ponto]http://arquivo.devmedia.com.br/forum/imagem/390998-20151013-171543.jpg[/img]

Estou tentando aqui, mas sem muito sucesso, se alguém já precisou de algo semelhante e puder dar uma ajuda agradeço.

Para começar, estou fazendo o básico e calculando um campo pelo outro, mas não está dando certo.

Obs: Só lembrando que estes cálculos não irão levar em consideração se passou das 24:00:00. É somente até as 18:00 no máximo 19:00.
Jiraya San

Jiraya San

Curtidas 0

Respostas

Jiraya San

Jiraya San

13/10/2015

Up! Alguém?
GOSTEI 0
Jiraya San

Jiraya San

13/10/2015

Boa tarde galera, em um primeiro momento estou fazendo assim:

procedure TFrmCalculoHoras.Button1Click(Sender: TObject);
var
 Entrada1, Saida1, Entrada2, Saida2: TTime;
 Saldo1, Saldo2, TotalDia, SaldoDia: TTime;
 Jornada: string;
begin
  Jornada    := '09:00:00';
  Entrada1  := StrToTime(EdtHoraEntrada.Text);
  Saida1    := StrToTime(EdtSaidaAlmoco.Text);
  Entrada2  := StrToTime(EdtRetornoAlmoco.Text);
  Saida2    := StrToTime(EdtHoraSaida.Text);
  Saldo1    := (Saida1 - Entrada1);
  Saldo2    := (Saida2 - Entrada2);
  TotalDia:= Saldo1 + Saldo2;
  SaldoDia   := TotalDia- StrToTime(Jornada);

  Label5.Caption := FormatDateTime('hh:nn',Saldo1);
  Label6.Caption := FormatDateTime('hh:nn',Saldo2);
  Label7.Caption := FormatDateTime('hh:nn',TotalDia);
  Label8.Caption := FormatDateTime('hh:nn',SaldoDia);
  //ShowMessage(FormatDateTime('hh:nn',Resultado));
end;


Levando-se em consideração que o funcionário tenha a seguinte jornada de trabalho:
08:00:00 - 12:00:00 - 13:00:00 - 18:00:00

Vamos supor que o funcionário chegou 15 minutos atrasado.
Como mostrar se ficou negativo ou positivo essa diferença?

E a lógica aplicada acima está correta? Ou alguém indicaria uma outra forma de se fazer estes cálculos?

Desde já obrigado pela atenção.
GOSTEI 0
Raimundo Pereira

Raimundo Pereira

13/10/2015

VAR
STATUS_HORA:TTIME;
H_BD:TTIME; H_MARCADA:TTIME;




PROCEDURE CALC_Atraso( );
begin
STATUS_HORA:=H_BD-H_MARCADA;
if H_MARCADA>H_BD then
BEGIN
X:='MARCAÇÃO ATRASADA ['+(TimeToStr(STATUS_HORA))+']';
END
ELSE
BEGIN
X:='MARCAÇÃO ANTECIPADA ['+(TimeToStr(STATUS_HORA))+']';
END;
ShowMessage(X);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
H_BD:=StrToTime('08:00:00');
H_MARCADA:=StrToTime('08:15:00');
CALC_Atraso();

end;

end.


Repare que no Final ele irá retornar se é atraso ou entrada antecipada ai você pode montar a rotina de acordo com a sua necessidade

Isso foi apenas um exemplo para você prosseguir
GOSTEI 0
Jiraya San

Jiraya San

13/10/2015

Bom dia P2

Estou fazendo assim:

procedure TFrmPrincipal.CalculaExtrasAtrasos;
var
  Periodo_1, Periodo_2, Periodo_3, Periodo_4: TTime;
  ExtrasAtrasos, Jornada: TTime;
  Horas: TTime;
  Sinal: string;
begin
  // Jornada de Trabalho
  Jornada   := StrToTime('08:00:00');
  // Marcações de Ponto
  Periodo_1     := StrToTime('08:58:00');
  Periodo_2     := StrToTime('12:00:00');
  Periodo_3     := StrToTime('13:08:00');
  Periodo_4     := StrToTime('18:01:00');
  ExtrasAtrasos := ( Periodo_2 - Periodo_1 ) + ( Periodo_4 - Periodo_3);

  Horas:= Jornada - ExtrasAtrasos;
  //ShowMessage(TimeToStr(Extras));

  if( ExtrasAtrasos >= Jornada ) then
  begin
    Sinal := ' + ';
    ShowMessage( TimeToStr(ExtrasAtrasos) + #13 + 'Hora Extra' + #13 + 'Total de Extra: ' + Sinal + TimeToStr(Horas) );
  end
  else
  begin
    Sinal := ' - ';
    ShowMessage( TimeToStr(ExtrasAtrasos) + #13 + 'Atrasos' + #13 + 'Total de Atrasos: ' + Sinal + TimeToStr(Horas) );
  end;
end;

Vou tentar agora percorrer os registros selecionados no DBGrid e sair calculando os valores. A lógica seria essa mesmo?
Mais uma vez, obrigado pela ajuda.
GOSTEI 0
Raimundo Pereira

Raimundo Pereira

13/10/2015

Boa tarde,

A lógica está correta.

Conseguiu finalizar ?
GOSTEI 0
POSTAR