/*
A função tem como objetivo extrair a quantidade de horas úteis entre duas datas
excluindo feriados informados como parâmetro e também um expediente ( hora de inicio e fim)
// Lista dos dias sem Sábados e Domingos
ListaDeDatas = List.Select({DiaDaAbertura..DiaDoFechamento}, each Number.Mod(_,7)>1),
// Lista dos dias sem Sábados, Domingos e Feriádos.
// Retorna apenas os números diferentes não existentes na tabela feriado, ou seja apenas não feriados.
ListaDiasUteis = List.Difference(ListaDeDatas,ListaFeriados),
SomaHorasUteis =
// Verifica se o dia da abertura é igual ao dia do fechamento
if DiaDaAbertura = DiaDoFechamento then
if DiaDaAbertura = List.First(ListaDiasUteis) then
// Verifica se o dia de abertura não é feriado. (DtAbertura = DtFechamento)
List.Median({InicioExpediente,FimExpediente,HorarioDoFechamento}) - List.Median({InicioExpediente,FimExpediente,HorarioDaAbertura})
else 0
else (
if DiaDaAbertura = List.First(ListaDiasUteis) then
// Verifica se o dia da abertura é dia útil (DtAbertura <> DtFechamento)
FimExpediente - List.Median({InicioExpediente,FimExpediente,HorarioDaAbertura})
else 0
)
+
(
if DiaDoFechamento = List.Last(ListaDiasUteis) then
// Verifica se o dia de fechamento é dia útil (DtAbertura <> DtFechamento)
List.Median({InicioExpediente,FimExpediente,HorarioDoFechamento}) - InicioExpediente
else 0
)
+
(
//Soma to total de horas úteis excluindo (DiaAbertura, DiaFechamento, Feriados, Sábados e Domingos)
List.Count(List.Difference(ListaDiasUteis,{DiaDaAbertura,DiaDoFechamento}))*(FimExpediente - InicioExpediente)
)
in
SomaHorasUteis
Atualmente a função faz o cálculo entre datas, considerando apenas dias úteis. (Desconsidera Sáb/Dom/Feriados).
A função foi feita com parâmetros de InicioExpediente e FimExpediente com os horários 00:01 e 23:59 respectivamente.
Porém preciso adaptar essa função, me deparei com o problema de que o cálculo deve ser por horário de funcionamento por cada filial, no total são 24 e cada uma tem seu horário específico.
Ex: Filial 1: Funciona de 06:00 ás 23:00
Filial 2: Funciona de 10:00 ás 20:00
Pergunta
machadolndr
Bom dia!
Tenho a seguinte função na query.
/*
A função tem como objetivo extrair a quantidade de horas úteis entre duas datas
excluindo feriados informados como parâmetro e também um expediente ( hora de inicio e fim)
*/
(InicioExpediente, FimExpediente, Abertura, Fechamento, ListaFeriados) =>
let
DiaDaAbertura = Number.From(DateTime.Date(Abertura)),
DiaDoFechamento = Number.From(DateTime.Date(Fechamento)),
HorarioDaAbertura = Number.From(DateTime.Time(Abertura)),
HorarioDoFechamento = Number.From(DateTime.Time(Fechamento)),
// Lista dos dias sem Sábados e Domingos
ListaDeDatas = List.Select({DiaDaAbertura..DiaDoFechamento}, each Number.Mod(_,7)>1),
// Lista dos dias sem Sábados, Domingos e Feriádos.
// Retorna apenas os números diferentes não existentes na tabela feriado, ou seja apenas não feriados.
ListaDiasUteis = List.Difference(ListaDeDatas,ListaFeriados),
SomaHorasUteis =
// Verifica se o dia da abertura é igual ao dia do fechamento
if DiaDaAbertura = DiaDoFechamento then
if DiaDaAbertura = List.First(ListaDiasUteis) then
// Verifica se o dia de abertura não é feriado. (DtAbertura = DtFechamento)
List.Median({InicioExpediente,FimExpediente,HorarioDoFechamento}) - List.Median({InicioExpediente,FimExpediente,HorarioDaAbertura})
else 0
else (
if DiaDaAbertura = List.First(ListaDiasUteis) then
// Verifica se o dia da abertura é dia útil (DtAbertura <> DtFechamento)
FimExpediente - List.Median({InicioExpediente,FimExpediente,HorarioDaAbertura})
else 0
)
+
(
if DiaDoFechamento = List.Last(ListaDiasUteis) then
// Verifica se o dia de fechamento é dia útil (DtAbertura <> DtFechamento)
List.Median({InicioExpediente,FimExpediente,HorarioDoFechamento}) - InicioExpediente
else 0
)
+
(
//Soma to total de horas úteis excluindo (DiaAbertura, DiaFechamento, Feriados, Sábados e Domingos)
List.Count(List.Difference(ListaDiasUteis,{DiaDaAbertura,DiaDoFechamento}))*(FimExpediente - InicioExpediente)
)
in
SomaHorasUteis
Atualmente a função faz o cálculo entre datas, considerando apenas dias úteis. (Desconsidera Sáb/Dom/Feriados).
A função foi feita com parâmetros de InicioExpediente e FimExpediente com os horários 00:01 e 23:59 respectivamente.
Porém preciso adaptar essa função, me deparei com o problema de que o cálculo deve ser por horário de funcionamento por cada filial, no total são 24 e cada uma tem seu horário específico.
Ex: Filial 1: Funciona de 06:00 ás 23:00
Filial 2: Funciona de 10:00 ás 20:00
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Faça login para comentar
Você vai ser capaz de deixar um comentário após fazer o login
Entrar Agora