Página 1 de 1
Ajuste de Còdigo
Enviado: 22 Out 2019 às 14:06
por rit
Boa tarde,
O Jimmy fez esse código para mim separar a quantidade de horas por turno levando com base a hora inicio e fim, é uma function funciona muito bem, porem quando eu tenho a situação de que a a hora inicio e a hora fim são coisas que nao existem ele me trazer a informação errada por exemplo..
uma parada que começa as 00:00:00 do dia 20/10/2019 e termina na hora 23:59:59 do dia 20/10/2019 ele me trazer muitas horas.. sendo que era pra nao trazer nada... nesses casos..
Preciso de ajuda para ajustar esse problema alguem pode me auxliar?
Código: Selecionar todosFunction Turnos(Ini As Double, Fim As Double, Tur)
Dim TI(1 To 3), TF(1 To 3)
TI(1) = TimeValue("05:00:00"): TF(3) = TI(1)
TI(2) = TimeValue("13:30:00"): TF(1) = TI(2)
TI(3) = TimeValue("22:00:00"): TF(2) = TI(3)
Hora = Ini - Int(Ini)
TI(Tur) = Int(Ini) + TI(Tur) - (Hora > TI(Tur))
TF(Tur) = Int(Ini) + TF(Tur) - (Hora > TF(Tur))
If TF(Tur) < TI(Tur) Then Soma = 1 Else Soma = 0
Turnos = 0
Do While Soma < 2
If Soma = 1 Then
Soma = 0
If Fim < TF(Tur) Then TF(Tur) = Fim: Soma = 9
If TF(Tur) < Ini Then Exit Do
Turnos = Turnos + (TF(Tur) - Ini)
Ini = TF(Tur): TF(Tur) = TF(Tur) + 1
Else
Soma = 1
Ini = TI(Tur): TI(Tur) = TI(Tur) + 1
End If
Loop
End Function
Re: Ajuste de Còdigo
Enviado: 22 Out 2019 às 15:31
por Jimmy
Olá Rit,
uma parada que começa as 00:00:00 do dia 20/10/2019 e termina na hora 23:59:59 do dia 20/10/2019 ele me trazer muitas horas.. sendo que era pra nao trazer nada... nesses casos..
Porque era pra não trazer nada? Foram quase 24h (faltou 1 segundo) de parada. Não entendi o porque. Poderia explicar menlhor?
Se esta mensagem colabora para a solução do problema, peço que dê um Like, clicando no botão com o "positivo", acima e a direita.
Jimmy San Juan
Ajuste de Còdigo
Enviado: 23 Out 2019 às 09:03
por rit
Na verdade eu me equivoquei ali na informação, o que acontece é o seguinte dia 20 é um domingo, então no sabado eu não tenho tempo full 24hrs.. a minha semana é das 22:30 de domingo até 13:30 de sabado.. ai ta dando pau ali.. voce consegue me ajudar com isso?
Fazer sempre que for domingo ele começar das 22:30.. e sempre que for sabado ele considerar apenas até as 13:30.. algumas vezes vai ter horario entre esse tempo ai não sei como tratar...
Será que da pra por uma condição?
Re: Ajuste de Còdigo
Enviado: 23 Out 2019 às 13:11
por Jimmy
Agora entendi!
Vou olhar o código e tentar contornar isso. Te respondo até sexta.
Nas mensagens que colaboram para a solução do problema, peço que dê um Like, clicando no botão com o "positivo", acima e a direita.
Jimmy San Juan
Re: Ajuste de Còdigo
Enviado: 23 Out 2019 às 23:59
por Jimmy
Rit,
Uma pergunta: você disse que no sábado vai até 13:30h, que é justamente o horário de término do turno 2. Até aqui Ok.
Disse também que no domingo, a semana começa às 22:30h, que difere um pouco do início do turno 3, que normalmente inicia 22:00h. É isso mesmo? No domingo o turno 3 inicia meia hora mais tarde que nos demais dias da semana?
Nas mensagens que colaboram para a solução do problema, peço que dê um Like, clicando no botão com o "positivo", acima e a direita.
Jimmy San Juan
Ajuste de Còdigo
Enviado: 24 Out 2019 às 13:19
por rit
Sim exatamente isso.
Ajuste de Còdigo
Enviado: 25 Out 2019 às 12:47
por rit
Jimmy,
Conseguiu ver se podemos fazer algo? com esse código?
Re: Ajuste de Còdigo
Enviado: 28 Out 2019 às 12:20
por Jimmy
Olá Rit,
Sim, podemos. Estou terminando.
Tive um problema com arredondamentos que me custaram alguns neurônios, mas estou finalizando.
Ainda hoje posto.
Pergunta: Você vê possibilidade de ter que contabilizar esse tempo do final de semana, em alguma situação? Por exemplo, um domingo em que se trabalhou em caráter de emergência? Se for possível, podemos incluir um parâmetro opcional na Funcção, que indicaria se esse tempo deve ou não ser contabilizado, e se for omitido o padrão pode ser "não contabilizar". O que acha disso?
Jimmy San Juan
Ajuste de Còdigo
Enviado: 28 Out 2019 às 12:44
por rit
Em alguns finais de semana sim iremos trabalhar.Se não for algo complicado seria interessante ter isso na função.
Ajuste de Còdigo
Enviado: 28 Out 2019 às 13:01
por Jimmy
Não é complicado. Esta é a hora de pensar nas possibilidades e facilitar a operação, pois algo que não pensemos nesse instante, será um peso e gerará falta de produtividade durante muito tempo. Claro que dentro do limite do possível. Pra saber se é ou não, pode perguntar.
Vou fazer isso. Pense se há mais alguma coisa.
Jimmy San Juan
Ajuste de Còdigo
Enviado: 28 Out 2019 às 18:08
por rit
Não, se fizer com essas variaveis:
Sabado até as 13:00
domingo começa as 22:30
algumas vezes iremos trabalhar no final de semana..
é para atender 99% aqueles 1% é se aparecer algo de novo que eu não enxergo.
Re: Ajuste de Còdigo
Enviado: 28 Out 2019 às 20:56
por Jimmy
Olá rit,
Segue o código. Teste sem piedade.
Estou assumindo que no seu post passado, escreveu 13:00h quando na verdade queria dizer 13:30h. Correto ou mudou?
Os 3 parâmetros da função continuam os mesmos (Data e hora inicial, Data e hora final, e Turno), mas agora tem um quarto parâmetro que deve ser Verdadeiro ou Falso, mas que é opcional. Se for especificado Verdadeiro, o final de semana será domado. Se for espeficifado Falso, ou não informado, o final de semana não será contabilizado.
Código: Selecionar todosFunction Turnos(Ini As Double, Fim As Double, Tur, Optional FDS As Boolean = False)
'Os parâmetros são: Data ie hora nicial / Data e hora final / turno (de 1 a 3) / Final de semana
'Se FDS (4º parâmetro opcional) for VERDADEIRO irá somar entre sáb 13:00 - Dom 22:30. O padrão é não somar
Dim TI(1 To 3), TF(1 To 3)
TI(1) = TimeValue("05:00:00"): TF(3) = TI(1) 'Turno 1
TI(2) = TimeValue("13:30:00"): TF(1) = TI(2) 'Turno 2
TI(3) = TimeValue("22:00:00"): TF(2) = TI(3) 'Turno 3
TVDET = TimeValue("22:30:00") 'Horário de retorno ao trabalho no domingo
HIn = Round(Ini - Int(Ini), 8): HTI = Round(TI(Tur), 8): HTF = Round(TF(Tur), 8) 'Horas arredondadas
TI(Tur) = Int(Ini) + TI(Tur) - (HIn > TI(Tur))
TF(Tur) = Int(Ini) + TF(Tur) - (HIn > TF(Tur))
If TF(Tur) >= TI(Tur) Then Ini = TI(Tur): TI(Tur) = TI(Tur) + 1
Turnos = 0
Do While Parar = ""
If Fim < Ini Then Exit Do
If Fim < TF(Tur) Then TF(Tur) = Fim: Parar = "S"
Dia = Weekday(Ini, vbSaturday)
HIn = Round(Ini - Int(Ini), 8): If HIn >= 1 Then HIn = HIn - 1
TVDET = Int(Ini) + TVDET - Int(TVDET) 'TVDET assume o dia do INI, mantendo a hora
If FDS <> True And _
((Dia = 1 And (Tur = 2 Or (Tur = 3 And HIn >= HTI))) Or _
(Dia = 2 And (Tur = 2 Or (Tur = 3 And HIn < HTF) Or Tur = 1))) _
Then Soma = 0 _
Else Soma = (TF(Tur) - Ini)
'Como o turno 3 inicia 22:00, e no domingo inicia 22:30, para domingo subtrai 0:30h
If FDS <> True And (Dia = 2 And (Tur = 3 And HIn >= HTF)) And Ini < TVDET Then
If TF(Tur) < TVDET Then Soma = Soma - (TF(Tur) - Ini) _
Else Soma = Soma - (TVDET - Ini)
End If
Turnos = Turnos + Soma
Ini = TI(Tur): TI(Tur) = TI(Tur) + 1: TF(Tur) = TF(Tur) + 1
Loop
End Function
Se esta mensagem colabora para a solução do problema, peço que dê um Like, clicando no botão com o "positivo", acima e a direita.
Jimmy San Juan
Ajuste de Còdigo
Enviado: 29 Out 2019 às 08:25
por rit
Bom dia Jimmy,
Cara esse código vai ajudar de mais apenas a parte do trabalhar aos fins de semana queria tirar uma duvida é possivel voce colocar isso para ele ver automatico? quando for fim de semana se tiver hora entre 13:00 de sabado até 22:30 de domingo ele conta se não houver ele nao conta.. por eu tenho 335000 linhas para inserir essa função, só para voce entender eu estou fazendo uma analise de maquina parada por turno, eu tenho o inicio o fim e a quantidade de hora parada motivo etc.. só não tinha o turno por que o meu sistema se limitou a isso e a implementação do turno vai demorar ainda, então essa função que voce fez vai ajudar muita gente e ver o gargalo das coisas..
uma outra duvida eu consigo usar essa function em uma tabela? escrever a função em uma celula e ele replicar para as outras? não esta dando certo, só funciona se eu fizer individual tem algum motivo para isso?
Ajuste de Còdigo
Enviado: 29 Out 2019 às 08:53
por rit
Na verdade 100% ja, acabei de descobrir que a gente ignora tudo entre 13:00 sabado e 22:30 domingo... código atende 100% muito obrigado!