Meetstaat van werkprestaties

Status
Niet open voor verdere reacties.

Hvdl70

Gebruiker
Lid geworden
4 jan 2009
Berichten
36
Ik zit een beetje vast bij berekening van werkuren voor ons technisch personeel:
Ik werk met access 2003 en heb 2 tabellen:
techniekers met hierin : TechID - Technaam - Tech Initialen - Tech WWV
Uurberekening met hierin : TechID - datum - beginuur - einduur - pauze - woonwerk - enz...
Via een formulier geef ik alle waarden in en dat lukt perfect, heb ook al Query's gemaakt voor overzicten per technieker, en hier geen probleem. MAAR ik zit met het volgende:

Probleem 1: om fouten te voorkomen mag ik per technieker maar 1 keer dezelfde datum ingeven, nu geef ik zoveel keer dezelfde datum met werkuren in als ik wil.
Probleem 2 : In het formulier geef ik de mogelijkheid (door een vinkje te plaatsen) aan te geven of die bepaalde dag een recupe dag is (van overuren), een ziektedag of vakantiedag.
Als deze is aangevinkt, dan mag ik de mogelijkheid niet krijgen in het formulier om beginuur, einduur, pauze, enz in te vullen (moeten dan 'grijs' komen te staan.

Wie kan me helpen? :confused:

een beginnend acces leerling (via online VDAB Belgie) en zelfstudie

Proberen is leren
 
Je eerste probleem is vrij simpel op te lossen, door in de tabel [Uurberekening] een sleutel aan te brengen. Standaard krijg je van Access een autonumeriek veld als sleutel, maar daar heb je in jouw geval niet veel aan. Mocht je die bij het aanmaken van de tabel hebben geaccepteerd, dan kun je, als er verder geen tabellen gekoppeld zijn aan [Uurberekening], het veld ID verwijderen. Eventueel kun je hem later weer aanmaken, als je er toch één wilt hebben.

Het probleem dat je wilt tackelen, is dat één persoon nooit op dezelfde datum en tijd twee handelingen kan verrichten. (vrouwen schijnen dat wel te kunnen, ze noemen dat multitasken, maar dit terzijde...) Daarmee heb je a.h.w. al gedefinieerd wat één record uniek maakt: De TechID, de Datum, de Begintijd en de Eindtijd. Deze velden moet je dus in het ontwerpscherm van de tabel selecteren, waarna je op de knop met het sleuteltje klikt, om er een gecombineerde sleutel van te maken.

Als dit is gelukt, zul je zien dat je nooit meer een zelfde combinatie van TechID, datum, begintijd en eindtijd kunt toevoegen, omdat er al een record met die gegevens bestaat. Je krijgt dan een (enigszins cryptische) uitleg van Access dat je niet kunt opslaan; je zult dus eerst een andere combinatie moeten maken.

Helemaal waterdicht is deze oplossing overigens niet, want je kunt wel andere tijden gebruiken op dezelfde dag, dus er is nog wel wat extra werk nodig om e.e.a. waterdicht te krijgen. Bijvoorbeeld: geen tijden gebruiken, maar een tabel met tijdsblokken vastleggen, en dus een getal opslaan met waarde van het tijdsblok. Dan volstaat een sleutel van TechID, Datum en Tijdsblok. Veel robuuster....

Je tweede probleem kun je oplossen door een <Na bijwerken> gebeurtenis te koppelen aan het aankruisvakje, dat de onderdelen die je wilt uitschakelen disabled.
Voorbeeldje:

Code:
If Checkbox.value=-1 (aangevinkt dus) then 
     Beginuur.enabled=False
Else
     Beginuur.enabled=True
End if

En daar zet je dan ook de overige velden uiteraard bij.
Maar ik zou dus in eerste instantie bekijken of je de werkuren kunt onderbrengen in een aparte tabel, omdat je anders problemen krijgt met je urenregistratie. Ook al omdat je zult moeten afvangen dat een eindtijd nooit voor een begintijd kan liggen...

Michel
 
Je eerste probleem is vrij simpel op te lossen, door in de tabel [Uurberekening] een sleutel aan te brengen. Standaard krijg je van Access een autonumeriek veld als sleutel, maar daar heb je in jouw geval niet veel aan. Mocht je die bij het aanmaken van de tabel hebben geaccepteerd, dan kun je, als er verder geen tabellen gekoppeld zijn aan [Uurberekening], het veld ID verwijderen. Eventueel kun je hem later weer aanmaken, als je er toch één wilt hebben.

Het probleem dat je wilt tackelen, is dat één persoon nooit op dezelfde datum en tijd twee handelingen kan verrichten. (vrouwen schijnen dat wel te kunnen, ze noemen dat multitasken, maar dit terzijde...) Daarmee heb je a.h.w. al gedefinieerd wat één record uniek maakt: De TechID, de Datum, de Begintijd en de Eindtijd. Deze velden moet je dus in het ontwerpscherm van de tabel selecteren, waarna je op de knop met het sleuteltje klikt, om er een gecombineerde sleutel van te maken.

Als dit is gelukt, zul je zien dat je nooit meer een zelfde combinatie van TechID, datum, begintijd en eindtijd kunt toevoegen, omdat er al een record met die gegevens bestaat. Je krijgt dan een (enigszins cryptische) uitleg van Access dat je niet kunt opslaan; je zult dus eerst een andere combinatie moeten maken.

Helemaal waterdicht is deze oplossing overigens niet, want je kunt wel andere tijden gebruiken op dezelfde dag, dus er is nog wel wat extra werk nodig om e.e.a. waterdicht te krijgen. Bijvoorbeeld: geen tijden gebruiken, maar een tabel met tijdsblokken vastleggen, en dus een getal opslaan met waarde van het tijdsblok. Dan volstaat een sleutel van TechID, Datum en Tijdsblok. Veel robuuster....

Je tweede probleem kun je oplossen door een <Na bijwerken> gebeurtenis te koppelen aan het aankruisvakje, dat de onderdelen die je wilt uitschakelen disabled.
Voorbeeldje:

Code:
If Checkbox.value=-1 (aangevinkt dus) then 
     Beginuur.enabled=False
Else
     Beginuur.enabled=True
End if

En daar zet je dan ook de overige velden uiteraard bij.
Maar ik zou dus in eerste instantie bekijken of je de werkuren kunt onderbrengen in een aparte tabel, omdat je anders problemen krijgt met je urenregistratie. Ook al omdat je zult moeten afvangen dat een eindtijd nooit voor een begintijd kan liggen...

Michel

Beste Michel,

Dank voor je reactie, probleem 1 is al opgelost door een gecombineerde sleutel te plaatsen bij TechID en de datum (bij testen blijkt dat je dan geen zelfde combinaties kan maken)
Wat de uren betreft, die worden ingegeven uit een fieldlog van voertuig registratie, en kunnen eender welke uren zijn, dit speelt (voorlopig) geen rol.
Het tweede probleem lukt mij echter niet. zoals je kan zien in de database geeft deze problemen (Let niet op de QRY's, die blijken na aanpassing van tech namen niet meer te werken (wel in originele database) en er zitten nog wat foutjes voor ingave van uren in formulier, die denk ik wel te vinden bij de fine-tuning.

Thankx Hvdl70:confused:

Proberen is leren
 

Bijlagen

Omdat ik de namen van je objecten en velden uiteraard niet weet zonder voorbeeld, heb ik zelf wat namen bedacht. Nu je een voorbeeld hebt gepost, kan ik je de code geven voor jouw formulier:

If Jaarlijks_Verlof.Value = -1 Then
Me.Begintijd.Enabled = False
Me.Eindtijd.Enabled = False
Me.Pauze.Enabled = False
Else
Me.Begintijd.Enabled = True
Me.Eindtijd.Enabled = True
Me.Pauze.Enabled = True
End If

Deze code zou ik ook op het BijLaden event zetten van het formulier, zodat bij openen de juiste opties gebruikt worden.

Michel

Wat betreft je sleutel: TechID en Datum kan uiteraard, maar zoals je al geconstateerd hebt, kun je maar één combinatie per dag maken. Je zult je moeten afvragen of er inderdaad maar één actie per dag hoeft te worden vastgelegd, of dat je de mogelijkheid open wilt houden om meer tijdsblokken per dag vast te leggen. Vandaar mijn wat uitgebreidere uitleg eerder. Hoe meer velden als sleutel, hoe meer combinaties je kunt maken.

Michel
 
Hartelijk dank Michel :thumb:
Heb precies nog wat werk voor de boeg...:rolleyes:

Heb nog een probleem met mijn Query's maar zoek het eerst wel op het forum.

Thanks :thumb::thumb::thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan