Avatar billede FewCastle Praktikant
26. marts 2015 - 11:46 Der er 11 kommentarer og
1 løsning

Fraværskalender, gode ideér

Jeg håber der er nogen der kan komme med en del gode ideér til hvordan denne opgave kunne/skal løses.

Vi er et firma med ca. 50 medarbejdere med 8 afdelinger. I øjeblikket har vi et Excelark som er vores fraværskalender for et helt ferieår ad gangen. Dvs. der er 365 kolonner (365 dage), så man kan notere for hver dag og for hver person (rækker) hvad det er for et fravær man har. Det kan være ferie, omsorgsdag, kursus, orlov, afspadsering/Flex og barsel.

Det jeg har lavet er nøjagtig det samme i html. Den looper igennem 365 dage (for at vise en kalender), hvor den for hver dag kigger ned i databasen om der er helligdag eller om der skulle være et fravær for en medarbejder.

Nu er det jo en del forespørgsler den skal laves ned i databasen og det gør at det tager lidt tid at kommer igennem alle medarbejdere.

Og det er så her jeg har behov for nogle ideér til hvordan det her kan gøres meget hurtigere.
Kan der optimeres på databasen (ms sql)?
Kan der optimeres i den måde jeg henter data på?
Kan der optimeres i den måde jeg laver min kalender i html?

Ved godt jeg ikke viser noget kode, men det er mere hvordan man kunne gribe opgaven an, så det tog kortest muligt tid at vise en fraværskalender for et ferieår - 1. maj til 30. april.

På forhånd tak.
Avatar billede claes57 Ekspert
26. marts 2015 - 12:05 #1
helligdage beregner du - ingen opslag der. Så har du en tabel i koden med dem.
ét sql-kald med på navn og fravær - sorteret på navn og dato - og læg udtrækket i en tabel
loop gennem medarbejdertabellen og hold oppe mod helligdags-tabellen, og udskriv fraværsdatoer.
jeg har haft noget asp-kode, der beregner alle helligdage i et år - kan nok findes et sted igen...
Avatar billede FewCastle Praktikant
26. marts 2015 - 13:33 #2
Hvis du har aspkode til helligdage, så er jeg meget interesseret.
Det kunne selvfølgelig spare for en del forespørgsler, for ikke at sige mange tusind forespørgsler.

Glæder mig :)
Avatar billede claes57 Ekspert
26. marts 2015 - 13:50 #3
asp-kode til kalenderside er her https://www.dropbox.com/s/zn8usbchj9gbl25/kalender.asp?dl=0
umiddelbart viser den en måned ad gangen - men med lidt omskrivning kan den lave alle helligdage i en tabel.
Den har sågar MorsDag og Adventsdage med (lavet til en blomsterforretning oprindeligt).
Avatar billede claes57 Ekspert
26. marts 2015 - 13:51 #4
du burde kunne lave resten med et enkelt opslag for at få alt fravær retur i en tabel.
Avatar billede FewCastle Praktikant
26. marts 2015 - 15:39 #5
Så har jeg fået din Helligdage function lagt ind i mit script og det gør selvfølgelig en forskel...kanon og takker, men den skal jo hen og lave 365 dage x 50 brugere = 18250 opslag for at hente alt fravær til min html tabel.
Det tager ca. 2½ minut!
Kan man lave noget ala
1. den trækker data ud fra database og lægger udtrækket i et array som det første. Det tager jo ikke mange sekunder.
2. herefter laves et For t=1 to antaldage (365) så kalender laves, når kalender generes og medarbejderID og dato findes i array skal der indsættes fravær

Kan man lave sådan noget?
Eller har du en anden ide?
Avatar billede claes57 Ekspert
26. marts 2015 - 15:55 #6
fravær hentes - skiftekode
        strSQL = "select * from fravaer ORDER BY navne ASC, datoer ASC"
        rst.Open strSQL, con, adOpenForwardOnly, adLockReadOnly
        if rst.eof then
          rst.close
          response.write "Intet fravær i året"
        else
          arr=rst.getrows()
          rst.close
          antal=ubound(arr,2)
            for i = 0 to antal
' her løber du igennem arr. Når der skiftes navn på person, så nyt
' underloop med fravær for den nye (dvs ny linje i udskrift).
' dage, der ikke er i arr skal også udskrives, men de er jo alm arbejdstid.
' arr(0,i) er første felt i tabeludtrækket, arr(1,i) andet felt osv...
            next
        end if

så ligger alle data i et array, så behandlingen må være hurtig.
Avatar billede claes57 Ekspert
26. marts 2015 - 15:56 #7
skiftekode = skitsekode.
Avatar billede FewCastle Praktikant
27. marts 2015 - 08:52 #8
Super, takker.
Nu har jeg ikke arbejdet så meget med array. Håber du vil hjælpe.
Det som er vigtigt at få ned i et array er:
medarbejderID
fraværID
startdato på fravær
slutdato på fravær
godkendt

Kan godt se du har skrevet noget kode, men er lidt i tvivl om hvordan det lige skal stykkes sammen :)

Når array er laves skal kalender laves, der skal loopes fra 1 til 365, og hver dato skal tjekkes op imod startdato/slutdato,  medarbejderID og godkendt.
Passer den med den dato og medarbejderID den er kommet til skal  fraværID puttes i kalender.

Er bare bange for at det vil tage lang tid.
Avatar billede claes57 Ekspert
27. marts 2015 - 10:12 #9
Jeg ville så nok danne en års-skabelon linje med alle dage og helligdage. Ud fra en kopi af denne ville jeg så markere en medarbejders fravær, og printe den. Så ny kopi, og næste medarbejder.
Tror det er hurtigst på den måde. Evt først pr medarbejder omregne start/slut fravær til dagnumre i året, da overflytning til skabelon så er hurtigere.
Avatar billede FewCastle Praktikant
07. april 2015 - 11:26 #10
Nu har jeg virkelig fået skåret tiden ned drastisk, men det er ikke nok til at fraværskalenderen kan gå i drift.

Du har i hvert fald givet mig ideer til at komme videre...tusind tak. Læg et svar, så kan vi lukke spørgsmål :)
Avatar billede claes57 Ekspert
07. april 2015 - 11:33 #11
bare luk selv - det var helt nostalgisk, at min gamle asp-kode kunne bruges til noget igen.
Avatar billede FewCastle Praktikant
07. april 2015 - 12:21 #12
okay
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

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