Werkrooster in Acces

Status
Niet open voor verdere reacties.

Sonnetje85

Gebruiker
Lid geworden
28 nov 2012
Berichten
102
Ons personeel gaat op vaste tijden bij klanten langs
Ik heb een tabel met Personeel en een tabel Klanten
Dan heb ik de tabel Rooster

Omdat ik graag eerst zelf probeer ben ik al een eind op weg, maar ik weet niet of er betere/snellere/nauwkeuriger manier zijn om dit te bereiken. Alle tips en trucs zijn welkom!

In Rooster heb ik de eerste kolom een keuzelijst met invoervak gemaakt.
Deze haalt personeelsnummer, voor- en achternaam uit de tabel personeel en heeft het criterium dat het dienstverband niet beëindigd mag zijn.

Dan is de 2e kolom idem voor klanten

De 3e kolom heb ik gebaseerd op de tabel Weeknummer (waarin ik 53 nummers heb staan)
Deze kolom heeft keuzelijst met invoervak en mag meerdere waarden bevatten.

Dan heb ik (en dit lijkt mij heel omslachtig, maar ik wist geen betere manier...) kolommen die genaamd zijn "ma0800", "ma0830", "ma0900" etc, voor elk half uur, van ma t/m vr en 08:00 tot 19:00u.
Deze zijn Ja/Nee

Dan heb ik een formulier waarop ik een nieuw rooster kan maken, bovenin vul je Klant en Personeel in en in het veld staan de vinkjes mooi gerangschikt (dit ziet er best overzichtelijk uit zonder alle losse labels)
(Hersenspinsel: kan dit met een kruistabel? de dagen horizontaal en tijden verticaal ofzo?)

Dan heb ik 2 tabellen met 2 formulieren: 1 heet Personeelslid, de ander Weeknummer
Deze 2 formulieren zitten als subformulier op het formulier Rooster zoeken

Dan heb ik de selectiequery die Uit de tabel Rooster, alleen de records van 1 personeelslid en de juiste week laat zien. Tot zo ver gaat het erg goed naar mijn idee (alleen wat omslachtig dus)

Dan komt nu het probleem. Ik heb personeelslid Anna, en die heeft 8 klanten op verschillende momenten in de week. Deze komen netjes als 8 records in mijn query te staan.
Maar als ik nu 1 formulier wil maken, laat deze natuurlijk maar 1 record tegelijk zien... En eigenlijk wil ik een soort agenda-look maken waarin de naam van de klant staat, en het liefst een kleurtje (voorwaardelijke opmaak ken ik al wel een beetje, dus kleurtje en dan de naam van de klant in dezelfde kleur zodat deze niet zichtbaar is in elk vakje, lukt wel) voor zolang de afspraak duurt (Ja heb aan Googleagenda gedacht maar we willen alles graag in 1 systeem dat niet internetafhankelijk is ivm laptopgebruik)
 
Dan heb ik een formulier waarop ik een nieuw rooster kan maken, bovenin vul je Klant en Personeel in en in het veld staan de vinkjes mooi gerangschikt (dit ziet er best overzichtelijk uit zonder alle losse labels) (Hersenspinsel: kan dit met een kruistabel? de dagen horizontaal en tijden verticaal ofzo?)
Helaas pindakaas, dit kan niet meer met een kruistabel. Althans niet met jouw opzet. Daarvoor heb je gegevens nodig die je kunt groeperen, en die heb je niet. Je maakt nu namelijk één record met de naam, en de 125 selectievakjes (ik doe maar een gooi...). Eigenlijk, en dat raad ik je zowiezo aan, zou je voor elke afspraak een apart record moeten maken, met daarin de datum, de medewerker, de begintijd, de eindtijd en de eventuele reistijden als de afspraken in het land zijn. Daarnaast zou ik zelf een tabel met bloktijden maken, en met een Cartesisch product daar een staatje van maken waarin de blokken van 30 minuten netjes gevuld worden.
Op basis daarvan kan je prima een kruistabel maken die dan grafisch laat zien welke blokken er gevuld zijn en welke niet. Zie voorbeeldje.
 

Bijlagen

Op mijn werkpc staat windows 8... en nu vraagt hij welke app ik wil gebruiken om de .rar te openen... ik weet dat die vraag niet hier hoort... maar zo kan ik niet zien wat je hebt
 
Je kunt wel ergens een evaluatieversie van Winrar vinden, en daarmee kun je de zip openen. Of je gebruikt de zip ;)
 

Bijlagen

Die van jou is deels ingewikkelder dan ik nodig heb, en deels minder...
Je rapport overzicht_Kruistabel is geweldig ;) dat is wel ongeveer wat het moet gaan worden

Graag wil ik straks per klant of per personeelslid het rooster weer kunnen geven, dus dat wordt dan de naam van het rapport of formulier (kan formulier ook (anders kan ik geen knop naar het hoofdmenu plaatsen)? of kan ik een rapport ook beeldvullend maken en dan dezelfde layout geven (en hoe kom ik dan terug?)?)
Verticaal moeten dan de 5 dagen komen te staan (geen data maar ma t/m vr)

Horizontaal net als je nu hebt de tijden, maar het personeel werkt alleen maar in blokken van een half uur. Jouw tabel invoertijd is daarmee denk ik niet nodig, je tabel bloktijden heb ik al overgenomen

Dan moet er de mogelijkheid zijn weken aan het rooster toe te kennen, de meeste weken is het rooster hetzelfde, maar bij een vakantie van personeel of klant veranderd er dus een week, die zou ik graag los kunnen opslaan en opzoeken

Dan zou het heel mooi zijn (en ik hoop haalbaar) om de naam van de klant (indien rooster van personeel) of naam personeel (indien rooster klant) in het balkje te laten zien, zo niet, dan is aan het eind van de regel misschien een optie

Sorry van al je tijd... zijn er hier niet meer mensen die kunnen helpen?
 
Krijg ik nu de indruk dat je per klant een rapport wilt hebben?
Graag wil ik straks per klant of per personeelslid het rooster weer kunnen geven, dus dat wordt dan de naam van het rapport of formulier
Een rapport kun je prima aansturen vanaf een formulier, waar je dan de filtering maakt. In het rapport kun je dan uiteraard de klantgegevens ook opnemen. De rest van je vraag is goed te doen; ik zou zeggen: stoei er eens mee!
En er zijn verder prima helpers actief, alleen zitten we nu natuurlijk ook in de vakantietijd. En je moet er ook tijd voor hebben :)
 
Ben al wel weer een eindje op weg denk ik...

tBloktijden en tblWerktijden heb ik overgenomen. Ik Werktijden heb ik Personeel gemaakt van medewerker en daar een opzoeklijst met keuzevak van gemaakt (relatie gelegd naar de tabel Personeel). De datum heb ik veranderd in 1 maandag, 2 dinsdag, ivm oplopend sorteren (maak ik straks denk ik ook gewoon een keuzelijst van en dan laat ik de cijfers wegvallen) En ik heb weeknummer toegevoegd als keuzelijst met invoervak en meerdere waarden toegestaan.

In je query qbloktijden heb je in de laatste 2 kolommen CDbl([tblWerktijden].[Begintijd]) en [Eindtijd]
Heeft dit te maken met de formule? Want als ik deze kopieer zet hij er automatisch Expr: voor en het is dat niet

De formule heb ik nog niet naar mijn database gekopieerd omdat ik daar nog niet precies gevonden heb wat ik moet wijzigen.
 
Jawel... en de query doet het verder heel erg goed, alleen pakt hij willekeurig tijdblokken en niet passend bij de aangegeven tijd, zoals gezegd heb ik nog niets van de formule gebruikt, ik ben stap voor stap dingen aan het kopieeren, geen hele tabellen enzo
 
Doe jezelf een lol, en stop ogenblikkelijk met het maken van keuzelijsten in tabellen; daar zijn ze helemaal niet voor bedoeld. Gebruik in een tabel alleen keuzelijsten van het type MLijst met waarden>, dus lijsten die je zelf intypt. In tabellen wil je de opgeslagen gegevens zien, niet een of andere tekst die toevallig ook in een tabel staat. Met queries kom je daar straks enorm mee in de knoei, en het is ook nergen voor nodig. Want wie ziet, behalve de beheerder, ooit de gegevens in de tabel?
 
Oke keuzelijst verwijderd :) zie nu dat het dan in het formulier wel gewoon kan

vraag 1:
Hoe doe ik dat met de weeknummers? Hier wil ik meerdere waarden toestaan en dat kan volgens mij wel alleen als het een keuzelijst is?

