Jump to content
  • 0

werken met uren; uitkomst negatief


cintje

Question

Hoi

 

Momenteel ben ik een database aan het maken om zelf mijn uren bij te houden.

Ondanks de waarschuwing dat werken met uren niet simpel is ben ik er toch aan begonnen zijnde als bleutje...

 

Volgende velden heb ik reeds

Arrival: aankomst (time)

Stop : einde van de dag (time)

begin_lunch: begin middagpauze (time)

stop_lunch: einde middagpauze (time)

lunchminimum: global; minimum te nemen middagpauze, 1800

 

lunch_real: berekening lunchpauze

( stop_lunch - begin_lunch) ; uitkomst in seconden (werkt ok)

 

lunch: berekening van de lunchpauze daar deze minstens 30 min moet zijn (1800 sec)

Case ( Lunch_Real < 999;LunchMinimum;

Lunch_Real ≥ 999 and Lunch_Real < 1800 ; LunchMinimum;

Lunch_Real > 1800; Lunch_Real ),

 

hier moest ik met verschillende waarden werken in een case omdat hij anders alleen de aanpassing deed bij waarden tussen 1000 en 1800)

Dit veld werkt ondertussen perfect

(heeft me wel drie dagen gekost en veel surfwerk op Clarify :wink: )

 

Nu wil ik een veld prestation : eenvoudig zou zijn

stop - arrival

maar daar onze uren pas tellen vanaf 07:30 en niet meer na 18:00 uur moet hij dit aanpassen.

 

Ik heb hier voor volgende berekening gemaakt (na zovele andere uiteraard) die me nu wel de het juiste aantal seconden geeft maar helaas in een negatief getal... :twisted:

 

prestation:

(If ( Arrival < Time ( 7 ; 30 ; 0 ) ;Arrival_fix; Arrival)) - (If ( Stop > Time (18 ; 0 ; 0 ); Stop_fix; Stop ))

 

En dit geeft me dus een negatief resultaat....

 

Kan iemand mij hiermee even op de juiste weg zetten.. :)

Alvast bedankt

 

Cintje

Link to comment

9 answers to this question

Recommended Posts

  • 0

Je geeft zelf al aan:

 

Nu wil ik een veld prestation : eenvoudig zou zijn

stop - arrival

 

Maar jouw IF is arrival - stop, vandaar je negatieve uitkomst.

 

Volgens mij kun je de IF vervangen door Min en Max:

 

Min ( Time ( 18 ; 0 ; 0 ) ; Stop ) - Max ( Time ( 7 ; 30 ; 0 ) ; Arrival )

 

JJ *nieuwe FMP9 gebruiker*

Link to comment
  • 0

:oops::oops:

indeed...

dat heb je als je leest wat je denkt dat er staat..

nu doet hij het wel perfect, ook met de formule die je me gegeven hebt gaat het vloeiend

 

 

In ieder geval bedankt voor de reactie en de hulp,ik ga nu naar de volgende berekening :roll:

 

wie weet sta ik hier een van de volgende dagen met een nieuwe vraag (maar zal eerst eens dubbel checken of ik wel juiste volgorde heb) :wink:

 

groetjes

Cintje

Link to comment
  • 0

Ik snap je Case functie ook niet helemaal.

 

Je hebt 3 tests met maar 2 uitkomsten. Als ik het goed begrijp moet je minimaal 30 minuten lunchtijd aftrekken,

behalve wanneer je langer dan 30 minuten luncht. In dat laatste geval moet de werkelijke lunchtijd berekend worden.

 

Max ( lunchminimum ; lunch_real ) kiest de hoogste waarde:

korter dan een half uur [lunchminimum],

langer dan een half uur [lunch_real]

 

JJ

Link to comment
  • 0

Of deze voor de lunch tijd?

Alles onder de 30 minuten zet je toch op 30?

Case(Lunch_real>1800;Lunch_real;1800)

Op deze manier is het of de werkelijke tijd of de 30 minuten.

Op die manier kun je trouwens ook de arrival en stop aanpassen. Er zijn vele wegen naar FM oplossingen zullen we maar zeggen :D

Link to comment
  • 0
prestation:

(If ( Arrival < Time ( 7 ; 30 ; 0 ) ;Arrival_fix; Arrival)) - (If ( Stop > Time (18 ; 0 ; 0 ); Stop_fix; Stop ))

 

 

Cin, Cin, Cin ...

 

Wat ben ik blij dat je de raad van die wijzen hier ter harte neemt :wink:

 

Weet je nog ... stap voor stap, desnoods formules inkorten in logische stappen ... en daarna terug samenvoegen. Maar een laag getal verminderen met een hoog getal geeft een negatieve waarde ... daar is nu helemaal niets aan te doen (hoewel) :wink: Maar laat het een troost zijn, dat overkomt ons allemaal en soms is de oplossing zo eenvoudig dat we ze gewoonweg niet zien, maar leerrijk is het steeds!

DayPrestatiion:

Case(Stop - Arrival - LunchTime > Time(8;30;0); Time(8;30;0); Stop - Arrival - LunchTime)

 

Overtime berekenen:

Case(Stop - Arrival - LunchTime > Time(8;30;0); (Stop - Arrival - LunchTime) - Time(8;30;0); 0)

 

Nu nog enkele sum velden aanmaken (totaal) en je bent er ... maar ga nog eens eerst in het meegeleverde voorbeeld Time Cards kijken, dan kan je daar uit afleiden dat het interessanter is om in jouw situatie beter herhalende velden (31 in een maand!) te gebruiken zodat je telkens weer op het einde van de maand een mooi overzicht hebt. In dat geval heb je ook maar één record per maand nodig.

 

Dit is de fout die velen van ons maken ... het overslaan van de door JeanWM geïntroduceerde behangfase ... eerst alles uittekenenen en dan pas aan de slag gaan ... maar wie zonder zonde is, werpe de eerste steen :oops::oops:

 

Trouwens het bijgeleverde model verkrijg je door naar File --> New --> template te gaan en dit bestand op te slaan.

 

Alleszins, je bent héél goed bezig hoor!

 

Greetz en nog veel succes!!

 

Danny

Link to comment
  • 0

Na al die wijze raad en tips die ik hier kreeg :P ben ik effie van voren af aan begonnen: :?

 

Ik ben ondertussen zover dat basis klaar is;

1 record bevat alles voor de berekening van een maand (dank u voor tip Stardust :D )

 

De aanpassing van de uren, de berekening van overuren ed is ook allemaal gelukt tot nu toe.

 

De volgende stap is dat ik de huidige stand van uren wens:

Ik wens dus het veld overtime_max_total van het record van de maand juni te kopiëren naar een veld Overtime_prev_month van het record van de maand juli.

 

Ik heb dit via script geprobeerd maar hij doet wel kopie field maar dat kan ik nadien niet meer plakken in ander record

 

De tip (72) die ik vond op AVD gaat niet want hij neemt de formule status(currentrecordid) niet aan.

 

Iemand bekend met het probleem :?:

Link to comment
  • 0

Cintje,

 

 

Als ik goed begrijp ... elke maand is één record?

 

Bij een nieuwe maand moet de inhoud van de totaalvelden gekopieerd worden naar het nieuwe record ...

 

In dat geval kan je bvb. gebruik maken van de veldeigenschappen om de inhoud v/h vorige record over te nemen bij het aanmaken van het record.

 

Filemaker zou Filemaker niet zijn wanneer er niet meer mogelijkheden zouden bestaan en daarom lijkt het me nuttig dat je eens gaat experimenteren met bvb. variabelen ... Een waarde van een veld kan je gebruiken in een soort van tijdelijk veld, een 'variabele' genoemd, gekenmerkt door een dollarteken dat er aan vooraf gaat - $waarde -.

We onderscheiden 2 soorten van variabelen ... maar daarvoor bestaat er de hulp functie onder F1 om duidelijk het onderscheid tussen beide soorten te beschrijven.

 

De waarde van deze variabele kan je vervolgens elders gebruiken. Misschien last but not least, variabelen betekent scripting en ze zijn nergens anders te gebruiken dan in een script, waar ze trouwens ook alleen kunnen ingesteld worden.

 

Ongetwijfeld gaan hier nog reacties komen van veel beter onderlegden dan ik, en ik kijk daar alvast samen met jou naar uit :wink:

 

Alvast vind ik het héél moedig van je om FM onder de knie te krijgen via dit project, rekenen met tijden is niet zo eenvoudig, niet in Filemaker maar evenmin in andere programma's!

 

MVG,

 

Danny 8)

 

 

PS: mooi kleurgebruik van je teksten :wink:

PS2: die tips van AVD staat toch bij je favorieten?

Link to comment
  • 0
De tip (72) die ik vond op AVD gaat niet want hij neemt de formule status(currentrecordid) niet aan.

Die 72 is natuurlijk al stokoud. Ondertussen zijn de Status-functies opgedoekt en vervangen door de Get-functies.

Tegenwoordig (juli 2008 op dit moment) is het dus Get(RecordID).

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...