Ga naar inhoud
  • 0

case functie


Zero55

Vraag

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 naar reactie

14 antwoorden op deze vraag

Aanbevolen berichten

  • 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 naar reactie
  • 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 naar reactie
  • 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 naar reactie
  • 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 naar reactie
  • 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 naar reactie
  • 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 naar reactie
  • 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 naar reactie

Doe mee aan dit gesprek

Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...