vraag 2:
In je query qbloktijden heb je in de laatste 2 kolommen CDbl([tblWerktijden].[Begintijd]) en [Eindtijd]
Heeft dit te maken met de formule? Want als ik de CDbl kopieer zet hij er automatisch Expr: voor en het is dat niet
 
Laatst bewerkt:
Ik snap niet helemaal wat je met die weeknummers wilt, want volgens mij wil je een planningsrooster maken. En doel daarvan lijkt mij toch dat je kan zien wie op welke datum waar zit. Keywoord in die zin is natuurlijk het woord datum. Als je een weekschema wilt maken, gebaseerd op een kruistabel met 5 rijen (ma/t/m vr) en de halfuurblokken boven de kolommen, zo'n beetje zoals mij rapportje, dan heb je tenminste datums nodig, en geen weeknummers. Die kun je heel simpel uitrekenen op basis van de datum, en daar kun je dus ook prima op filteren (geldt natuurlijk ook voor de namen van de dagen) maar andersom? Ik heb wel eens een formule gezien die op basis van een weeknummer een een dagaanduiding een datum uitrekent, maar daar wil je echt niet aan beginnen...
 
Vraag 1: weken
Het gaat erom dat de meeste weken het rooster hetzelfde is
Dus elke week (omdat je nieuwe data hebt) een nieuw rooster maken is heel veel werk
Nu met de vakantie hebben we wel een aantal weken die anders zijn (omdat perosneel voor anderen moet invallen)

Als ik straks een zieke heb, wil ik graag meteen zijn/haar rooster voor die week kunnen pakken
En dan kijken wie op die tijden plaats heeft om in te vallen

Vraag 2: bloktijden
Met die CDbl is gelukt, alleen is nu het probleem dat werktijden worden ingegeven als 10:00 tot 12:30
En de database vindt dat 12:30 bij het blok 12:30 tot 13:00 hoort...
Alleen wanneer de werktijd 12:30 tot 14:00 is, dan klopt dat ook
Dus heb ik nu een kolom in de query: Aangepaste eindtijd: [tblWerktijden.Eindtijd]-0,0001
Dan moet CDbl([tblWerktijden].[Eindtijd]) veranderen. Ik heb geprobeerd:
CDbl([Aangepaste eindtijd])
CDbl([qbloktijden.Aangepaste eindtijd])
maar deze pakt hij niet, hoe verwijs je naar een kolom uit de eigen query ipv uit een tabel?
Of kan ik in tblWerktijden een berekende kolom maken met de aangepaste tijd?
 
Laatst bewerkt:
Het gaat erom dat de meeste weken het rooster hetzelfde is. Dus elke week (omdat je nieuwe data hebt) een nieuw rooster maken is heel veel werk.

Als je alleen maar een weekschema wilt zien dat af en toe verandert, dan kun je beter iets in Excel maken; dan is een database gruwelijke overkill. Je wilt dan namelijk helemaal niet met DATA werken, maar alleen grafisch iets zien. Een DATAbase slaat gegevens op, en dat heeft maar één eis: dat je data hebt. En bij een rooster houdt dat in: je plant iemand in op een bepaalde dag op een bepaalde tijd. Dàt is namelijk de essentie van tijdsplanning. Op basis daarvan kun je overzichten maken (hoeveel uur heeft een medewerker gewerkt in april? Hoeveel uur was hij ziek?) etc. Nogmaals: als je dat niet wilt, moet je geen database maken, maar Excel of desnoods Outlook.
Ik snap wel dat je geen zin hebt om voor elke week dezelfde data in te kloppen, maar dat is nu een kwestie van goed automatiseren. Het is niet zo moeilijk om een weeksjabloon te maken, en op basis daarvan de tabel met de Roosterindeling te vullen. En dat dan desnoods gelijk voor een hele maand of meer. Al kun je de vraag stellen of dat wel zo zinvol is, want dat is afhankelijk van het soort rooster. Voor scholen bijvoorbeeld ligt een lesrooster doorgaans voor een heel semester of een heel jaar vast, en kun je gelijk inplannen. Voor een trainingsinstituut dat maximaal 3-daagse trainingen verzorgt, zul je met weekplanningen willen werken. En dan nog is het de vraag of je daar een sjabloon voor kunt verzinnen. Kortom: hoe makkelijk het roosteren is, hangt af van de bedrijfsvoering.
 
Maar als een personeelslid ziek is, kan Excel niet voor mij kijken welke invallers passen bij de klant en of deze invaller beschikbaar is op die tijd op die dag in die week. En dan alle roosters gaan bekijken willen we nu juist niet meer

en vraag 2?
 
Het lijkt mij simpeler om de tabel Bloktijden aan te passen. Een starttijd zul je doorgaans niet op de seconde ingeven, dus als een bloktijd loopt van 10:00 tot 12:30 en de volgende van 12:30 tot 14:00 uur, dan loopt hij nu nog van 10:00:00 tot 12:30:00 en van 12:30:00 tot 14:00:00 uur. Je kunt de tijden dan beter als volgt invullen: 10:00:30 tot 12:30:00 en van 12:30:30 tot 14:00:00 uur. Nu zou een blok van 11:30 tot 12:30 bij het juiste blok gezet moeten worden.
 
Bloktijden aangepast, moet dan dus ook maar tot 12:29:00 en vanaf 12:31:00 dan pakt hij nooit een verkeerd blok erbij.

Verder lekker zelf aan het stoeien:
vraag 1:
In tblWerktijden heb ik een kolom Klant toegevoegd, uiteraard numeriek en zonder keuzelijst ;)
Nu wil ik in de qbloktijden de kolom toevoegen (dus netjes klantnummer in relaties verwerkt) maar als ik de tabel toevoeg (zonder al een kolom en waarden en criteria etc) doet mijn query het al niet meer.
Eerst dacht ik dat een kruistabel maar 1 rij kolomkoppen en 1 rij rijkoppen kon hebben, maar zowel datum als personeel zijn al rijkoppen, dus daar zou klant toch bij moeten kunnen?

vraag 2:
Verder heb ik zelf de kruistabel gemaakt. Als ik waarde selecteer bij aantal krijg ik mooi een 1-tje te zien bij elk blok dat meetelt.
Maar alle andere blokken zijn niet zichtbaar... In jouw tabel zijn alle blokken zichtbaar en staat nergens een waarde. Waar zit dat verschil?

Als ik er vervolgens een rapport van maak, kan ik met voorwaardelijke opmaak alle stukjes die waarde 1 hebben, kleuren.
Alleen zie ik dus alleen de blokken die ergens een keer gewerkt worden, neem aan dat dat oplost bij vraag 2.
 
Je kunt een stevig aantal velden als Rijkop gebruiken, dat is het probleem niet. En als de tabel Klanten gekoppeld is, en de data goed is ingevuld, zou je resultaat moeten zien. Maar wellicht is het veld nog leeg? In dat geval zou je de relatie moeten omzetten naar een Outer Join.
Kruistabellen maken standaard net zoveel kolommen aan als er verschillende waarden zijn te vinden. Dat is soms prima, maar soms wil je ook de lege kolommen zien. Denk bijvoorbeeld aan een jaaroverzicht op maanden, dan wil je de totalen zien voor Januari-Juli, want tot dan heb je data, maar Augustus t/m December wil je toch ook (met lege waarden uiteraard) zien. Dat kan, als je een trucje toepast: in de <Eigenschappen> van het kolomveld heb je een eigenschap <Kolomkoptekst>. Daar kun je alle kopteksten intypen die je wilt zien. In het geval van de maanden typ je daar dus alle namen van de maanden. De kruistabel laat dan bij uitvoeren zowiezo alle gedefinieerde koppen zien, of er waarden voor zijn of niet.
Als je mijn voorbeeldje bestudeert zul je zien dat de kolomkoptekst is gedefinieerd als: "07:00 - 07:29";"07:30 - 07:59";"08:00 - 08:29";... "17:00 - 17:29";"17:30 - 18:00" en dat houdt dus in dat die kolommen in het raster zitten.
Eén waarschuwing: als je een kolomnaam definieert die niet bestaat, dan zie je hem wel terug in je kruistabel, maar dan heeft die geen waarden. Dus als je de maand 'junie' invult, dan zie je de kolommen 'april, mei, junie' staan, waarvan april en mei gegevens hebben, maar junie leeg is. Kortom: de veldnamen moeten letterlijk worden overgenomen.
 
Eerste is opgelost: er waren dusdanige relaties dat er een cirkel ontstond, nu heb ik 1 relatie verwijderd in de query en nu doet hij het wel.

En het tweede ook :)

Nu ga ik stoeien met het 1-malig plaatsen van de klantnaam in het balkje
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan