25. januar 2005 - 15:16Der 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.
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
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;
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.
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?
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.
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.
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
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.
bbkdk > Jeg har overset din kommentar. Ser på det lidt senere. Tak for point.
Synes godt om
Ny brugerNybegynder
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.