ACCESS VBA of Expressie: Totalen berekenen per kwartaal via keuzelijst.

Status
Niet open voor verdere reacties.

fde

Gebruiker
Lid geworden
31 aug 2017
Berichten
110
Ik heb een enkelvoudig formulier: frm_uitvoerder_registratie_uren.

Op dit form staan verschillende berekeningen volgens gepresteerd/niet-gepresteerd uur-type (16 types) en dit volgens kwartaal.

Elk tekstveld heeft zijn eigen formule waarvan ik vermoed dat het gestructureerder opgemaakt kan worden.

Code:
=IIf(IsNull(DSum("[UITVOERDER_UREN_TOTAAL_NU]";"[tbl_uitvoerder_uren]";"[UITVOERDER_UREN_DATUM_VAN] between #2018/01/01#and#2018/03/31# AND [ID_UITVOERDER] = " & [ID_UITVOERDER] & ""));0;DSum("[UITVOERDER_UREN_TOTAAL_NU]";"[tbl_uitvoerder_uren]";"[UITVOERDER_UREN_DATUM_VAN] between #2018/01/01#and#2018/03/31# AND [ID_UITVOERDER] = " & [ID_UITVOERDER] & ""))

Ik tracht deze formule zodanig te herstructureren via een keuzelijst (cboSelecteerJaar).

Code:
SELECT DISTINCT tbl_kalender.JAAR FROM tbl_kalender WHERE (((tbl_kalender.JAAR)=2018)) OR (((tbl_kalender.JAAR)=2017)) OR (((tbl_kalender.JAAR)=2016)) OR (((tbl_kalender.JAAR)=2015)) ORDER BY tbl_kalender.JAAR DESC;

Bestaat de mogelijkheid het gedeelte "[UITVOERDER_UREN_DATUM_VAN] between #2018/01/01#and#2018/03/31#" om te vormen in combinatie met de gekozen keuze uit de keuzelijst zodanig dat het totaal per uur-type per kwartaal berekend wordt?
Dit heeft als voordeel dat slechts één form gebruikt kan worden.

Met dank me op weg te helpen.
 
Laatst bewerkt:
Erg onhandige manier van werken (geldt ook voor je keuzelijst trouwens). Ik zou er een functie van maken, die als input een keuzelijst met jaartallen heeft (kun je gewoon uit je tabel opvragen met een totalen query en een gegroepeerd datumveld (Year([Datumveld]) als formule). Eventueel kun je ook de kwartalen daar uithalen. Desnoods, als je een lijst wilt met kwartelen per jaar, vul je die keuzelijst met kwartaal+jaar (met Format).
Daarnaast hoef je geen IIF te gebruiken, maar is Nz al voldoende.
PHP:
Nz(DSum("[UITVOERDER_UREN_TOTAAL_NU]";"[tbl_uitvoerder_uren]";"[UITVOERDER_UREN_DATUM_VAN] between #2018/01/01#and#2018/03/31# AND [ID_UITVOERDER] = " & [ID_UITVOERDER] & "");0)
 
Om mezelf het gemakkelijk te maken heb ik in m'n tbl_kalender en tbl_uitvoerder_registratie_uren een kolom "kwartaal" toegevoegd.
Jouw formule met Nz i.p.v. Iif is inderdaad veel korter en overzichtelijker.
Dit geeft volgend resultaat:
Code:
=Nz(DSum("[UITVOERDER_UREN_TOTAAL_NU]";"[tbl_uitvoerder_uren]";"[UITVOERDER_UREN_KWARTAAL] = 1 AND [ID_UITVOERDER] = " & [ID_UITVOERDER] & "");0)

Nu dient nog enkel de keuzelijst (cboSelecteerJaar) in de code verwerkt te worden die bepaald welk jaar er berekent dient te worden.
Jammer genoeg schiet deze kennis me te kort.
 
Laatst bewerkt:
Om mezelf het gemakkelijk te maken heb ik in m'n tbl_kalender en tbl_uitvoerder_registratie_uren een kolom "kwartaal" toegevoegd.
Slechte zaak, en een gewoonte die je snel moet afleren :). Databases ontwerp je omdat je bepaalde functionaliteit wilt hebben, niet omdat je het 'jezelf makkelijker wilt maken'. Heel slecht uitgangspunt! Nu heb je dus nodeloze (voor zover datareduntie niet per definitie nodeloos is) dataredundantie ingebouwd in je systeem.
Ik neem aan dat je het kwartaal ook op je formulier ziet. Dat kun je dan (met de functie Opbouwen) prima uit het formulier halen. In de functie vervang je dan de "1" door die keuzelijst. Op dezelfde manier als je nu doet met Uitvoerder.
 
Laatst bewerkt:
Oeps en ik die dacht er goed mee te doen. :)
Ja op het form frm_uitvoerder_registratie-uren staan niet 1 kwartaal maar 4 kwartalen. Zie Knipsel_urenregistratie.JPG.
Van de #Fout meldingen niets aantrekken. Daar zitten formules achter en allen werken indien de uitvoerder bestaat wat in deze printscreen niet het geval is.

M.a.w. als ik de het stukje code [UITVOERDER_UREN_KWARTAAL] = 1 vervang door [UITVOERDER_UREN_KWARTAAL] = Me.cboSelecteerJaar houdt deze dan rekening met de optelgegevens per kwartaal? Of dient mijn code uitgebreid te worden?
 
Laatst bewerkt:
Waar zit ik naar te kijken?? Ik zie een hoofdformulier met een aantal subformulieren met die zijn gekoppeld aan een kruistabel. Dit zou ik kunnen maken zonder één foutmelding en zonder één formule.
 
Ik had de printscreen enkel meegegeven om mijn vraag te ondersteunen betreffende de 4 kwartalen.
(Trouwens deze getoonde form is opgebouwd uit tekstvelden, niet één subformulier noch kruistabel).

Kan je me helpen met mijn eerder gestelde vraag aub.

M.a.w. als ik de het stukje code [UITVOERDER_UREN_KWARTAAL] = 1 vervang door [UITVOERDER_UREN_KWARTAAL] = Me.cboSelecteerJaar houdt deze dan rekening met de optelgegevens per kwartaal? Of dient mijn code uitgebreid te worden?
 
Losse tekstvelden zeg je met eigen formules.... Je bent in ieder geval niet lui :). Of je slim bezig bent, kun je wel uit mijn vorige antwoord halen denk ik. Ik zou in ieder geval de oplossing in die richting zoeken, en je formules vergeten. Wat betreft je vraag: gezien de complexiteit van je huidige formulier wil ik daar wel naar kijken, maar niet zonder een voorbeeldje met wat data.
 
Dank :). Ik vrees dat ik mijn eerdere opmerkingen moet terugtrekken, want op basis van jouw database is er niks te beginnen met kruistabellen; je db is totaal niet genormaliseerd. Noeste arbeid zit er genoeg in, maar dat is één van de weinige positieve zaken die ik er aan kan ontdekken vrees ik. Neem iets simpels als het datumveld waarop je de kalender hebt ingericht: daarvoor gebruik je 12 velden! Om één datum vast te leggen! Dat is (sorry dat ik het moet zeggen) één van de grootste vormen van dataredundantie die ik ooit ben tegengekomen. Sowieso vind ik het gebruik van een datumtabel/kalender al uiterst dubieus (je kunt met een simpele DatePicker elke datum toevoegen die je wilt) maar dan zo in te richten? Van de 12 velden zijn er 11 overbodig; de overige kun je allemaal berekenen uit dat ene veld.

Maar goed, daar zit je probleem niet eens. Dat zit 'm in de tabel [tbl_uitvoerder_uren] waar je dus voor elke categorie (16 types) aparte velden hebt gemaakt. En dan heb ik het nog niet eens over de (ook hier) dataredundantie die je opslaat voor deze velden:
PHP:
ID_UITVOERDER
UITVOERDER_NAAM
UITVOERDER_VOORNAAM
ID_MEDEWERKER
INITIALEN_MEDEWERKER
ID_MEDEWERKER_DOSSIER
MEDEWERKER_DOSSIER_NAAM
MEDEWERKER_DOSSIER_VOORNAAM
UITVOERDER_UREN_JAAR
UITVOERDER_UREN_KWARTAAL
UITVOERDER_UREN_DATUM_VAN
UITVOERDER_UREN_DATUM_TOT
UITVOERDER_UREN_WEEK_NR
UITVOERDER_UREN_NAAM
UITVOERDER_UREN_VOORNAAM

Dat kun je terugbrengen tot:
PHP:
ID_UITVOERDER
ID_MEDEWERKER
ID_MEDEWERKER_DOSSIER
UITVOERDER_UREN_DATUM_VAN
UITVOERDER_UREN_DATUM_TOT

En zo kan ik dus nog wel even doorgaan. Ik zit serieus met het dilemma te worstelen of ik je moet helpen met je probleem of niet; omdat deze db zo totaal op de schop moet, dat je wat mij betreft beter daar nu gelijk mee kan beginnen. En dus niet doormodderen zoals je nu bezig bent. Ik zie graag dat mensen met een goede database werken, en ik help ze graag om dat te verwezenlijken. Maar iemand helpen die zó totaal verkeerd bezig is, stuit mij dus een beetje tegen de borst. Zie dat niet als een verwijt trouwens, ik vermoed dat je de kennis niet hebt/had om het beter te doen, of je werd ook maar in een bestaande db gegooid. Maar hoe je het ook wendt of keert: deze weg is volslagen doodlopend, en ik wil je dus zo snel mogelijk de juiste kant op hebben.
Ik zal nog wel je formules zodanig aanpassen (althans: één ervan; de overige mag je zelf doen) dat ze op de keuzelijst reageren en niet meer op de vaste datum. Maar echt: bedenk goed waar je naar toe wilt met deze db...
 
Ik neem je constructieve opmerkingen ten harte.
Ben alles geleidelijk aan het aanpassen (het moet werkbaar en overzichtelijk blijven).
Dus alles wat overbodig is wordt eruit gegooid. In dit geval alle nodeloze kolommen op basis van datums maar ook alle kolommen die een totaal weergeven.
Het is de bedoeling dat o.a. de tabel tbl_kalender overbodig wordt en verwijderd kan worden.
 
Laatst bewerkt:
Ik denk wel enigszins te snappen wat je wilt bereiken, maar de methodiek die je hebt bedacht is nog wel geschikt voor Excel, maar niet voor Access. Dan moet je de processen anders aanpakken. Op het moment dat je uren wilt wegschrijven, heb je maar een paar gegevens nodig:
1. Wie doet het (medewerkerID)
2. Wanneer? (datum)
3. Hoeveel uur? (ofwel aantal invullen, ofwel begin- en eindtijd)
4. Voor wie? (OpdrachtgeverID)
5. Wat? (daar heb je je activiteitenID)
6. Welke kosten? (indien er geen vaste bedragen zijn, standaardbedrag uit activiteiten invullen en aangepast bedrag opslaan)
7. Opmerkingen

En wellicht zijn er nog wel wat meer vaste gegevens te bedenken. Maar geen 142 velden, zoals jij hebt. Ik vermoed dat elke set van 7 velden bedoeld is om voor een bepaalde dag te gelden, dus [UITVOERDER_UREN_ROU1] voor Zondag en [UITVOERDER_UREN_ROU7] voor Zaterdag. Maar sowieso is het veld [UITVOERDER_UREN_TOTAAL_OAU] volslagen overbodig, omdat je totalen dus (mits op de correcte manier opgezet) nooit nodig hebt, want dat is simpel uit een query te halen.
In jouw opzet kun je in [UITVOERDER_UREN_ROU3] 6 uur invullen, in [UITVOERDER_UREN_ROU5] 3 uur, in [UITVOERDER_UREN_ROU7] 5 uur en in [UITVOERDER_UREN_TOTAAL_OAU] 4 uur. Terwijl een kind kan zien dat dit totaal niet klopt, is er niets of niemand die jou tegenhoudt. En dat is puur het gevolg van een slechte (zeg maar gerust: ontbrekende) normalisatie.
Alle velden vanaf [UITVOERDER_UREN_NU1] t/m [UITVOERDER_UREN_TOTAAL_ROU], 121 velden als ik goed geteld heb, kun je vervangen door twee velden! Een veld [UITVOERDER_UREN] en een veld [Categorie]. Die laatste bevat dan een keuzelijst met de opties NU, OU, FDU, VSU etc.
 
Je kan de form frm_uitvoerder_uren bekijken als een urenbriefje/timesheet.
Zo dienen wij het ook door te geven naar ons sociaal secretariaat. m.a.w. deze lopen parallell.
Elk type van prestatie en/of niet prestatie heeft invloed op de uitbetaling van de uitvoerder zijn maandloon.
Maar evengoed op de recuperatie van uren in welke vorm dan ook, waar de desbetreffende persoon nog recht heeft.
Ook heeft elk uur-type directe invloed op de loonkost die TDDE dient te betalen aan de fiscus.
Vandaar ik het zo correct mogelijk probeer op te volgen.
Door op deze wijze te werken heb ik vorige maand 7,3k€ kunnen recupereren van ons sociaal secretariaat dat onnodig via verplichte voorschotfacturen werkt , dit over de eerste 6 maanden van dit jaar. 2017 moet ik nog ingeven.
M.a.w. de velden met uren gaan inkorten, vervangen of anders interpreteren is mijns inziens geen goed idee.

Als antwoord op jouw vraag:
Uur-type 1 = maandag t.e.m. uur-type 7 = zondag.
Jouw gedacht om het uur-type te vervangen in een keuzelijst is zeker geen slecht idee. Alleen het probleem stelt zich dan als er meerdere uur-types per dag zijn.
Hoe dit dan op te lossen?

bv iemand begin met vroege shift om 6u (VSU), vanaf 8u worden dit normale uren (NU) en om 10u gaat hij naar huis ter recuperatie (ROU) om, om 13u terug te beginnen, maar hij valt ziek (ZKU). Dit i een van de reden waarom ik voor een vaste format gekozen heb.

Wat de totalen betreft heb ik laten weten deze te verwijderen.
 
Laatst bewerkt:
Je kan de form frm_uitvoerder_uren bekijken als een urenbriefje/timesheet. Zo dienen wij het ook door te geven naar ons sociaal secretariaat. m.a.w. deze lopen parallel.
...
Alleen het probleem stelt zich dan als er meerdere uur-types per dag zijn.
Hoe dit dan op te lossen?
Je snapt nog steeds niet (helemaal) waar ik heen wil, zou ik deze db zelf ontwerpen. Terwijl jouw verhaal voor de volle 100% mijn concept ondersteunt. Maar jij ziet dat blijkbaar niet, want jij vindt het geen goed idee. Juist door de gegevens correct op te slaan, bereik je een optimale gegevensstructuur. Ik zeg helemaal niet dat je de urenvelden moet inkorten, vervangen of anders interpreteren. Ik zeg alleen dat je ze moet ‘normaliseren’.

Neem je tweede zin: jij gaat uit van de output als basis voor de input. Foute gedachte, moet je nooit doen. Je moet bij het ontwerpen van je database uiteraard rekening houden met, of zelfs uitgaan van de output, maar het format daarvan mag nooit bepalend zijn voor je input. Dat zijn zelfstandige gegevens binnen de database. Je data moet zodanig zijn gestructureerd dat je de gewenste output te allen tijde kunt produceren. Daarom moet je bij het ontwerpen van een database ook altijd de vraag stellen wat er uiteindelijk uit moet rollen. En daarbij zelfs rekening houden met eventuele toekomstige vragen, indien mogelijk.
Maar het mag nooit zo zijn dat jij, omdat een bepaalde output in een bepaalde vorm wordt verwacht, dan maar tabellen gaat maken waarin die exacte output één-op-één is gekopieerd. Al was het maar omdat je bij een eerstvolgende aanpassing van die output je complete tabel opnieuw moet aanpassen.

Wat ik zou doen is dus een tabel maken voor de verschillende categorieën met daarin alle aspecten die dat tarief bepalen. Heb je met verschillende tarieven per categorie te maken, dan kun je die ook nog in een aparte tabel zetten, of, als het simpel is, in de categorie tabel. Denk aan een categorie die voor een complete werkdag 1 tarief heeft, terwijl je ook een categorie hebt die aparte tarieven heeft voor dag, avond en nacht. Al die aspecten moet je vast kunnen leggen, en op kunnen roepen indien van toepassing.

Daarnaast heb je het ‘probleem’ zoals je het zelf omschrijft dat een persoon meerdere activiteiten op een dag doet, en dat je die allemaal moet registreren. Juist op dit gebied is een genormaliseerde tabel de beste oplossing; bij zo’n constructie maakt het niet uit of iemand op een dag één activiteit uitvoert, of 20. Je maakt namelijk voor elke activiteit een apart record aan. Maar ook nooit meer dan dat er activiteiten voor die persoon op die dag vastgelegd moeten worden. Hoe hoog is de kans dat iemand op 1 dag 20 verschillende activiteiten uitvoert? Lijkt mij niet zo heel hoog. Maar dan nog: 20 records invullen is totaal niet te vergelijken met een tabel waarin voor diezelfde hoeveelheid gegevens 121 velden beschikbaar zijn. In dit voorbeeld laat je er dus sowieso al 101 leeg. Over verspilling gesproken!

Nog een voorbeeld: jij legt vast hoeveel uren iemand aan 1 activiteit besteedt. Dat kan voldoende zijn, maar voor hetzelfde geld wil het management van jou een keer een overzicht (grafiek) van de activiteiten gerelateerd aan het dagdeel waarin ze worden uitgevoerd. Jij kan dat nooit leveren, omdat jij alleen het aantal uren per dag kan invullen. In mijn oplossing leg je elke activiteit vast met een begin- en een eindtijd, en je kunt dat overzicht dus te allen tijde maken. Je bent gewoon veel flexibeler.

OK, komen we bij het meest heikele punt, en de reden (vermoed ik) dat je het zo hebt gemaakt. Hoe voer ik die gegevens dan zo makkelijk mogelijk in? Als je een aparte tabel gebruikt voor de input, dan kun je dat niet invoeren m.b.v. een ‘Excel’ achtig formulier zoals je nu gebruikt. Je moet immers voor elke registratie een apart record maken, en dat doe je doorgaans op een doorlopend formulier. Daarbij kun je een hele hoop automatiseren, zoals het standaard invullen van de medewerker en de dag, zodat je alleen de tijd en de categorie hoeft in te vullen, maar zelfs dan ziet het er minder ‘overzichtelijk’ uit als je gewend bent. Dat is enerzijds een stukje gewenning, anderzijds aanleren dat je het overzicht op een ander moment genereert: als je klaar bent met invoeren. Want als de gegevens eenmaal zijn vastgelegd, dan kun je met standaard rapporten en formulieren de gewenste output bekijken of versturen.

Kies je voor een systeem dat lijkt op de huidige structuur, dus alleen de uren per dag invoeren, dan wordt het zelfs nog iets makkelijker (voor de gebruiker, niet voor de bouwer ;) ) omdat je dan het invoerformulier kunt gebruiken dat je nu ook hebt. Alleen dan niet gekoppeld aan een tabel (de velden bestaan immers niet meer) maar als niet-afhankelijk formulier. Je vult dan de gewenste uren voor de gewenste dagen in, zoals je nu ook doet. Alleen heb je dan een procedure nodig die, op basis van de ingevulde uren, records aanmaakt voor die uren en dagen. Zo’n procedure is niet eens moeilijk; kwestie van een loop maken die m.b.v. een recordset alle ingevulde velden met de juiste categorie toevoegt aan je tabel. Ook hiervoor geldt: heb je 47 tekstvakken ingevuld voor een week, dan krijg je 47 records in de tabel. Aan je systeem (en je output; je kunt nu heel simpel een overzicht maken met een draaitabel) verandert dus eigenlijk helemaal niks. Alleen zijn al je problemen opgelost.

Denk er eens over na, zou ik zeggen.
 
Dus als ik het goed begrijp dien ik een volgende tabellen aan te maken:
(bv tbl_uitvoerder_uuprestatie) met ID - ID_UITVOERDER - DATUM - AANTAL_UREN - ID_UURTYPE - + andere benodigde velden
(bv tbl_uitvoerder_uurtype) met ID_UURTYPE - UUR_TYPE - UUR_OMSCHRIJVING
Het voordeel is dat wij enkel werken met decimale tijden, geen uur-registratie. Alle uitvoerders werken 99% extern en mailen enkel het aantal uren/type door nooit uur-van /uur-tot.

Als ik zo bekijk is het inderdaad een aardig stukje korter dan de huidige tabel: tbl_uitvoerder_uren.

Ik stel voor om de huidige layout (niet-onafhankelijk) te blijven gebruiken. Reden: me dunkt dat het foutenpercentage zo goed als 0 is t.o.v. als je steeds de datum moet kiezen.

Dan alles overzetten; manueel is niet te doen.
Dus ik zal je hulp hiervoor zeker nodig hebben. Toevoegquery? bv -NU1 heeft een datum de andere -NU's niet. Ik denk [DATUM_VAN]+1 voor -NU2, enz.... ?
 
Laatst bewerkt:
We komen er wel :). De situatie met alleen uren invullen is inderdaad het makkelijkste te maken, en dat komt ook overeen met jouw huidige situatie. Als de processen er zo uit zien zoals je beschrijft, lijkt een aanpassing/uitbreiding van de gegevens ook niet zo snel voor de hand te liggen, want externe uitvoerders hebben a) zelden zin om veel administratieve handelingen voor opdrachtgevers te doen en b) geen enkel inzicht in waar die gegevens voor dienen. Het is ook niet in het belang van de uitvoerder om jou gedifferentieerde data aan te leveren, want het kost hun meer tijd om die data te verzamelen in in te voeren. Je mag al blij zijn als ze de gewerkte uren netjes op tijd aanleveren :).

De tabelstructuur zoals je hem nu hebt bedacht, lijkt mij inderdaad correct. Ik zou dan wel het rechter stuk (de historie) er uit gooien, want die heb je toch niet meer bij een onafhankelijk formulier. Bovendien maakt die, vanwege al die D-formules, het formulier ontzettend traag. Wat je dus moet doen, is alle velden ontkoppelen (is nog een hele klus, want het zijn er veel :) ) en (dat zou ik tenminste doen) de naam van het veld waar ze naar toe moeten in de tag zetten. Wat ik daarmee bedoel is dit: het veld [AANTAL_UREN] moet worden gevuld met de waarde uit alle tekstvelden, wat simpel is te programmeren. Maar het veld [ID_UURTYPE] moet uit de verschillende kolommen worden gehaald. Omdat je het handigst kan programmeren als alle tekstvakken een makkelijk uit te lezen naam hebben (Tekstvak1, Tekstvak2, ... Tekstvak 44, Tekstvak45) moet je dat uurtype dus ergens vandaan kunnen halen. Ik doe dat door dat in de eigenschap <Extra Info> te zetten. Bij de routine die de records aanmaakt lees je dus niet alleen de waarde uit het tekstvak, maar ook de Tag. De waarde zet je in [AANTAL_UREN], de tag in [ID_UURTYPE]. De uitvoerder, werknemer etc. zijn standaard dus die haal uit uit de algemene velden. Blijft nog het datumprobleem over.
Ook dat is simpel op te lossen, door in het formulier een weeknummer te kiezen, of de begindatum te laten selecteren. Op basis van die gegevens weet je wanneer de eerste datum is, en wanneer de laatste, want je hebt vaste rijen met nummers. Je weet dus dat de tekstvakken Tekstvak1-Tekstvak15 de uren voor de maandag zijn (eerste werkdag), de tekstvakken Tekstvak16-Tekstvak30 de uren voor de tweede werkdag etc. Op basis van het loopnummer (For i = 1 to 105) kun je de in te voeren datum dus ophogen. 1-15 is startdatum, 16-30 = startdatum + 1, 31-45 = startdatum + 2 en zo verder. Kortom: met een relatief kleine loop kun je (uiteraard op basis van een check of er uren zijn ingevuld, je gaat geen lege records maken) alle gegevens simpel genereren en vervolgens opslaan.

Als je er niet uitkomt: maak de structuur (ik zou de tabellen er gewoon even naast zetten tot het werkt), pas het formulier aan en post het nieuwe werk weer in het draadje.
 
Hierbij een eerste worp. Bekijk bijlage test_uren_uitvoerder_v2.zip
.
De form frm_uitvoerder_uurregistratie is enorm gereduceerd. Zoals gevraagd is het rechter gedeelte met alle formules verwijderd.
Alle tekstvelden staan op niet-onafhankelijk en bij de <extra info> wordt de juiste tag vermeld. Alle knoppen met rode tekst zijn buiten werking gesteld.
De nieuwe tabellen: tbl_uurtype en tbl_uitvoerder_uurregistratie zijn opgevuld dat de juiste data.
De grote knop Weektotalen opslaan kan je gebruiken om nieuwe data op te slaan naar de tbl_uitvoerder_uurregistratie. Deze routine zoals je het beschreven hebt ken ik niet.

Ander vraagje: kan je ook de gegevens terug opvragen en weergeven in de juiste velden? bv door selectie via de keuzelijst (cboSelecteerDatum).
 
Je bent goed bezig! :thumb:. Ik zal de db zo bekijken, en de code voor je er bij zetten. Als alles gedaan is zoals je zegt, is dat een simpele routine. Ook het ‘teruglezen’ is dan simpel, want dan gebruik je eigenlijk de omgekeerde weg. In dat geval zijn je totalen, zoals je die had staan in het overzicht, overigens wel weer nuttig om te laten zien. Dat kan, zoals ik in het begin al zei, met een draaitabel. Als dat nu al mogelijk is, maak ik die er ook wel bij.
 
Ik heb nog wel een paar vragen:
1. (meer een opmerking overigens) Je hebt de tekstvelden niet hernoemd naar [Uren1], [Uren2] etc. Dat is wel nodig. I.c.m. dat, moet je de tag ook nog aanpassen: i.p.v. "UITVOERDER_UREN" moet je de categorie er bij zetten, bijvoorbeeld zo: "UITVOERDER_UREN|NU". In combinatie met de standaardnamen, kun je dan veel makkelijker de categorie en inhoud plaatsen.
2. Je hebt een blok "Ingave / Opvolging speciale prestaties". Die zijn niet gekoppeld aan een veld. Worden die wel ingevuld, en moeten die dus ook worden meegenomen in de procedure? Lijkt mij eerlijk gezegd van wel.

Hier alvast de kruistabelquery waarmee je een (totaal) overzicht kan maken.
PHP:
TRANSFORM Sum(tbl_uitvoerder_uurregistratie.UITVOERDER_UREN) AS SomVanUITVOERDER_UREN
SELECT Right("00" & Format([UITVOERDER_DATUM],"w",2,2),2) AS Week, tbl_uitvoerder_uurregistratie.UITVOERDER_DATUM, 
Sum(tbl_uitvoerder_uurregistratie.UITVOERDER_UREN) AS SomVanUITVOERDER_UREN1
FROM tbl_uurtype INNER JOIN (tbl_uitvoerder INNER JOIN tbl_uitvoerder_uurregistratie 
ON tbl_uitvoerder.ID_UITVOERDER = tbl_uitvoerder_uurregistratie.ID_UITVOERDER) 
ON tbl_uurtype.ID_UURTYPE = tbl_uitvoerder_uurregistratie.ID_UURTYPE
GROUP BY Year([UITVOERDER_DATUM]) & Right("00" & Format([UITVOERDER_DATUM],"w",2,2),2), Right("00" & Format([UITVOERDER_DATUM],"w",2,2),2), 
tbl_uitvoerder_uurregistratie.UITVOERDER_DATUM
ORDER BY Right("00" & Format([UITVOERDER_DATUM],"w",2,2),2), tbl_uitvoerder_uurregistratie.UITVOERDER_DATUM, Year([UITVOERDER_DATUM]) 
& Right("00" & Format([UITVOERDER_DATUM],"w",2,2),2)
PIVOT tbl_uurtype.UUR_TYPE In ("NU","OU","FDU","VSU","LSU","NSU","FD","WVU","ADV","ZKU","KVU","TAU","TWU","OAU","ROU","WU","WUP","ABU","KWU");
 
Nog een stukje code, dat ik nu in je db zet. Je hebt een knop btnAnnuleren in je db gezet om de tekstvakken leeg te maken. Daarvoor gebruik je een code die, als je hem zou printen, gerust gebruikt kan worden om een kamer te behangen zo lang. Door de tekstvakken een uniforme naam te geven, zoals ik had aanbevolen, kan je die hele procedure terugbrengen tot:
Code:
For i = 1 To 128
    Me("txtUren" & i) = ""
Next i

En dat doet hetzelfde, maar in heel wat minder regeltjes :).

Ik pas in jouw db de eerste 4 dagen aan; de rest mag je zelf doen. De procedure die ik in de db zet werkt dus alleen voor de eeste 4 dagen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan