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

calculo de horas


Alessandra (Jundiai)

Pergunta

Tenho que fazer uma rotina, meio que urgente, mas não estou conseguindo.

Na verdade, tem que efetuar um calculo de horas trabalhadas dos funcionarios de uma fabrica. O input e dado com da data/hora inicial e data/hora final.

Nesse intervalo, tem que calcular quantas horas o funcionario trabalhou e quanto ele ganhou, sendo que :

das 8:00 as 18:00 horas - hora normal a 2,00 a hora

das 18:01 as 22:00 horas - 2,00 a hora + extra de 50% sendo 3,00 a hora

das 22:01 as 7:59 horas - 2,00 a hora + adicional noturno de 100% sendo 4,00 a hora

Mas, o funcionario pode passar de 24 horas na empresa (exemplo : entra as 8:00 horas do dia 01/01 e sai as 12:00 horas do dia 02/01, tem horas normais das 8:00 as 18:00 horas + extra das 18:01 as 22:00 + adicional noturno das 22:01 as 7:59 + horas normais das 8:00 as 12:00 horas)

alguém pode me ajudar ??????????????????

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

você pode criar dois acumuladores, um para a hora e um para os minutos.

Exemplo:

Type
TypeHora:Array[1..2] of interger;

Procedure Acumula:TypeHora;
Var
Hora,minuto:Integer;
Begin
  Hora:=Hora+StrToInt(Copy(DateTimeToStr(Time()),1,2));
  Minuto:=Minuto+StrToInt(Copy(DataTimeToStr(Time()),4,5));
  If Minuto >= 60 Then 
  Begin
  Hora:=Hora+1;
  Minuto:=0;
  end; 
  Acumula[1]:=Hora;
  Acumula[2]:=Minuto;
End;
Desta forma voce pode armazemar por exemplo o numero de horas que uma pessoa trabalhou durante o mes, Modifique-o a vontande. O unico problema é que o aplicativo timer tem que ficar aberto para contabilizar as horas. Retornando a diferença entre duas horas
function DifHora(Inicio,Fim : String):String;
{Retorna a diferença entre duas horas}
var
  FIni,FFim : TDateTime;
begin
Fini := StrTotime(Inicio);
FFim := StrToTime(Fim);
If (Inicio > Fim) then
  begin
  Result := TimeToStr((StrTotime('23:59:59') + StrToTime('00:00:01') -Fini)+FFim
  end
else
  begin
  Result := TimeToStr(FFim-Fini);
  end;
end;

no racicionio você pode fazer com que sua aplicação diferencie dias decorridos atraves de um contador para que ao chegar as 24h ao recomeçar a contagem das horas ele conte 1 dia ou 2 dias ... assim voce pode multiplicar no final 2*24+(horascorrentes);

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...