Avatar billede bbkdk Seniormester
25. januar 2005 - 15:16 Der er 9 kommentarer og
2 løsninger

Registrering af tid ved design af database(flexregistrering)

Jeg sidder og pusler med en database til registering af medarbejdernes Kommen og gåen og herud fra beregne opsparet/skyldig tid (flexsystem)

Har følgende tabeller :

TblAnsatte  TblFravær  TblRegistrering    TblNormtider
AnsatID      FraværID    RegistreringID      NormtidID
Navn        Fravær      AnsatID            ? 
NormtidID              Dato
                        Kommet
                        Gået 
                        FraværID
                        Rettet
                        Bemærkninger

Så kommer problemet - der mangler jo noget under TblTidsgruppe. De fleste ansatte er fuldtids, men der er også et antal, der har andre tider på de enkelte dage.
Hvis der så skal ske en beregning på de enkelte dage, skal antallet af timer for en ansat tælles sammen. Som regel er der kun en Kommet og en Gået, men der kan være flere.
Summen af anvendt tid for en dag skal derefter trækkes fra dagens normtid for den pågældende medarbejder, hvorefter +/- kan angives.
Men hvordan finder jeg normtiden for medarbejderen for den pågældende dag - skal der oprettes mandag, tirsdag, onsdag, torsdag og fredag som felter i TblNormtider og i værdi så angiver f.eks. 7 timer, 7 timer, 9 timer etc........?
Jeg kan forestille mig, at format("d"[Dato])skal bruges, der angiver, hvilken ugedag der er tale om.
Men hvordan kombinere man ovennævnte ugedag med den værdi for den pågældende medarbejder, som må findes under Normtid.
Dvs. at vi har en dato og en medarbejder og skal ud fra disse to oplysninger finde Normtiden for denne medarbejder på den pågældende dato.
Jeg er først på min plads igen i morgen så det varer desværre måske lidt, inden jeg kan vende tilbage.
Avatar billede jensen363 Forsker
25. januar 2005 - 15:44 #1
Som udgangspunkt, skal du have en normtid pr. medarbejderid

Din registrering kan godt håndtere flere møde/gå-tider pr. medarbejder :

MedarbejderID    OrdreNr    Dato            Start    Slut
1            1350    07-10-2004    07,00    07,30
1            1337    07-10-2004    07,30    14,00
1            1319    07-10-2004    14,00    14,45
2          1350    07-10-2004    07,00    14,45
3            1350    07-10-2004    07,00    14,30

Du skal være opmærksom på, at Access som udgangspunkt ikke kan håndtere timeformat ud over 24 timer, derfor skal indtastning foretages som [tt,mm] med et begvedliggende modul som beregner/konvertere data.

Eksempel :

SELECT tblDataRegistering.MedarbejderID, tblDataRegistering.OrdreNr, tblDataRegistering.Dato, tblDataRegistering.Start, tblDataRegistering.Slut, (TidTilcenti([Slut])-TidTilcenti([Start])) AS Tid_I_Cmin
FROM tblDataRegistering INNER JOIN tblMedarbejderRegister ON tblDataRegistering.MedarbejderID = tblMedarbejderRegister.MedarbejderID;

Giver følgende output :

MedarbejderID    OrdreNr    Dato            Start    Slut    Tid_I_Cmin
1          1350    07-10-2004    07,00    07,30    0,50
1            1337    07-10-2004    07,30    14,00    6,50
1            1319    07-10-2004    14,00    14,45    0,75
2          1350    07-10-2004    07,00    14,45    7,75
3            1350    07-10-2004    07,00    14,30    7,50

Det er lidt kompliceret at forklare, men jeg kan maile et eksempel, og så kan vi tage den derfra ....
Avatar billede mugs Novice
25. januar 2005 - 16:57 #2
Jensen363 > Jeg er ikke helt enig med dig i din kommentar vedr. Access datoformat. Det er korrekt, at der kommer problemer hvis starttiden f.eks er Kl. 22:00 og sluttiden ligger efter midnat. Men det er jo fordi brugeren ikke indtaster datoerne.

Jeg vil helt klart have, at tiderne skal medtage dato og år således.

2005-01-25 08:00

På den måde kommer der aldrig problemer med tiden. I en forespørgsel kan der derefter oprettes en funktion (Weekday), der uddrager ugedagen i et udtryk der relateres til tabellen med normtider. I et andet udtryk køres en datediff der beregner antallet af timer, og så har man + eller - timer for den pågældende dag.
Avatar billede jensen363 Forsker
25. januar 2005 - 19:16 #3
Hej Mugs > det er ikke tidspunkt/tjenester efter kl 24.00 jeg refererer til, men derimod summering over 24 timer ... :o)
Avatar billede bbkdk Seniormester
25. januar 2005 - 19:17 #4
Tak for indlæggene begge to !!!

Som Jensen363 skriver skal "der som udgangspunkt være en normtid pr. medarbejderID". Men hvordan? der er jo mange medarbejdere med samme normtid, typisk mandag 7 timer, tirsdag 7 timer, onsdag 7 timer, torsdag 9 timer og fredag 7 timer. Skal der under samtlige medarbejdere oprettes et felt med tiden for mandag, tirsdag osv. Eller kan denne oplysning stå i tabellen TblNormtid, således at der oprettes en post for hver variation af Normtider på arbejdspladsen.
Og så til slut - hvordan indsætter jeg normtiden for medarbejderID 1 for datoen 7/10 2004 i et felt, der herefter kan sammenholdes med, at han den pågældende dag har været på arbejde i 7 timer og 45 minutter.
På ugeniveau kan det gøres med et felt med ugens tid (f.eks 37 timer) men hvordan på dagsniveau?

Mugs - hvordan får man relateret til tabellen med normtider? det må vel være sådan, at TblNormtider har et felt for mandag, tirsdag osv., hvor normtiden for den enkelte dag er angivet.  Men hvordan forklare, at hvis det weekday = 1, skal tiden for feltet Mandag for den pågældende medarbejders NormtidId indsættes? hvis Weekday = 3, er det derimod tiden i feltet Onsdag, der skal anvendes.
Så sådan lidt konkret, hvorledes skal tabellen TblNormtider opbygges, og hvorledes henvises til den fra et felt i formularen, hvor både datoen og den pågældende medarbejder i posten indgår?
Avatar billede mugs Novice
25. januar 2005 - 19:21 #5
Du henviser fra en forespørgsel der bl-a- medtager tabellen TblNormtider ved at indsætte et kriterie:

[Forms]![Formularnavn]![Feltnavn]
Avatar billede mugs Novice
25. januar 2005 - 19:35 #6
Denne returnerer ugedag med tekst.

ugedag: NavnPåUgedag(Weekday([Dato1];2))
Avatar billede bbkdk Seniormester
26. januar 2005 - 08:13 #7
Hej igen !!!

Jeg er enig med Jensen363 i problemet med sammentælling af tid over 24 timer - men det kan jeg løse, hvis det bliver aktuelt

Mugs - hvilke felter skal der være i tabellen TblNormtider, hvad skal de hedde, og hvad skal indholdet være i felterne. Jeg har simpelthen stirret mig blind på problemet med, om der skal være felter for de enkelte dage, og hvordan jeg så finder det rigtige felt.
Et eller andet med: hvis datoen giver en returværdi på 4 (torsdag) så vælg værdien i feltet Torsdag (9 timer)i TblNormtider, hvis den f.eks. er 5 (fredag), så vælg værdien i feltet Fredag (7 timer).
De værdier der returneres er så naturligvis forskellige efter, hilken NormtidID den pågældende medarbejder har.
Avatar billede mugs Novice
26. januar 2005 - 10:36 #8
Du har en tabel med flg felter.

Ugedag (Tekst og PK)
normtid (Integer)

I den tabel hvor du registrerer det daglige timeforbrug, har du et datofelt. Lav din forespørgsel og brug min funktion her:

ugedag: NavnPåUgedag(Weekday([Dato1];2))

Du skal nu have en relation mellem dette udtryk til ugedagsfeltet i den anden tabel. Træk feltet med normtimerne ned i forespørgslen. Hvis du lægger din e-mail, kan jeg sende dig et eksempel iaften.
Avatar billede bbkdk Seniormester
26. januar 2005 - 11:28 #9
Hej Mugs !!
Det er lige før jeg er ked af alt det besvær, jeg har givet dig.
Men vil en sådan tabel ikke kun kunne rumme en ansat, f.eks. den fuldtidsansatte? Der er jo flere normtider, da der er forskellige typer deltidsansatte, dvs. at en ugedag har flere forskellige normaltimer, alt efter hvilken NormtidID der er aktuel.
Min e-mail er kdk@skatte-huset.dk
Avatar billede bbkdk Seniormester
27. januar 2005 - 14:47 #10
Hej begge ...
Mugs - jeg har ikke modtaget noget?
Jensen363 - tak for eksemplet - det har dog også den svaghed, at der kun kan være en arbejdstid i firmaet - til gengæld har den fortalt mig noget om at finde difference mellem to tidspunkter.
Det er åbenbart en hård nød at knække - men jeg har dog på fornemmelsen, at det ligeså meget er fordi, at jeg ikke har forklaret mig godt nok.
Tak for indsatsen - håber det er i orden, at jeg deler points mellem jer.
Avatar billede mugs Novice
27. januar 2005 - 15:51 #11
bbkdk > Jeg har overset din kommentar. Ser på det lidt senere. Tak for point.
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