Rapportformule in tekstvak - berekening van gewerkte uren

Status
Niet open voor verdere reacties.

ongenae

Gebruiker
Lid geworden
20 okt 2010
Berichten
124
Mijn probleem is het volgende:
Ik had graag de exacte uren geweten dat een bepaald persoon gewerkt heeft.
Als je weet dat:

Ik in het bezit ben van hun startuur en hun einduur (wordt in een systeem automatisch bijgehouden)
Er in de middag 0:36 minuten pauze is (oftewel 0,025)
Er 's middags ook nog eens 0:12 minuten (oftewel 0,00833333333333333) rust pauze wordt voorzien om 15:30

Dan is het niet moeilijk om de exact gewerkte uren te berekenen voor normale dagen:
bv: iemand werkt van 8:21 tot 17:26
Die persoon heet dus 8:17 uren gewerkt oftewel 8,28 decimale uren
([EindTijdcalc] - [BeginTijdcalc] - 0,00833333333333333 - 0,025)*24
(17:26 - 8:21 - 0,00833333333333333 - 0,025)*24
maal 24 voor decimale waarde


Maar ik zit volledig in de knoei om een formule te creëren voor mensen die bv maar enkel de voormiddag werken of maar een paar uur waardoor ze oftewel:
1) geen middagpauze nemen
2) geen rustpauze nemen
3) geen van beide nemen

want dan moet ik die minuten niet aftrekken

De formule zou iets moeten zijn als [EindTijdcalc]>"15:30" and … and ... Then ([EindTijdcalc]-[BeginTijdcalc]-0,008333333333333-0,025)*24
of zoiets
Ik ben er ook nog niet uit of ik de echte waarde mag gebruiken, dus 15u30 of als ik het als decimaal getal moet ingeven 0,645833333333333

Moest je je afvragen hoe ik aan die decimale getallen kom; die heb ik omgezet via excel om de waarde te weten van een vast aantal minuten


1 concreet geval is het volgende:
begint om 5:15 en stopt om 13:41 dus enkel middagpauze en geen rustpauze
ik moet natuurlijk in staat zijn om in 1 formule alle mogelijkeheden te kunnen verwerken.
In excel kan je werken met een geneste als functie maar in access heb ik daar geen enkel idee van.
 
Ik snap niet helemaal waarom je zulke moeilijke berekeningen maakt; als je de uren vastlegt in datum/tijd velden met Korte tijdnotatie, kun je de uren gewoon van elkaar aftrekken. Om daarna alles in 'normale' getallen te zien, vermenigvuldig je daarna alles met 24.
 
ik heb enkel maar 2 uren die ik kan gebruiken; de start en eindduur van hun werkdag
bv:

8:21
17:26

ik weet niet of ik in een access formule mag gebruik maken van "0:36" en "0:12"
daarom had ik de decimale waarde genomen.
 
Mijn opmerking ging eigenlijk eerst over de manier waarop je de waarden opslaat; als je begin- en eindtijd een datum/tijd veld is, kun je de waarden gewoon van elkaar aftrekken. Je pauzetijden maak je dan met: TimeSerial(0;36;0) en TimeSerial(0;12;0), en die trek je van je berekening af. Lijkt mij een stuk simpeler dan de rare rekenconstructie die je nu hebt.
 
de begin en eind tijden zijn gedeclareerd als datum/tijd velden.
"EindTijdcalc" is de naam van het eind tijd veld.
 
Dan moet mijn 'formule' toch makkelijk in te bakken zijn; ik zou in ieder geval een tabel maken met de werkbloktijden; je kunt de werktijd dan berekenen op basis van de ingevoerde begin- en eindtijd. Met een IIF kun je checken of je de pauze er wel of niet aftrekt. Maak anders even een voorbeeldje, dan valt er wat meer te helpen...
 
Ja inderdaad ik had ook een IIF in gedachten maar meerdere in elkaar en dat maakt het moeilijker voor mij als leek :p

Voorbeeld 1:
Start om 11:46
Stopt om 21:07

Dit is standaar dus gewoon middag 0:36 en rust 0:12 aftrekken

Voorbeeld 2:
Start om 5:15
Stopt om 13:41

Hier mag enkel maar middag afgetrokken worden

Voorbeeld 3:
Start om 5:15
Stopt om 11:00

Enkel de gepresteerde uren geen rust of middag

Voorbeeld 4:
Start om 13:00
Stopt om 17:00

Enkel maar rust


Dus als ik mij niet vergis kan ik ooit maar 4 verschillende berekeningen tegenkomen.
Dus ik had graag 1 formule gehad die de 4 voorbeelden aankan.
 
ik zat meer aan een voorbeeldje in een db te denken, met (al dan niet) gefingeerde gegevens... ;)
 
Ik heb zelf een voorbeeldje bewerkt dat ik toch al gebruik om te laten zien hoe je werktijden uitrekent; nu houdt hij dus ook rekening met pauzes. In het rapport komt alles netjes samen...
 

Bijlagen

Ik had meer gedacht aan een formule in de opbouwfunctie (in textbox zelf).
Aan de vba raak ik jammer genoeg niet echt uit.

In bijlage stuur ik zit nu wel een voorbeeld database.
Een heel deel van de gegevens zijn wel weggelaten omdat het toch nogal vertrouwelijk is.

Alvast bedankt.


Bekijk bijlage helpmij.zip
 
In het rapport zit geen VBA, en in de query ook niet :confused: ... Bovendien wordt het rapport een stuk makkelijker maken als je de berekening in de queries doet; op je rapport hoef je dan alleen nog maar de Totaalformules te maken. Maar ik kijk wel even naar je voorbeeldje.
 
Terwijl we toch lekker bezig zijn :D

Heb je voor dit probleem als eens kunnen kijken?
 
Ja, ik heb er al naar gekeken. Maar werd een beetje moedeloos van de ingewikkelde manier van rekenen... Dan vind ik de mijne toch makkelijker :)
 
Ik graak jammergenoeg ook niet echt wijs uit jouw database :p

Ik snap niet goed waarom je zoveel kolommen bijmaakt en al die modules.

Zou je dit misschien kunnen toepassen op mijn database vooral dus de tabel T_TIKKLOK_EDIT.
 
Ik gebruik meestal een voorbeeld db voor meerdere doeleinden. De extra modules etc worden dus meestal niet gebruikt, en anders geef ik dat wel aan in het draadje :) In jouw geval geldt dus alleen het voorbeeld met de query, en daar zit verder geen woord spaans (of vba) in.... Ik ben overigens nog wel bezig om een queryberekening te maken die rekening houdt met begin- en eindtijd, en pauzes, maar ik vrees voor je dat die dermate lang wordt (het zijn een hoop IIFjes) dat Access straks gaat sputteren. Je hebt namelijk maar een beperkt aantal tekens beschikbaar in een veld. En ik begin het dak al te naderen, terwijl ik nog een paar stevige berekeningen moet maken.
Als het allemaal niet gaat passen, dan moet er met meerderere queries gewerkt worden, of, jawel, er moet een functie worden gemaakt in VBA. Dat laatste zou mijn voorkeur zowiezo al hebben, omdat je dan veel netter kunt programmeren. De IIF berekening in de query wordt straks volkomen onleesbaar :D
 
Als je wil mag je je berekeningen ook in vba maken hoor.
Dan kan er altijd verwezen worden naar het resultaat van de vba formule.
Ik zal morgen ook nog wat prutsen

Het probleem in vba is wel dat hij het voor ieder record moet doen in de tabel T_TIKKLOK_EDIT
Misschien kunnen we met een EOF werken.
 
Laatst bewerkt:
Niet nodig; je maakt een functie die je een aantal parameters meegeeft; in dit geval dus alle tijdvelden die de berekening moeten maken. Die functie zet je vervolgens in je rapport, formulier of query. Daar komt geen recordset aan te pas, en hij is ook nog eens op elke tabel los te laten.
 
Is het dit dan dat je bedoelt?
Ik heb eigenlijk nog nooit een access functie gebruikt, of toch niet bewust.


IIf gebruiken in VBA-code

Opmerking In de volgende voorbeelden wordt het gebruik van deze functie in een VBA-module (Visual Basic for Applications) toegelicht. Meer informatie over het werken met VBA vindt u door in de vervolgkeuzelijst naast Zoeken de optie Referentie voor ontwikkelaars te selecteren en een of meer termen in het zoekvenster te typen.

In dit voorbeeld wordt de IIf-functie gebruikt om de TestMe-parameter van de CheckIt-procedure te evalueren en wordt het woord "Large" geretourneerd als het aantal groter is dan 1000, anders wordt het woord "Small" geretourneerd.

Function CheckIt (TestMe As Integer)
CheckIt = IIf(TestMe > 1000, "Large", "Small")
End Function
 
Dat is inderdaad het plan. Met dit verschil dat deze functie vrij knullig is, omdat deze IIF net zo goed gelijk in een query kan worden gezet. In een functie kun je doorgaans beter met IF...END IF constructies werken. Ik zal, als hij af is, het resultaat uiteraard voor je posten.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan