Cálculo de horas úteis
Pessoal
Estou precisando de ajuda para inserir em meu sistema uma rotina para cálculo de horas úteis com a finalidade de controlar SLA.
Com base em uma data e hora de abertura de um chamado, preciso estabelecer a data e hora limite para finalização.
Exemplo:
Data e Hora de abertura: 01/10/2013 10:00h
Expediente da empresa é de 8:00 as 18:00 horas
Devo excluir os feriados e o domingo;
Tenho urgência para solucionar essa pendência.
Agradeço desde já a ajuda dos companheiros.
Um abraço
Pedro
Estou precisando de ajuda para inserir em meu sistema uma rotina para cálculo de horas úteis com a finalidade de controlar SLA.
Com base em uma data e hora de abertura de um chamado, preciso estabelecer a data e hora limite para finalização.
Exemplo:
Data e Hora de abertura: 01/10/2013 10:00h
Expediente da empresa é de 8:00 as 18:00 horas
Devo excluir os feriados e o domingo;
Tenho urgência para solucionar essa pendência.
Agradeço desde já a ajuda dos companheiros.
Um abraço
Pedro
Pedro Augusto
Curtidas 0
Respostas
Marcos Oliveira
03/10/2013
Deixa eu tentar entender melhor seu caso: Você deve informa a data e hora de início e data e hora de fim do chamado, e o sistema tem que calcular as horas úteis, excluindo os sábados, domingos e feriados deste intervalo? É isso?
GOSTEI 0
Pedro Augusto
03/10/2013
Caro Marcos
Antes de tudo obrigado pelo seu interesse em ajudar.
Para ser mais claro, vou tentar esclarecer o caso dessa necessidade:
Um determinado setor, recebe uma documentação e tem um período definido, dependendo da operadora para dar andamento ao processo. Vamos utilizar como exemplo, uma operadora que tem um prazo de 72 horas para que o processo seja concluído. Sendo assim:
Data de entrega: 01/10/2013 as 10:00h
O sistema calcula 72h e informa que a data prevista para conclusão é: 04/10/2013 as 10:00h.
Acontece que em alguns casos só poderemos calcular as horas úteis e dentro do expediente da empresa: (08:00 as 17:00) e tirando os dias feriados e finais de semana para poder calcular a data correta de previsão.
Espero que tenha ficado mais clara a minha necessidade. Caso contrário estou a disposição para mais esclarecimentos.
Muito obrigado
pedro Augusto
Antes de tudo obrigado pelo seu interesse em ajudar.
Para ser mais claro, vou tentar esclarecer o caso dessa necessidade:
Um determinado setor, recebe uma documentação e tem um período definido, dependendo da operadora para dar andamento ao processo. Vamos utilizar como exemplo, uma operadora que tem um prazo de 72 horas para que o processo seja concluído. Sendo assim:
Data de entrega: 01/10/2013 as 10:00h
O sistema calcula 72h e informa que a data prevista para conclusão é: 04/10/2013 as 10:00h.
Acontece que em alguns casos só poderemos calcular as horas úteis e dentro do expediente da empresa: (08:00 as 17:00) e tirando os dias feriados e finais de semana para poder calcular a data correta de previsão.
Espero que tenha ficado mais clara a minha necessidade. Caso contrário estou a disposição para mais esclarecimentos.
Muito obrigado
pedro Augusto
GOSTEI 0
Marcos Oliveira
03/10/2013
Vamos lá! Fiz um código, que a princípio parece funcionar, mas minha ideia é só te dar um direcionamento. Faça as melhorias no código conforme sua necessidade, inclusive, incluindo os feriados.
Para esse código, você deve informar a hora no formado HH:MM:SS.
Caso não esteja funcionando, entre em contato.
Att,
Marcos
var
iHoras: Integer;
DataAtual: TDate;
HoraAtual: TTime;
begin
iHoras := 72;
DataAtual := StrToDate(Edt_Data.Text);
HoraAtual := StrToTime(Edt_Hora.Text);
while iHoras > 0 do
begin
if HoraAtual >= StrToTime('17:00:00') then
begin
DataAtual := DataAtual + 1;
while True do
begin
// Domingo // Sábado
if (DayOfWeek(DataAtual) = 1) or (DayOfWeek(DataAtual) = 7) then
DataAtual := DataAtual + 1
else
Break;
end;
HoraAtual := StrToTime('08:00:00');
end
else
HoraAtual := HoraAtual + StrToTime('01:00:00');
iHoras := iHoras - 1;
end;
Edt_Resultado.Text := DateToStr(DataAtual) + ' - ' + TimeToStr(HoraAtual);
Para esse código, você deve informar a hora no formado HH:MM:SS.
Caso não esteja funcionando, entre em contato.
Att,
Marcos
GOSTEI 0
Pedro Augusto
03/10/2013
Caro Marcos
Vou fazer os testes com o codigo que você me enviou e te darei um retorno assim que testar.
Mais uma vez obrigado pela ajuda.
Até breve
Pedro
Vou fazer os testes com o codigo que você me enviou e te darei um retorno assim que testar.
Mais uma vez obrigado pela ajuda.
Até breve
Pedro
GOSTEI 0