Avatar billede hdg Nybegynder
07. november 2002 - 10:52 Der 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)

Men jeg klarer ikke å få til en løsning/kobling.

Håper på gode inspill.
Avatar billede skab Nybegynder
07. november 2002 - 11:00 #1
Jeg tror det er svrt at lave i en database uden at lave noget kode til eks. ASP eller PHP... er det noget du har mulighed for at anvende
Avatar billede hdg Nybegynder
07. november 2002 - 11:05 #2
Jeg bruker kun Access 97
Avatar billede hdg Nybegynder
07. november 2002 - 11:06 #3
og VBA
Avatar billede terry Ekspert
07. november 2002 - 11:15 #4
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.
Avatar billede terry Ekspert
07. november 2002 - 11:17 #5
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)
Avatar billede amerikaner Nybegynder
07. november 2002 - 11:24 #6
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
Avatar billede amerikaner Nybegynder
07. november 2002 - 11:25 #7
OOPS ændre Exit Sub til Exit Function
Avatar billede hdg Nybegynder
07. november 2002 - 11:33 #8
Jeg tror de liker øl.  Hvem gjør ikke det ?    :)

Det er ikke bare sommertid/vintertid/lørdag/søndag som er problemet.
Men også helligdager/fridag.

Så jeg ønsker å ha en seperat database som viser slike begrensinger.
I Norge har vi også noen arbeidsdager som bare varer frem til kl 1300.

Har du forslag til noen vba kode ?  kan ikke dette gjøre i sql ?
Avatar billede amerikaner Nybegynder
07. november 2002 - 11:38 #9
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
Avatar billede hdg Nybegynder
07. november 2002 - 11:39 #10
Jeg skal prøve vba koden etter lunsj.  :)
Avatar billede amerikaner Nybegynder
07. november 2002 - 11:52 #11
PS. hvis den fejler med TID_FORSKEL prøve

TID_FORSKEL = TID_FORSKEL + (rst!Minutter - (CVDate(Format(rst!Arbeistid, "tt:mm")) - CVDate(Format(p_Start, "tt:mm"))))

and

TID_FORSKEL = TID_FORSKEL + (rst!Minutter - (CVDate(Format(p_Stop, "tt:mm")) - CVDate("08:00")))
Avatar billede hdg Nybegynder
07. november 2002 - 12:37 #12
SQL

Derom jeg har 2 tabeller, en som inneholder :
SaksID, DatoOpprettet,DatoAvsluttet

den andre tabbelen inneholder

Dato, Minutter

Kan jeg ikke ved hjelp av SQL gjøre det slik at kun de dato postene som er
mellom DatoOpprettet,DatoAvsluttet vises ?

Slik at resultatet blir : SaksID, DatoOpprettet,DatoAvsluttet, TotaltMinutter
Og at jeg deretter korrigerer for klokkeslett ?
Avatar billede amerikaner Nybegynder
07. november 2002 - 12:44 #13
Ja, det kan du, hvis funktioner TID_FORSKEL virke!!!

SELECT SaksID, DatoOpprettet, DatoAvsluttet, TID_FORSKEL([DatoOpprettet],[DatoAvsluttet]) AS TotaltMinutter FROM TABLE1
Avatar billede hdg Nybegynder
07. november 2002 - 12:56 #14
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 ?

Sli at resultat blir som nevnt i sted :
SaksID, DatoOpprettet,DatoAvsluttet, TotaltMinutter

Jeg har tentk å bruke resultatet flere steder så det hadde vært absolutt best best å få gjort dette i SQl
Avatar billede terry Ekspert
07. november 2002 - 12:59 #15
you can NOT get a SQL to make these calculations for you. That is why you need a function to make these calculations.
Avatar billede hossein Nybegynder
07. november 2002 - 22:02 #16
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

hvis du vil vide om kalender: http://www.boonhill.net/faac/other/calfaq.html
Avatar billede amerikaner Nybegynder
08. november 2002 - 08:53 #17
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."

Du har dit svar, prøve at arbejd med det..:-)
Avatar billede hdg Nybegynder
08. november 2002 - 09:11 #18
OKI, jeg skal nå prøve ut din VBA kode.
Avatar billede terry Ekspert
11. november 2002 - 21:17 #19
hdg>hows it going here?
Avatar billede hdg Nybegynder
12. november 2002 - 14:53 #20
Hei

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.

Her er min kode :

Function Arbeidsdager()
Minutter = 0

StartDato = DateValue(txtDatoOpprettet)
AvsluttDato = DateValue(txtDatoAvsluttes)
StartM = TimeValue(txtKlokkeslettOpprettet)
AvsluttM = TimeValue(txtKlokkeslettAvsluttes)

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

End Function
Avatar billede terry Ekspert
12. november 2002 - 14:56 #21
and now we can guess what happens :o)
Avatar billede hdg Nybegynder
12. november 2002 - 15:13 #22
:)
Avatar billede terry Ekspert
12. november 2002 - 15:17 #23
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)
Avatar billede terry Ekspert
12. november 2002 - 15:18 #24
P.S If you want a function which can calculate weekends and holidays then let me know (cost 200 points :o) )
Avatar billede amerikaner Nybegynder
12. november 2002 - 15:27 #25
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

You can't please all the people all the time :-)
Avatar billede terry Ekspert
12. november 2002 - 15:30 #26
:o)
Avatar billede hdg Nybegynder
12. november 2002 - 15:32 #27
Jeg er litt enig med at amerikaner skal få poeng.
Selv om jeg laget koden selv.

Jeg åpner opp ett nytt spørsmål.

Beklager
Avatar billede terry Ekspert
12. november 2002 - 20:47 #28
very fair hdg :o)
Avatar billede hdg Nybegynder
13. november 2002 - 14:20 #29
:)
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