Access Workforce Planning

Status
Niet open voor verdere reacties.

japdonk

Gebruiker
Lid geworden
26 jul 2012
Berichten
77
Hallo,

Ik ben vrij nieuw in microsoft access, maar wel gevorderd met excel en VBA.
Ik begrijk redelijk hoe access in elkaar zit. Ik ben alleen op zoek hoe ik bepaalde data op basis van datums kan samenvoegen naar weken/maanden etc.

Wat ik wil maken in access is een workforce planning, deze heb ik eerst in Excel gemaakt, maar de file werdt erg traag, en niet gebruiksvriendelijk.

Ik heb een aantal tabellen:
Tabel: Staff:
* Naam
* Datum in dienst
Deze tabel bevat naast deze data nog wat andere standaard data.

Tabel: Staff_Details:
* Naam
* Start datum
* Eind datum
* Afdeling
* Ploeg
* Contract uren
* Contract uren Maandag
* Contract uren Dinsdag
* Contract uren Woensdag
* Contract uren Donderdag
* Contract uren Vrijdag
Hier kan ik meerdere rijen per persoon invullen, ik gebruik de start/eind datum om aan te geven wanneer iemand in een bepaalde ploeg werkte, of wellicht op een bepaald moment andere uren is gaan werken.
zo hou ik ook een historie bij, en kan ik terug vinden hoeveel uur we beschikbaar/aanwezig hadden op bepaalde dagen.

Tabel: Staff_Agenda:
* Naam
* Tag
* Start Datum
* Eind Datum
* Gehele dag (yes/no)
* Uren
Dit is de aanwezigheids agenda. Hier kunnen we de aanwezigheid bijhouden. de tag is V=Verlof, Z=Ziekte, O=Overwerk, T= Training. ik kan aangeven of de persoon een aantal uren afwezig is geweest, of een gehele dag tussen de start/eind datum.

Wat ik uiteindelijk wil, is per afdeling/ploeg, per dag kunnen bekijken hoeveel uren ik aan personeel beschikbaar heb.
Dus de available hours uit de Staff_Details -/+ de Agenda items.
Hierna wil ik nog aparte querys om ze op week/maand niveau te kunnen groeperen.

Ik weet niet goed of dit mogelijk is, of dat ik het misschien beter op een andere manier kan aanpakken.

Hartelijk dank alvast,
Jasper
 
Laatst bewerkt:
Eerst je access database vullen met tabellen en ook de queries aanmaken in access.
Daarna kun je eventueel excel als in- en output gaan gebruiken door access te benaderen vanuit excel (vba).
Ik heb dat een tijdje geleden al eens gemaakt voor 500+ gebruikers. Laat maar weten of je meer info nodig hebt.
 
Eerst je access database vullen met tabellen en ook de queries aanmaken in access.
Rare tip; je 'vult' een database niet met tabellen. Je maakt tabellen aan, legt daarin (in Access) relaties en vult die tabellen. Daar heb je geen queries voor nodig. Wél zou ik daar formulieren voor gebruiken. Excel heb je (uiteraard) nergens voor nodig, want alles kun je in Access afhandelen. Zelfs als je met meerdere gebruikers in de database werkt, kun je met Access blijven werken, bijvoorbeeld via een Backend-Frontend constructie.
Ik snap je tabellen niet helemaal, en de tabel Staff-Agenda bevat een veldnaam waar ik verre van zou blijven (Tag) want dat is een gereserveerd woord. Eerder zou ik dan het begrip 'Verlofsoort' gebruiken. En waarom een Engels woord gebruiken als je voor de rest Nederlandse woorden gebruikt?

Maar goed, je tabel lijkt mij onhandig in het gebruik. Om te beginnen: een aanwezigheidsagenda zoals je hem hebt opgesteld lijkt mij bedoeld voor registraties die op dezelfde dag plaatsvinden. Tenzij je vergaderingen meerdere dagen duren (Tweede kamer wellicht?). Dan heb je dus één datumveld nodig, en twee tijdvelden (Begintijd + Eindtijd) en eventueel een selectievakje <Gehele dag>. Op het formulier kun je daarmee dan de twee tijdvelden automatisch leegmaken als ze al waren ingevuld, en uitschakelen. Want het is ófwel een gebeurtenis die de hele dag duurt, ofwel een gebeurtenis die een deel van de dag duurt. En dan heb je dus die twee tijden nodig.

In de tabel Staff_details zit m.i. ook een doublure: ofwel iemand werkt fulltime (en is dan elke dag 8 uur beschibaar) ofwel parttime, en dan werk je individuele uren op verschillende dagen. Zelfde 'probleem' dus als met de agenda uren: één van de twee procedures volgen. Maar wat kwalijker is, is dat je het totaal aantal contracturen in deze tabel opslaat. Dat is namelijk een eigenschap die bij de persoon hoort. En je wilt uiteraard kunnen controleren of het aantal ingevoerde verdeeluren over Afdeling + Ploeg het totaal aantal contracturen niet overstijgt.

Kortom: ik zou eerst nog eens naar je procedures en workflows kijken voordat je hier mee verder gaat. En dus goed nadenken over het FO dat je als basis gebruikt. Het is heel onverstandig om een systeem dat in Excel werkt letterlijk over te zetten naar Access. Het zijn verschillende programma's, met verschillende kwaliteiten. En Access vraagt echt meer kennis van database principes dan Excel :).

Ben wel benieuwd naar de eerste opzet die je hebt gemaakt.
 
Hi,
ik zou ook eens naar de tabelstructuur kijken. Ik zou een Primary Key veld toevoegen aan elke tabel van het type numeric - long integer. het gemakkelijkste is een autonumber. Dan ben je zeker dat dit uniek is en steeds ingevuld. In de detail tabel kan je dit dan gebruiken als foreign key. Ook de structuur van Staff_detail doet me meer aan excel denken dan Access. Kan het dat het veld contract_uren het totaal is van de uren ma/di/woe/do/vrij?
Maak hiervoor een tabel aan:
cuID: primary key veld, numeric - long integer
cuStaffDetail: foreign key naar het primary key veld in de tabel StaffDetails
cuDag
cuAantalUren

Zo kan je eenvoudig het totaal van de contracturen maken via een groepsquery of in één parameterquery de uren van iedereen voor een bepaalde dag opvragen.
Ik ben zeker niet degene die voor 100% normalisatie gaat, maar een paar basisregels moet je toch in acht nemen als je later niet in moeilijkheden wil komen.

Succes alvast
 
Niemand gaat voor 100% normalisatie. Zou je stapelgek van worden. Maar een veld (of een tabel) waarin je totaal uren optelt/bijhoudt is totaal overbodig, want totalen zijn afleidbare gegevens. Die sla je normaal gesproken niet op. Want die bereken je wanneer dat nodig is. In mijn voorstel is het meer dan voldoende om het aantal contracturen bij de medewerker vast te leggen (als onderdeel van de contract gegevens, wat het is tenslotte) en het aantal werkuren te relateren op je formulieren aan dat aantal. Onder het motto: niet meer uren inplannen dat is afgesproken. Lijkt mij logisch.
 
niet meer uren inplannen dat is afgesproken. Lijkt mij logisch.
Logisch, maar niet werkbaar: overal worden wel overuren gepresteerd.
 
Het gaat hier uiteraard niet over overuren, maar over regulier inplannen van taken. Daarbij ga je uit van het aantal contracturen. Als iemand 36 uur werkt, dan wordt-ie 36 uur ingepland. Althans: zo doen we dat bij mijn huidige werkgever, en ik ken niet anders. Overige (buitengewone) uren kun je uiteraard altijd wel toevoegen. Maar dat zijn dus geen contracturen. Overuren neem je per definitie niet op in een contract.
 
Bedankt alvast voor alle adviezen, very helpfull!

Wellicht denk ik nog teveel in Excel mogelijkheden inderdaad, maar dat is mijn beperkte Access kennis.

Om antwoord te geven op de eerdere vragen/opmerkingen:
* Zodra ik de tabellen en query's werkend heb, dan zal ik inderdaad formulieren gaan maken.
* Ik ga het woordje Tag aanpassen (access gaf overigens geen error, wat hij eerder bij "NAME" wel deedt)
* Ik heb een registratie met van - tot datum nodig omdat een afwezigheid langere tijd kan duren, vakantie, lange tijd ziek, meerdere dagen in training. Wanneer ik aangeef, hele dag, is de operator voor die werkdag dus de uren die hij werkt op die dag afwezig, en moet dat aantal aan uren gebruikt worden. (ook hier weet ik nog niet precies hoe ik dit en access het beste kan doen)
* Wij werken in een onregelmatig ploegenschema van 39 uur per week, afhankelijk van de ploeg/afdeling waar je werkt kan het aantal uur per werkdag afwijken. vandaar dat ik de uren uitslipts in MA t/m VR. daarnaast hebben we inderdaad ook parttimers. Deze dagen samen is inderdaad het totaal aan contracturen per week.
* Wat betreft de Primary key, gebruik ik de naam van de operator, en dat is een verplicht veld om in te vullen in een nieuwe tabel regel. De naam in Staff_details en Staff_Agenda is een dropdown gelinkt aan tabel Staff

* Ik wil inderdaad uiteindelijk via een query kunnen zien voor iedere dag, wat ik aan uren per afdeling/ploeg beschikbaar heb, en wat daar dan af gaat aan verlof ziekte etc. op deze manier kunnen we zien of we voldoende personeel hebben op een bepaalde dag. in Excel deedt ik dit door middel van een SUMIFS functie, waar ik steeds apart alle uren optelde per dag/per shift etc.
Bijgevoegd een voorbeeld van (een deel) van het jaar en week overzicht in excel, om een beetje een idee te hebben.
WEEKOVERZICHT.JPG
JAAROVERZICHT.JPG

Het gevoel dat ik nu heb, is dat ik gebruik maak van een van - tot datum. Maar dat ik in access meer gebruik zou moeten maken van individuele records.
Dus i.p.v.
Naam Verlofsoort Van Datum Tot Datum Hele dag?
KEESJE V 04/04/2022 08/04/2022 Ja

Moet het zijn:
Naam Verlofsoort Datum Hele dag?
KEESJE V 04/04/2022 Yes
KEESJE V 05/04/2022 Yes
KEESJE V 06/04/2022 Yes
KEESJE V 07/04/2022 Yes
KEESJE V 08/04/2022 Yes

Vraag is dan wel van mijn kant hoe ik een van - tot datum makkelijk kan omzetten naar individuele records, want 1 voor 1 invoeren is teveel werk
 
Laatst bewerkt:
Aan plaatjes (of dat Excel of Access is maakt niet uit) hebben we niet zoveel. Je plaatjes in bericht #8 zijn wél te zien, die in bericht #9 niet. Maar goed, aan plaatjes hebben we niks dus doe geen moeite om dat aan te passen. Steek daarentegen die tijd in het anonimiseren van je database en die mee te sturen.
Namen gebruiken als sleutelveld is een bizar slecht idee; moet je nooit doen. Wat als je twee Verhagens als medewerker krijgt? Zegt je dan tegen de tweede: sorry, je moet een andere baan zoeken, want jou naam heb ik al? Nooit doen!!! Maak altijd sleutelvelden die uniek zijn en blijven. Bijvoorbeeld met een Autonummerveld, al mag je uiteraard ook velden maken die je op een logischere manier vult, bijvoorbeeld met een inlognaam. jansen001, jansen012, schaaf001, schaaf 003 etc. Inlognamen zijn daar perfect voor, want IT zorgt er wel voor dat die uniek zijn. Ga niet lopen klooien met namen dus.

Je andere idee is net zo slecht; je kunt prima overzichten maken op basis van begin- en einddatum. En dat vinkje <Hele dag>? Ik blijf erbij dat dat volslagen overbodig is. Als je op vakantie bent van 4-4 t/m 8-4 dan ben je in die periode toch de hele dag weg? En als je een halv dag vrij neemt, wil je toch weten van hoe laat tot hoe laat? Dan is het toch volslagen onduidelijk dat als het vinkje is uitgevinkt, dat a) iemand minder dan een hele dag vrij is, en b) hoeveel uur dat dan wél is, en c) van hoe laat tot hoe laat? Denk eerst goed na over de gegevens die je op wilt slaan, en wat je daaruit wilt kunnen distilleren.

Wij werken in een onregelmatig ploegenschema van 39 uur per week, afhankelijk van de ploeg/afdeling waar je werkt kan het aantal uur per werkdag afwijken. vandaar dat ik de uren uitslipts in MA t/m VR.
Nog zo'n gegeven dat je m.i. op de verkeerde plek inregelt. Als werkuren afhankelijk zijn van ploegen/afdelingen, dan dien je daar een aparte tabel voor te hebben waarin je de werkschema's voor die ploegen en afdelingen vastlegt. In je planningstabellen en verdeelschema's gebruik je die dan om de uren toe te wijzen aan de medewerkers. En dat dan uiteraard gecheckt a.d.h.v. de beschikbare uren van die medewerkers.
 
Hallo,

Bijgevoegd de file

Namen als sleutelveld is wat mij betreft geen probleem, we gebruiken de voor- en achternaam en hebben geen werknemers met dezelfde naam. mocht dat gebeuren zullen we een 2 erachter zetten.
Eventueel kunnen inderdaad de SAP inlog gebruiken als sleutel, wellicht is dat handiger inderdaad.

We hebben ook personeel dat terugkomt van ziekte en maar een aantal uur per dag werkt, met het veld uren kunnen we dus bijv. aangeven dat deze persoon (als hij bijv. 2 uur van de 8 werkt) dat hij 6 uur ziek is. Of iemand die bijv. 2 weken lang elke dag 2 uur training heeft. je vult dus in, of hele dag, of een het aantal uur dat de persoon afwezig is op de werkvloer.
Maar goed, dit werkte prima in excel, maar wellicht dat ik dit in access beter anders kan regelen.

Ik heb geen behoefte aan tijden op dit moment, dit kan op termijn misschien een mooie aanvulling zijn, maar voor nu is het voldoende om te weten hoeveel uur aanwezigheid we totaal in die ploeg op die dag/week/maand hebben, om de planning te kunnen halen.
 

Bijlagen

  • EXAMPLE WFP.zip
    94,5 KB · Weergaven: 22
Namen als sleutelveld is wat mij betreft geen probleem, we gebruiken de voor- en achternaam en hebben geen werknemers met dezelfde naam.
Van dit soort kortzichtigheid breken altijd spontaan mijn kiezen en tenen af. Nog twee 'klanten' meer, en ik kan niet meer lopen :).
 
Los van de dagen die een personeelslid werkt, en addiotionele velden, als ik een tabel heb met vakantie dagen, alleen naam en van - tot datum, en ik zou daar een jaar kalender tegenover zetten (1-1-2022 - 31-12-2022), op welke manier kan ik dan per dag kijken of hoeveel personeelsleden er vrij zijn? Dat is eigenlijk mijn grootste vraag.

Bijv:
01-01-2022 0
02-01-2022 1
03-01-2022 2
04-01-2022 0
05-01-2022 1

etc.
 
Hello Japdonk,

ik vrees dat je in access voor een heel project vertrokken bent. Als dat je hobby is, amuseer je en je zal er wel komen. Maar bedenk ook dat je het warme water terug aan het uitvinden bent. En wil je telkens als je een vraag krijgt betreffende een wijziging in de beschikbaarheid (bv. iemand die plots ziek valt) je alleen vanop je desktop PC/laptop daarop kunt antwoorden/aanpassen, of wil je ook via je smartphone of via een website kunnen verder werken? Aangezien je SAP vermeld, neem ik aan dat jullie gewoon zijn professionele software te gebruiken. Ik zou aanraden om eerst eens de business requirements op te lijsten, en van daaruit eens naar de reeds bestaande oplossingen te kijken (vb. https://bedrijfsrooster.nl/brochure?utm_source=appwiki&utm_medium=cpc&utm_campaign=personeelsplanningplanning&aclid=RwPjm4y6cEhLPVmtvO5v&apid=0&asid=nsjvaljb1dhohgdiicizfodvyyt7jmpl7vi&aref=https%3A%2F%2Fappwiki.nl&atemp=default )
 
Ik snap je voorbeeldje niet. 5 dagen, en dan 0-1-2-0-1 tellen?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan