Jump to content
  • 0

case functie


Zero55

Question

Onderstaande case-functie wordt gebruikt bij een job-registratiesysteem. We hebben dus 3 pauzes op een werkdag, pauze 1 van 9u50 - 10u00, pauze 2 van 12u00 - 12u30 en pauze 3 van 14u30 - 14u40.

De werknemers moeten bij aanvang van een nieuwe job steeds inscannen, de pauzes worden dmv onderstaande formule eraf getrokken, behalve als er een scanning gebeurt waar 2 of meer pauzes in voorkomen, dan wordt er slechts de eerste pauze verrekend. bvb job 1 ingescand op 8u10 en job 2 ingescand om 13u25, dan wordt er enkel pauze 1 afgetrokken van de totale gewerkte tijd voor job 1.

Kan ik dit enkel oplossen door de formule uit te breiden met alle verschillende mogelijke scenario's of is er een andere oplossing.

En als ik de case functie moet uitbreiden met alle mogelijke scenario's, moet dit dan in chronologische volgorde opgesteld worden ?

 

Case(

GetAsNumber(tijd) < GetAsTime("09:50:00") and GetAsNumber(End_Times) > GetAsTime("10:00:00") ; End_Times - tijd - GetAsTime("00:10");

GetAsNumber(tijd) < GetAsTime("12:00:00") and GetAsNumber(End_Times) > GetAsTime("12:30:00") ; End_Times - tijd - GetAsTime("00:30");

GetAsNumber(tijd) < GetAsTime("14:30:00") and GetAsNumber(End_Times) > GetAsTime("14:40:00") ; End_Times - tijd - GetAsTime("00:10")

; End_Times - tijd)

 

Groeten,

Rudi

Link to comment

14 answers to this question

Recommended Posts

  • 0

ik denk dat het gelukt is door de case functie uit te breiden :

 

Case(

GetAsNumber(tijd) < GetAsTime("09:50:00") and GetAsNumber(End_Times) > GetAsTime("14:40:00") ; End_Times - tijd - GetAsTime("00:50");

GetAsNumber(tijd) < GetAsTime("09:50:00") and GetAsNumber(End_Times) > GetAsTime("12:30:00") ; End_Times - tijd - GetAsTime("00:40");

GetAsNumber(tijd) < GetAsTime("09:50:00") and GetAsNumber(End_Times) > GetAsTime("10:00:00") ; End_Times - tijd - GetAsTime("00:10");

 

GetAsNumber(tijd) < GetAsTime("12:00:00") and GetAsNumber(End_Times) > GetAsTime("14:40:00") ; End_Times - tijd - GetAsTime("00:40");

GetAsNumber(tijd) < GetAsTime("12:00:00") and GetAsNumber(End_Times) > GetAsTime("12:30:00") ; End_Times - tijd - GetAsTime("00:30");

 

GetAsNumber(tijd) < GetAsTime("14:30:00") and GetAsNumber(End_Times) > GetAsTime("14:40:00") ; End_Times - tijd - GetAsTime("00:10")

 

; End_Times - tijd)

 

ik hoop dat er geen addertjes onder het gras zitten...

Link to comment
  • 0

misschien is dit eenvoudiger:

Let
([
 duurbruto = eindtijd - starttijd ;
 pauze1aftrek = Case ( ( pauze1start ≥ starttijd ) and ( pauze1start ≤ eindtijd ) ; pauze1duur ) ;
 pauze2aftrek = Case ( ( pauze2start ≥ starttijd ) and ( pauze2start ≤ eindtijd ) ; pauze2duur ) ;
 pauze3aftrek = Case ( ( pauze3start ≥ starttijd ) and ( pauze3start ≤ eindtijd ) ; pauze3duur ) 
];
 duurbruto - pauze1aftrek - pauze2aftrek - pauze3aftrek
)

 

ik heb het niet echt goed getest, dus wel goed controleren.... Wel is het probleem dat rmw signaleerde nog steeds aanwezig. Maar het lijkt me dat je daarvoor beter de data-invoer bij inscannen kunt controleren (en corrigeren naar de begintijd van een pauze) dan het bij de berekening achteraf corrigeren.

 

PS

bij de weg... GetAsNumber(tijd) < GetAsTime("09:50:00") ik snap niet waarom je dat zo doet?

Link to comment
  • 0

Ik kan mij vergissen maar de twee kleine pauze's zijn ieder 10 minuten. Op een werkdag van 8 uur is dat misschien eenvoudiger om die te integreren in je uurloon? Dan blijft alleen dat half uur over. Een oplossing is natuurlijk te bedenken maar is dit wel nodig? Je praat over iets van 4% wat die 20 minuten totaal zijn op een werkdag van 8? uur. Wat nu als er overgewerkt wordt is er dan een extra pauze mogelijk of komt dit nooit voor?

Link to comment
  • 0

tja, de eerste maanden/jaren van het jobregistratiesysteem hebben we inderdaad enkel rekening gehouden met de middagpauze (half uur), maar nudat de werkuren strenger opgevolgd gaan worden willen ze van hogerhand natuurlijk een zo correct mogelijk eindcijfer en dat betekend dus de kleine pauzes ook in rekening brengen. Dit systeem heeft niets te maken met het loon van de werknemer, is enkel om een zicht te krijgen op de uren die in de fabricage van een product/unit gestoken worden (en om de werknemers tov elkaar te vergelijken, maar dat mogen we niet zeggen :wink: )

Overwerken gebeurt hier zelden en als het gebeurt dan starten we de werkdag 1 of 1/2 uur vroeger dan normaal, pauzes blijven hetzelfde.

Link to comment
  • 0

Ik zou dan de 3 pauzes apart berekenen. Iets in de geest van:

pauze1:

Case(

Start > 9:50 en < 10:00;10:00-start;

Start is >10.00: 00:00:

anders 10 min.

)

datzelfde bij pauze 2 en 3.

Dan totaal tijd is (eind - start)-(pauze1 +pauze2+pauze3)

Op die manier zal een klus die start die om 12:28 en om 16.00 stopt: pauze1= 0 minuten, pauze2=2 minuten en pauze3=10 minuten. Van eind min start worden dan 12 minuten afgetrokken.

Nu alleen nog in een mooie formule :D

Link to comment
  • 0
Ik zou dan de 3 pauzes apart berekenen. Iets in de geest van:

pauze1:

Case(

Start > 9:50 en < 10:00;10:00-start;

Start is >10.00: 00:00:

anders 10 min.

)

datzelfde bij pauze 2 en 3.

Dan totaal tijd is (eind - start)-(pauze1 +pauze2+pauze3)

Op die manier zal een klus die start die om 12:28 en om 16.00 stopt: pauze1= 0 minuten, pauze2=2 minuten en pauze3=10 minuten. Van eind min start worden dan 12 minuten afgetrokken.

Nu alleen nog in een mooie formule :D

 

Hoe bereken je dan een klus die 22:00 start en 01:30 eindigt?

Link to comment
  • 0
Hoe bereken je dan een klus die 22:00 start en 01:30 eindigt?

 

Als je tijdstempel gebruikt in plaats van tijd om in-en uit te klokken kun je elke begin- en eindtijd en elke tijdsduur aan. een tijdstempel is zowiezo handig voor doorzoeken van gearchiveerde records bijv.

 

Ik bedoelde eigenlijk hoe je het aantal uren berekent tussen 22:00 en 01:30 zonder data, bijvoorbeeld iemand die nachtdienst werkt begint om 23:00 en werkt tot 07:00. De volgende berekening lijkt altijd te kloppen als een dienst niet langer dan max 48 uur ( :lol: ) duurt:

 

If(BeginTijd > EindTijd ; Abs((BeginTijd - Time ( 24 ; 0 ; 0 ))) + EindTijd ; EindTijd - BeginTijd)

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...