07. november 2002 - 10:52Der er
28 kommentarer og 1 løsning
Tidsdifferanse i ett helpdesk system
Hei
Jeg holder på å lage ett lite helpdesk program. En av funskjonene til dette programmet skal vise hvor lang tid det har tatt fra en sak er opprettet til en sak er ferdig.
Denne tidsdifferansen skal kun være reel arbeidstid. Arbeidstid om vinteren er 8-16 og sommeren 8-15.30. Arbeidsuken er fra mandag til fredag.
Dersom en sak er opprettet 5.11.02 kl 15 og saken er ferdig 6.11.02 kl 09, så er tidsdifferansen 2 timer. Hadde dette vært om sommeren så hadde tidsdifferansen vært 1,5 timer
Har dere noen forslag ?
Jeg har forsøkt å lage en tabell som viser reel arbeistid hver dag. Tabbelen går mange år fremover, Den inneholder feltene : dato, arbeistid, minutter (05.11.02 - 1600 - 480) (16.05.03 - 1530 - 450)
and what if the period overlaps (winter/summer) or a weekend. There is only one solution to this and thats doing it in VBA. You need a function which you can call for every day in the period. This function must return 0 for weeekends holidays etc. and that may not be the same if your NOT in DK!
Otherwsie it returns "reel arbeidstid" which could be in a table. You only need the day it changes NOT every day.
But if it DID contain EVERY day then this will make it more flexible! For example you may decide to close helpdesk on an afternoon to give the guys a beer :o)
Jeg giv ikke at checke hvis den her virke...det kan du, vi vil hjelp med fjelen. It will probably fail down where I'm formating the dates and then trying to add them (Bill G. vil gerne har vi CDate helt sikker)!!
--->DATO_TABLE er dit table navn, og Arbeistid er et mærkligt navn!
Function TID_FORSKEL(p_Start, p_Stop) As Double On Error GoTo OH_SHIT
Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("SELECT * FROM DATO_TABLE WHERE DATO BETWEEN #" & p_Start & "# AND #" & p_SLUT & "#", dbOpenDynaset)
Do While Not rst.EOF TID_FORSKEL = TID_FORSKEL + rst.Minutter rst.MoveNext Loop
If TID_FORSKEL = 0 Then 'less than one day TID_FORSKEL = CDbl(p_Stop - p_Start) Else 'get the half days rst.FindFirst (DATO = Format(p_Start, "dd-mm")) If rst.NoMatch Then MsgBox "Fejl: INGEN DATO Post!" Exit Sub End If TID_FORSKEL = TID_FORSKEL + (rst.Minutter - (Format(rst.Arbeistid, "tt:mm") - Format(p_Start, "tt:mm"))) TID_FORSKEL = TID_FORSKEL + (rst.Minutter - (Format(p_Stop, "tt:mm") - CVDate("08:00")))
End If
Exit Sub OH_SHIT: MsgBox Err.Description Exit Sub End Function
OK, jeg har haft lærlingen kig på det, her er en version som virke, måske
Den kan stadigvæk fejl ned med bunden, men sig til!
Function TID_FORSKEL(p_Start, p_Stop) As Double On Error GoTo OH_SHIT
Dim rst As Recordset Dim f_Tid As Double
Set rst = CurrentDb.OpenRecordset("SELECT * FROM _TEST WHERE DATO BETWEEN #" & CVDate(p_Start) & "# AND #" & CVDate(p_Stop) & "#", dbOpenDynaset)
Do While Not rst.EOF TID_FORSKEL = TID_FORSKEL + rst!Minutter rst.MoveNext Loop
If TID_FORSKEL = 0 Then 'less than one day TID_FORSKEL = CDbl(CVDate(p_Stop) - CVDate(p_Start)) Else 'get the half days Set rst = CurrentDb.OpenRecordset("SELECT * FROM _TEST WHERE DATO BETWEEN #" & CVDate(p_Start) - 1 & "# AND #" & CVDate(p_Stop) + 1 & "#", dbOpenDynaset)
rst.FindFirst (rst!DATO = Format(p_Start, "dd-mm")) If rst.NoMatch Then MsgBox "Fejl: INGEN DATO Post!" Exit Function End If TID_FORSKEL = TID_FORSKEL + (rst!Minutter - (Format(rst!Arbeistid, "tt:mm") - Format(p_Start, "tt:mm"))) TID_FORSKEL = TID_FORSKEL + (rst!Minutter - (Format(p_Stop, "tt:mm") - CVDate("08:00")))
End If
Exit Function OH_SHIT: MsgBox Err.Description Exit Function End Function
Hvis du vil finde hellig dage skal du finde ud af at hvornår falder påske dage, og ud fra den dag finde andre hellig dage som pinse osv.: http://www.assa.org.au/edm.html#Computer
hdq>> du siger "jeg bruger kun Access og VBA" og "Det går ikke med : SELECT SaksID, DatoOpprettet, DatoAvsluttet, TID_FORSKEL([DatoOpprettet],[DatoAvsluttet]) AS TotaltMinutter FROM TABLE1
Dersom jeg kun ønsker å bruke sql, hvordan gjør jeg det da ? Hvordan kobler jeg disse to tabbelene sammen ?"
TID_FORSKEL er VBA! Som terry siger "you can NOT get a SQL to make these calculations for you."
Jeg hadde problemer med å få koden til "amerikaner" tik å fungere. I løpet av lørdag fikk jeg laget min eget kode, den har da løst mine problem. Takk for mange gode forslag.
If StartDato > AvsluttDato Then GoTo DatoStørre If Format(StartDato, "w") = "1" Or Format(StartDato, "w") = "7" Then GoTo FeilOppstart If Format(AvsluttDato, "w") = "1" Or Format(AvsluttDato, "w") = "7" Then GoTo FeilAvslutt
Dager = StartDato
Do Until Dager >= AvsluttDato
S = Format(Dager, "m") D = Format(Dager, "d")
If Format(Dager, "w") = "1" Or Format(Dager, "w") = "7" Then Minutter = Minutter + 0 ElseIf (S = 12 And D = 24) Or (S = 12 And D = 25) Or (S = 12 And D = 26) Or (S = 1 And D = 1) Or (S = 5 And D = 17) Then Minutter = Minutter + 0 ElseIf (S = 12 And D = 31) Then Minutter = Minutter + 300
'ElseIf Dager = DateValue("24.12.2002") Then 'Minutter = Minutter + 0
ElseIf S = 6 Or S = 7 Or S = 8 Or (S = 5 And D >= 15) Then Minutter = Minutter + 450 Else Minutter = Minutter + 480 End If Dager = Dager + 1 Loop
Tiden = DateDiff("n", StartM, AvsluttM) + Minutter If Tiden < 0 Then GoTo klokkeslett Me.txtTid = Tiden Exit Function
klokkeslett: MsgBox "Opprettet kl. er større en avslutnings kl.", vbCritical, "Feil" Me.txtTid = 0 Exit Function
DatoStørre: MsgBox "Opprettet dato er større en avslutnings dato", vbCritical, "Feil" Me.txtTid = 0 Exit Function
FeilOppstart: MsgBox "Oppstarts dato er en lørdag eller søndag", vbCritical, "Feil" Me.txtTid = 0 Exit Function
FeilAvslutt: MsgBox "Avsluttnings dato er en lørdag eller søndag", vbCritical, "Feil" Me.txtTid = 0 Exit Function
hdg>You cant expect to get much help if we can use our time and expect nothing. YES, I know you solved the problem yourself but at least amerikana's answer was correct, but you couldnt get it to work. :o)
Terry>> Well, you know he has 200 he can "kom' af med". Here's a guy who started with -- "Har dere noen forslag?" continues with "Så jeg ønsker å ha en seperat database som viser slike begrensinger", complains that he want's an answer in clean SQL and then uses a page of just code to accomplish it. "He's mad that trusts in the tameness of the wolf, or a whore's oath" - King Lear
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.