Optellen van uren

  • Onderwerp starter Onderwerp starter mikeo
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

mikeo

Terugkerende gebruiker
Lid geworden
29 mei 2006
Berichten
1.861
Ik ben bezig een programma te maken voor urenregistratie.

Nu heb ik de mini gevonden Tijden
http://home.hccnet.nl/jwm.pompe/accessvoorbeelden/Tijden.zip

Deze heb ik aangepast naar mijn wensen en tijden.mbd was precies wat ik zocht en laat ook perfect de uren zien als 1:30 en niet iets van 1,75. Alles werkt simpel via een query en niet via VB.

Ik loop alleen tegen 1 probleem aan waar ik niet uit kom.


Na invoeren van verschillende records wil ik een rapportage maken van alle records gegroepeerd per maand. Dit lukt ook.

In het progamma krijg je na invullen van alle gegevens direct het totaal aantal gewerkte uren te zien per dag.

Nu wil ik dus alle gewerkte uren in een bepaalde maand optellen.
Maar dit lukt mij dus niet.

Met =Som werkt dit wel goed alleen zodra ik voorbij de 24 uur kom begint hij opnieuw te tellen

Het vreemde is dat hij in dit niet doet per gewerkte dag, dan gaat het prima.

Het programma geeft de gewerkte uren aan als 1:30 dus anderhalf uur. Zo moet dat ook in het rapport verschijnen.

Wie kan mij helpen.

Je kunt het voorbeeld van de mini gebruiken. Daarina zit ook een rapportage. Als je alle totaaltijden van boven naar beneden leest die wil ik dus optellen met doorloop van 24 uur.

Ik maak gebruik van Access 2003. Heb al uren lopen zoeken op het internet en in het forum maar alle voorbeelden die ik vindt werken niet.

Het lijkt mij dat het met een simpel veld in het rapport met de juiste formule al gedaan kan worden. Maar ik weet het even niet meer en wordt er nu gek van.

Ik hoop dat iemand even naar de Mini kan kijken en kan uitleggen hoe ik dit moet doen. Heb dus weining ervaring nog, ben het aan het leren.
 
Eindelijk ben ik weer een stukje verder gekomen door onderstaande gevonde code.

Plaats in het rapport een Niet-Afhankelijk (Eng. Unbound) tekstveld.
Typ een naam voor het besturingselement in het venster Eigenschappen, bijvoorbeeld txtTotaalTijd.
Typ als Besturingselementbron (Eng. Control Source) de volgende formule =fdTotaalTijd(Som([dtmUren]))


Plaats als code in het rapport de volgende functie

Code
CodeFunction fdTotaalTijd(interval) As String

Dim totalhours As Long, totalminutes As Long, totalseconds As Long
Dim days As Long
Dim hours As Long, minutes As Long, seconds As Long

days = Int(CSng(interval))
totalhours = Int(CSng(interval * 24))
totalminutes = Int(CSng(interval * 1440))
totalseconds = Int(CSng(interval * 86400))
hours = totalhours Mod 24
minutes = totalminutes Mod 60
seconds = totalseconds Mod 60

fdTotaalTijd = _
days & "d-" & hours & "u-" & minutes & "m-" & seconds & "s."

End Function

Einde Code


Dit werkt dus prima maar als iemand mij zou kunnen helpen om de code iets aan te passen.

Nu presenteer hij het als: 1d-12u-24m-22s

Nu wil ik dus dat de 1d komt te vervallen en dat hij dit optelt bij de uren.
Zodat het resultaat van bovenstaand voorbeeld word: 36u-24m
 
Probeer eens

Voor de uren: =Som(Val(Format([Gewerkte tijd];"hh")))
Voor de minuten : =Som(Val(Format([Gewerkte tijd];"nn")))
Voor het totaal: =LTrim(Str(Int([Uren1]+[Min1]/60+0,0001))) & ":" & Right("00" & LTrim(Str([Min1] Mod 60));2)
 
vanzwam zei:
Probeer eens

Voor de uren: =Som(Val(Format([Gewerkte tijd];"hh")))
Voor de minuten : =Som(Val(Format([Gewerkte tijd];"nn")))
Voor het totaal: =LTrim(Str(Int([Uren1]+[Min1]/60+0,0001))) & ":" & Right("00" & LTrim(Str([Min1] Mod 60));2)

Die had ik inderdaad ook gevonden en getest maar ik krijg dan steeds de melding:

U probeert een query uit te voeren waarbij de opgegeven expressie RapportID geen deel uitmaakt van een statistische functie.

Want bovenstaand leek mij ook een goed oplossing maar met de foutmelding kom ik er niet meer uit wat ik daar aan moet doen.
 
De oplossing was: fdTotaalTijd = _
(days*24) + hours & "u-" & minutes & "m-" & seconds & "s."


Maar helaas loop ik nu tegen het volgende aan.

Bij de optelling gaat het ook goed voorbij 24 uur maar niet als er tussen de begintijd en eindtijd en dag verschil zit.

Ik heb het bestand even in een link erbij gezet zodat je de rapportage kunt bekijken. De totaaluren werken per dag prima ook voorbij de 24u.

Als je het bestand opend en je start de rapportage dan zie je dat het totaal van 3u + 6u + (2u) = 563u

()Starttijd 23:00u Eindtijd 01:00u volgende dag)

Pas je het laatste record aan met een starttijd 21:00 eindtijd 23:00 dan is het nog steeds 2 uur gewerkt maar dan gaat de telling wel goed.

http://www.verzend.be/v/5773133/uren.mdb.html


Ik hoop dat iemand mij kan helpen.
 
mikeo zei:
Die had ik inderdaad ook gevonden en getest maar ik krijg dan steeds de melding:

U probeert een query uit te voeren waarbij de opgegeven expressie RapportID geen deel uitmaakt van een statistische functie.

Want bovenstaand leek mij ook een goed oplossing maar met de foutmelding kom ik er niet meer uit wat ik daar aan moet doen.

Voor het totaal is dit inderdaad zo. Voor de berekening van het totaal uren, zet je dit in een onhafhankelijk tekstvak, en dan werkt het wel. Krijg je geen foutmelding.
 
vanzwam zei:
Voor het totaal is dit inderdaad zo. Voor de berekening van het totaal uren, zet je dit in een onhafhankelijk tekstvak, en dan werkt het wel. Krijg je geen foutmelding.

Ik begrijp je antwoord niet helemaal.

Als ik 2 onderstaande regels in de query plak krijg ik dus de bewuste foutmelding.
Voor de uren: =Som(Val(Format([Gewerkte tijd];"hh")))
Voor de minuten : =Som(Val(Format([Gewerkte tijd];"nn")))

Deze kan ik wel in het rapport zetten maar deze telt de waardes op van de twee bovenstaande regels dacht ik.
Voor het totaal: =LTrim(Str(Int([Uren1]+[Min1]/60+0,0001))) & ":" & Right("00" & LTrim(Str([Min1] Mod 60));2)
 
mikeo zei:
Ik begrijp je antwoord niet helemaal.

Als ik 2 onderstaande regels in de query plak krijg ik dus de bewuste foutmelding.
Voor de uren: =Som(Val(Format([Gewerkte tijd];"hh")))
Voor de minuten : =Som(Val(Format([Gewerkte tijd];"nn")))

Deze kan ik wel in het rapport zetten maar deze telt de waardes op van de twee bovenstaande regels dacht ik.
Voor het totaal: =LTrim(Str(Int([Uren1]+[Min1]/60+0,0001))) & ":" & Right("00" & LTrim(Str([Min1] Mod 60));2)

Het is dus zo.De berekening van uren en minuten kunnen in de query gedaan worden.BVB

Uren:Som(Val(Format([Eindtijd]-[Begintijd];"hh")))
Min:Som(Val(Format([Eindtijd]-[Begintijd];"nn")))

In je rapport zet je dan een onafhankelijk tekstveld met als gegevens bron
=LTrim(Str(Int([Uren1]+[Min1]/60+0,0001))) & ":" & Right("00" & LTrim(Str([Min1] Mod 60));2)

Zo werkt het hier bij mij toch al een tijdje.
 
Hoi Rudi,

Ik geloof ook zeker dat het werkt.

Probleem bij mij blijft helaas dat zodra ik beide regels in de query toevoeg ik de melding krijg en dus niet verder kan.

Daar loop ik dus nu op vast.
 
mikeo zei:
Hoi Rudi,

Ik geloof ook zeker dat het werkt.

Probleem bij mij blijft helaas dat zodra ik beide regels in de query toevoeg ik de melding krijg en dus niet verder kan.

Daar loop ik dus nu op vast.

In mijn query doe ik het als volgt.

Gewerkte tijd: [einde]-[Aanvang]. Dan in het rapport zet ik dus 2 bijkomende niet afhankelijk velden om de uren en min te berekenen en daarna het totaal. dat zou dan toch moeten werken.
 
Super dat je blijft meedenken Rudi. Ik ben nu al dagen bezig met dit nog kleine ding en dan kan ik eindelijk de rest afmaken.

Ik denk dat ik Access blind wordt want ook hier krijg ik een foutmelding mee.

Mogelijk dat jij eens wilt kijken naar mijn database of jouw het lukt.
http://www.verzend.be/v/5773133/uren.mdb.html

:D
 
Hoi Rudi,

Het is inmddels opgelost.

De Control Source klopte niet.
Er stond:

Code:
=fdTotaalTijd(Sum([dagtotaal]))

Moet zijn

Code:
=Sum([dagtotaal])

Was vreemd want dat had ik ook eerst en toen werkte het niet. Dankzij FESTER van het Officeweb Forum is het nu opgelost.
 
Laatst bewerkt:
Goed zo. Had al wel even gekeken, maar met die warmte niet veel zin gehad om er serieus op in te gaan. Sorry
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan