Avatar billede nyholm Novice
07. februar 2009 - 23:34 Der er 4 kommentarer og
1 løsning

Berækning av obekvæm arbetstid

Med hænvisning till en tidigare fråga och svar, http://www.eksperten.dk/spm/862063, så vill jag he en vidareutveckling med 2 olika beregningar. Vi kallar dem OB1 och OB2.
OB1 = all tid mellan kl 19.00 och kl 06.00, från måndag kl 06.00 till lørdag kl 06.00. + lærdag från kl 06.00 till kl 19.00.
OB 2 = all tid mellan lørdag kl 19.00 och måndag kl 06.00.
Svaret kan bygga på den tidigare frågan eller ara en ny løsning.
Avatar billede fdata Forsker
08. februar 2009 - 19:19 #1
Hej nyholm. Hermed en udvidet version af den tidligere kode:


Private Sub Test_BeregnTid()
  Const StartTid = #10:00:00 PM#
  Const SlutTid = #4:00:00 AM#
  Const StartDag = #2/6/2009#
  Const SlutDag = #2/7/2009#
  Debug.Print Format(StartDag, "ddd"); " "; Format(StartTid, "hh:nn"); " - " & _
              Format(SlutDag, "ddd"); " "; Format(SlutTid, "hh:nn"); _
              "  OB1:"; BeregnTid(StartTid, SlutTid, StartDag, SlutDag, 1); _
              "  OB2:"; BeregnTid(StartTid, SlutTid, StartDag, SlutDag, 2)
End Sub


'OB1 = måndag (1) kl 06.00 till lørdag (6) kl 19.00
'OB2 = lørdag (6) kl 19.00 till måndag (1) kl 06.00
Function BeregnTid(StartKl As Date, SlutKl As Date, StartDag As Date, SlutDag As Date, OBtype As Integer) As Single
  Const KlokkenNitten = #7:00:00 PM#
  Const KlokkenSeks = #6:00:00 AM#
 
  Dim StartWeekDay As Integer
  Dim SlutWeekDay As Integer
  Dim Tid As Date
 
  StartWeekDay = Weekday(StartDag, vbMonday)
  SlutWeekDay = Weekday(SlutDag, vbMonday)
 
  Tid = 0
  If StartKl < SlutKl Then  ' Krydser ikke midnat
   
    ' Morgen
    If SlutKl < KlokkenNitten Then
      If StartKl < KlokkenSeks Then
        Select Case OBtype
          Case 1
            If StartWeekDay >= 2 And StartWeekDay <= 6 Then
              Tid = Min(SlutKl, KlokkenSeks) - StartKl
            End If
          Case 2
            If StartWeekDay = 1 Or StartWeekDay = 7 Then
              Tid = Min(SlutKl, KlokkenSeks) - StartKl
            End If
        End Select
      End If
    ' Aften
    Else
      Select Case OBtype
        Case 1
          If StartWeekDay >= 1 And StartWeekDay <= 5 Then
            Tid = SlutKl - Max(StartKl, KlokkenNitten)
          End If
        Case 2
          If StartWeekDay = 6 Or StartWeekDay = 7 Then
            Tid = SlutKl - Max(StartKl, KlokkenNitten)
          End If
      End Select
      ' + evt morgen
      If StartKl < KlokkenSeks Then
        Select Case OBtype
          Case 1
            If StartWeekDay >= 2 And StartWeekDay <= 6 Then
              Tid = Tid + KlokkenSeks - StartKl
            End If
          Case 2
            If StartWeekDay = 1 Or StartWeekDay = 7 Then
              Tid = Tid + KlokkenSeks - StartKl
            End If
        End Select
      End If
    End If
 
  Else                      ' Krydser midnat
    ' Aften
    If StartKl < KlokkenNitten Then
      Select Case OBtype
        Case 1
          If StartWeekDay >= 1 And StartWeekDay <= 5 Then
            Tid = DateAdd("n", 1, #11:59:00 PM# - KlokkenNitten)
          End If
        Case 2
          If StartWeekDay = 6 Or StartWeekDay = 7 Then
            Tid = DateAdd("n", 1, #11:59:00 PM# - KlokkenNitten)
          End If
      End Select
    Else
      Select Case OBtype
        Case 1
          If StartWeekDay >= 1 And StartWeekDay <= 5 Then
            Tid = DateAdd("n", 1, #11:59:00 PM# - StartKl)
          End If
        Case 2
          If StartWeekDay = 6 Or StartWeekDay = 7 Then
            Tid = DateAdd("n", 1, #11:59:00 PM# - StartKl)
          End If
      End Select
    End If
    ' Morgen
    Select Case OBtype
      Case 1
        If SlutWeekDay >= 2 And SlutWeekDay <= 6 Then
          Tid = Tid + Min(SlutKl, KlokkenSeks)
        End If
      Case 2
        If SlutWeekDay = 1 Or SlutWeekDay = 7 Then
          Tid = Tid + Min(SlutKl, KlokkenSeks)
        End If
    End Select
   
  End If
  BeregnTid = Hour(Tid) + Minute(Tid) / 60
End Function
Avatar billede nyholm Novice
08. februar 2009 - 21:31 #2
Hej fdata!
Tack før ditt svar.
Jab behøver ha saret på hur mycket som ær OB1 før sig och OB2 før sig. Før OB1 och OB2 betalas næmligen olika mycket i ersættning per tim.
Avatar billede fdata Forsker
09. februar 2009 - 19:12 #3
... og det er præcis, hvad du får ;o)
Jeg har jo sendt en lille test-rutine, som illustrerer dette.

BeregnTid(StartTid, SlutTid, StartDag, SlutDag, 1) giver OB1
BeregnTid(StartTid, SlutTid, StartDag, SlutDag, 2) giver OB2
Avatar billede nyholm Novice
09. februar 2009 - 21:51 #4
OK, nu har jag fått det att fungera.
Tack så mycket!
Avatar billede fdata Forsker
10. februar 2009 - 18:59 #5
Bra! Tackar för point ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester