Fórum Calculo de Horas com DELPHI XE5 Mysql #534375
13/10/2015
0
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
Curtir tópico
+ 0Posts
19/10/2015
Jiraya San
Gostei + 0
21/10/2015
Jiraya San
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
21/10/2015
Raimundo Pereira
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
29/10/2015
Jiraya San
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
30/10/2015
Raimundo Pereira
A lógica está correta.
Conseguiu finalizar ?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)