Avatar billede nyholm Novice
01. februar 2009 - 19:14 Der er 12 kommentarer og
1 løsning

Beregning af tid

I en tabell "Grund", som innehåller en mængd poster med utførda arbeten, finns fælten "StartDag" och "StartKl", samt "SlutDag" och "SlutKl". Nu vill jag få fram den totala arbetstiden som ligger mellan kl 19.00 och kl 06.00. Alla arbetspass ær påbørjade och avslutade på olika tider.
Tacksam før førslag på hur jag kan gå tillvæga.
Avatar billede kabbak Professor
01. februar 2009 - 19:42 #1
ArbejdsTimer:([SlutDag] + [SlutKl])-([StartDag] +[StartKl])

I en forespørfgsel
Avatar billede kabbak Professor
01. februar 2009 - 19:42 #2
husk at sætte formatet til tid
Avatar billede nyholm Novice
01. februar 2009 - 20:53 #3
Nu var det lite mer komplicerat æn att bara rækna ut arbetstiden. Min fråga gællde att rækna ut hur mycket av alla arbetstider som ligger mellan kl 19.00 och kl 06.00.
Exempel: Ett arbetspass børjar kl 15.30 och slutar 00.45. Arbetstiden ær 9 timmar och 15 minuter. Den tid som ligger mellan 19.00 och 06.00 ær 6 timmar och 45 minuter.
Jag vill alltså ha en funktion som ger total tid från alla arbetspass, dær det finns någon del av arbetstiden ligger mellan kl 19.00 och 06.00. Jag ær inte intresserad av all arbetstid utan bara delen mellan dessa klockslag.
Avatar billede fdata Forsker
03. februar 2009 - 21:34 #4
Du kan beregne det v.h.a. et par funktioner.

Den er ikke tjekket 120%; men den er vist tæt på at være korrekt. Du kan selv rette den til, så kaldet bliver som du ønsker det ;o)

Sub BeregnTid()
  Const StartKl = #3:30:00 PM#
  Const SlutKl = #12:45:00 AM#
 
  Const KlokkenNitten = #7:00:00 PM#
  Const KlokkenSeks = #6:00:00 AM#
 
  Dim Tid As Date
 
  If StartKl < SlutKl Then  ' Krydser ikke midnat
    If SlutKl < KlokkenNitten Then
      Tid = 0
    Else
      Tid = SlutKl - Max(StartKl, KlokkenNitten)
    End If
  Else                      ' Krydser midnat
    If StartKl < KlokkenNitten Then
      Tid = DateAdd("n", 1, #11:59:00 PM# - KlokkenNitten)
    Else
      Tid = DateAdd("n", 1, #11:59:00 PM# - StartKl)
    End If
    Tid = Tid + Min(SlutKl, KlokkenSeks)
  End If
  Debug.Print Tid
End Sub

Private Function Min(Kl1 As Date, Kl2 As Date) As Date
  If Kl1 < Kl2 Then
    Min = Kl1
  Else
    Min = Kl2
  End If
End Function
Private Function Max(Kl1 As Date, Kl2 As Date) As Date
  If Kl1 > Kl2 Then
    Max = Kl1
  Else
    Max = Kl2
  End If
End Function
Avatar billede nyholm Novice
04. februar 2009 - 21:24 #5
Hej fdata!
Jag tror att jag behøver lite hjælp att få din løsning att fungera.
Jag skall anvænda løsningen i ett formulær som heter "Rapport" och dær finns fæltet "OBtid" som i decimaltal skall visa hur mycket av total arbetstid som ligger mellan kl 19.00 och 06.00.
Både "Sub BeregnTid()" och funktioner har jag lagt i Moduler.
"Tid" ær værdet som jag søker, men hur kallar jag på værdet?
Avatar billede nyholm Novice
04. februar 2009 - 21:32 #6
Hej fdata!
Jag tror att jag behøver lite hjælp att få din løsning att fungera.
Jag skall anvænda løsningen i ett formulær som heter "Rapport" och dær finns fæltet "OBtid" som i decimaltal skall visa hur mycket av total arbetstid som ligger mellan kl 19.00 och 06.00.
Både "Sub BeregnTid()" och funktioner har jag lagt i Moduler.
"Tid" ær værdet som jag søker, men hur kallar jag på værdet?
Avatar billede nyholm Novice
04. februar 2009 - 23:07 #7
Varfør har du "StartKl" och "SlutKl" som konstanter? Detta skall vel vara start och slut på det arbetspass som berækningen skall gøras på?
Avatar billede fdata Forsker
04. februar 2009 - 23:56 #8
Konstanterne og Debug konstruktionen var udelukkede for at belyse værdierne fra dit eksempel.

I din situation skal koden se ud som her:

Function BeregnTid(StartKl As Date, SlutKl As Date) As Single
  Const KlokkenNitten = #7:00:00 PM#
  Const KlokkenSeks = #6:00:00 AM#
 
  Dim Tid As Date
 
  If StartKl < SlutKl Then  ' Krydser ikke midnat
    If SlutKl < KlokkenNitten Then
      Tid = 0
    Else
      Tid = SlutKl - Max(StartKl, KlokkenNitten)
    End If
  Else                      ' Krydser midnat
    If StartKl < KlokkenNitten Then
      Tid = DateAdd("n", 1, #11:59:00 PM# - KlokkenNitten)
    Else
      Tid = DateAdd("n", 1, #11:59:00 PM# - StartKl)
    End If
    Tid = Tid + Min(SlutKl, KlokkenSeks)
  End If
  BeregnTid = Hour(Tid) + Minute(Tid) / 60
End Function

Du kan så beregne OBtid ved:
  Me.OBtid = BeregnTid(Me.StartKl, Me.SlutKl)
som skal lægges i 3 hændelser:
- VedAktuel (OnCurrent)
- StartKl EfterOpdatering (StartKl_AfterUpdate)
- SlutKl  EfterOpdatering (SlutKl_AfterUpdate)

Ret selv feltnavnene, så de passer til din base.
Avatar billede nyholm Novice
05. februar 2009 - 17:20 #9
Jag har nu testat din løsning och den fungerar næstan perfekt. Om ett arbetspass børjar kl 04.00 så skall funktionen ge 2 tim, eftersom dessa ligger inom tiden 19.00 - 06.00. Detta fungerar inte.
Avatar billede fdata Forsker
05. februar 2009 - 23:47 #10
Sorry. Jeg har udvidet med et par linier:

Function BeregnTid(StartKl As Date, SlutKl As Date) As Single
  Const KlokkenNitten = #7:00:00 PM#
  Const KlokkenSeks = #6:00:00 AM#
 
  Dim Tid As Date
 
  If StartKl < SlutKl Then  ' Krydser ikke midnat
    If SlutKl < KlokkenNitten Then
      If StartKl < KlokkenSeks Then
        Tid = Min(SlutKl, KlokkenSeks) - StartKl
      Else
        Tid = 0
      End If
    Else
      Tid = SlutKl - Max(StartKl, KlokkenNitten)
    End If
  Else                      ' Krydser midnat
    If StartKl < KlokkenNitten Then
      Tid = DateAdd("n", 1, #11:59:00 PM# - KlokkenNitten)
    Else
      Tid = DateAdd("n", 1, #11:59:00 PM# - StartKl)
    End If
    Tid = Tid + Min(SlutKl, KlokkenSeks)
  End If
  BeregnTid = Hour(Tid) + Minute(Tid) / 60
End Function
Avatar billede nyholm Novice
06. februar 2009 - 17:11 #11
Jag ær mycket nøjd med din løsning och det fungerar.
Om du ger mig ett svar så får du dina points.
Jag har en fortsøttning på berækningen av tiden som skall ta hænsyn till vilken veckodag det ær och nær en helgdag finns mitt i veckan.
Detta ær vært mera points så jag antar att jag får upprætta en ny fråga om detta.
Avatar billede fdata Forsker
06. februar 2009 - 19:25 #12
Super.

Jeg har allerede lagt et svar. Her får du et til ;o)
Avatar billede fdata Forsker
08. februar 2009 - 13:53 #13
Så lykkedes det. Takker for 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