Jump to content
  • 0

Waarde berekenen tussen 2 datumvelden


leovanvessem

Question

Redelijk nieuw met FM 13 maar ook op dit forum.

Met FM13 is er veel veranderd sinds ik ca 15 jaar geleden voor het laatst met versie 5 of 6.

Uiteraard heb ik rondgezocht naar een mogelijk antwoord op mijn vraag.

Ik ben aan het stoeien om iemands contributie te berekenen. De contributie wordt bepaald aan de hand van het jaar waarin de persoon geboren is, niet zijn leeftijd.

Ben flink aan het experimenteren geweest maar loop in de formule vast in de komma's en haakjes.

Dit is de tabel.

Voor hulp ben ik wie dan ook zeer dankbaar.

5a758dd295fac_Screenshot_2014_08.21_14h32m08s_002_.thumb.jpg.fdb1303012ec410b971f7f34b8881e85.jpg

Link to comment

13 answers to this question

Recommended Posts

  • 0

Even een korte reaktie en wat ideeën:

 

Het geboortejaar van een lid bepalen met year(geboortedatum) en dit vastleggen in een veld.

Het huidige jaar is: year(get(datumvandaag)).

 

Het verschil tussen deze 2 jaren bepaalt de indeling van het lid in een categorie. De formule hiervoor is altijd hetzelfde (tot 12 jaar, 18+ enz.), maar evaluatie moet elk jaar opnieuw plaatsvinden omdat er per jaar een nieuwe situatie ontstaat. Je zou voor het vastleggen van de categorie per lid ook een veld kunnen gebruiken met een non-stored calulation en een formule die lijkt op zoiets..

case(

verschil huidig jaar en geboortejaar lid > 18 ; senior;

verschil huidig jaar en geboortejaar lid < 4; kabouter

enz...

)

 

Zet dit je een beetje op een bruikbare weg?

 

Mvg, Willem

Link to comment
  • 0

Dank je Willem voor je snelle reactie.

 

Het eerste deel, dus year(geboortedatum) ben ik mee begonnen en een apart veld (geboortejaar) van gemaakt.

Met die uitkomst dacht ik in een formule verder te kunnen, iets van

If (geboortejaar) = 2000 ; 150 else

If (geboortejaar) = 2002 ; 125 else

etc

etc.

 

Het 2e deel van je reactie is mij niet geheel duidelijk.

Ik hoef toch geen verschil uit te rekenen tussen het geboortejaar en het huidige jaar? Dan heb ik toch de leeftijd?

Link to comment
  • 0

Leo,

 

Dat 2e deel heb ik niet goed uitgelegd, een beetje verduidelijking.

 

De leeftijd is niet altijd het verschil tussen het huidige jaar en het geboortejaar, dat hangt er ook nog vanaf op welke dag in een jaar je dit bekijkt...nl. je verjaardag. Er vanuit gaande dat je per jaar het verschil bekijkt tussen het geboortejaar en het lopende jaar kun je dus stellen dat dit verschilgetal altijd te berekenen is uit het verschil tussen het huidige jaar en het geboortejaar. Dit getal zal na iemands verjaardag idd gelijk zijn aan de leeftijd. Ik heb begrepen uit jouw vraag dat de verjaardag geen rol speelt verder...dus dat laten we buiten beschouwing.

 

Elke keer als je een ledenkaart oproept wil je waarschijnlijk zien in welke categorie het lid valt en dus moet dat op dat moment berekend worden, of je moet de berekening jaarlijks uitvoeren d.m.v. een script waarmee je alle ledenrecords afloopt (kan natuurlijk ook). Als je echter de berekening van de categorie per lid wil maken op elk moment dat je de ledenkaart ziet, dan kun je dus een non-stored calulation in een veld gebruiken om de categorie vast te stellen. Het maken van overzichten enz. kan hierdoor iets trager worden, omdat per opvraag alle berekeningen dan moeten worden gemaakt.

 

Het verschilgetal tussen het geboortejaar en het huidige jaar neem je vervolgens als uitgangspunt om langs verschillende categorieën te leggen. Dit heb ik in mijn voorbeeld gedaan met de functie Case, omdat je hiermee makkelijk in één formule een veld in kunt stellen. Dit is met de functie If wat omslachtiger als er meer dan 2 categorieën zijn. Bekijk hiervoor maar even wat de Case-functie voor je kan doen in de help-file.

 

Om het helemaal af te maken zou je een veld met Categorie kunnen maken per lid (als je dit al niet hebt) en dit veld kunnen vullen met:

Veld instellen

Let(

[

gebjaar = year (veld geboortedatum);

nu = year (get (HuidigeDatum));

peil = nu - gebjaar

];

Case(

peil < 5 ; kabouter ;

peil <13 ; junior ;

peil > 18; senior ;

enz.

)

)

 

Het getal "peil" zal per kalenderjaar wijzigen en bepalen in welke categorie iemand valt. De leeftijdsgroep per categorie is bij voorkeur vastgelegd in een aparte tabel met max. jaar (ca. leeftijd), omschrijving (kabouter, junior, enz.). Nog een veld erbij met de contributieprijzen die per jaar aangepast kunnen worden en het loopt als een zonnetje.

 

Ik hoop dat ik je hiermee verder uit de voeten kunt.

 

Mvg, Willem

Link to comment
  • 0

Nadeel van het berekenen op deze manier is dat het maar voor 1 jaar geld en je dus elk jaar de categorie moet aanpassen (in de oorspronkelijke vraag met de data er in).

Nadeel is bovendien dat je als je facturen gaat maken en je maakt die bv op 20 december je dan dus niet de juiste bedragen kunt krijgt. (pietje is 27 december jarig en wordt dan senior)

Op zicht werkt dit wel als je maar rekening houd met die bijzonderheden. Je zou in mijn ogen een extra veld moeten maken waarin je de leeftijd berekend in een bepaald lidjaar jaar. Stel je begint met de jaren 1 januari dan moet je die datum als rekendatum nemen voor de contributie. Als je met gebroken jaren werkt (stel je hebt een seizoen sport en de leeftijd is van belang in dat seizoen dan neem je die datum natuurlijk). Bepalend voor dit alles is natuurlijk de afspraken (statuten) waarin staat welke grenzen er zijn.

Link to comment
  • 0

Willem, Pjotte,

 

Dank voor de reacties.

 

Misschien niet een duidelijke vraagstelling van mij maar iemands LEEFTIJD is voor de bepaling van de contributie van ondergeschikt belang.

De contributie wordt bepaald aan de hand van het JAAR waarin hij/zij is geboren.

Ook het feit of iemand senior, junior of kabouter wordt genoemd is onbelangrijk.

Alleen het feit in welk JAAR je bent geboren.

Zie mijn tabelletje.

Dat bracht mij (geïnspireerd door jullie opmerkingen!) tot het volgende.

 

Ik heb een JAARVELD gemaakt a.d.h.v. YEAR (datum) en die GEBJAAR genoemd

Ik heb een simpel en klein tabelletje gemaakt (CONTABEL) met 2 kolommen GEBJAAR en CONTR2014

Tussen beide tabellen heb ik met het veld GEBJAAR een relatie gemaakt.

 

En.....voilá

 

Ik heb geen last van tussentijdse leeftijdsveranderingen gedurende het jaar.

Volgend jaar hoef ik slechts de tabel CONTABEL aan te passen. Een makkie want het is een piepklein tabelletje van 8 regeltjes.

Met dit resultaat ben ik al hartstikke tevreden.

Bedankt voor het meedenken.

Leo

Link to comment
  • 0

Dankzij de tips en opmerkingen loopt het nu gesmeerd.

Er ontstaat toch nog een klein probleempje.

Wanneer ik het contributiebedrag als gerelateerd veld in mijn hoofdlijst (zeg maar de stamkaart van de persoon) opneem en het vervolgens als tabel op mijn scherm heb kan ik van dat veld geen optelling maken. Het is een getalveld dus daar ligt het niet aan. Het veld is overigens grijs, dus niet te bewerken.

Kan niet ontdekken waar het mis gaat.

Johan zou zeggen, je gaat het pas zien als je het door hebt....

Maar dat terzijde.

Link to comment
  • 0

Ik weet niet of Johan hem ook in zijn reportoire heeft, maar Voor elk probleem is een oplossing als je maar samenwerkt (of zoiets) :)

 

Als je in de tabel Leden nog een extra veldje aanmaakt om de totale contributie op te tellen dan ben je er. Dit moet dan een globaal veld met een berekening worden met de formule Sum (het gerelateerde veld Contributie).

Op die manier geeft dit veld altijd het totaal van de contributie voor de (geselecteerde) leden.

Link to comment
  • 0

Zie je wel !!

Ik maak er uit op dat de " eigenschappen" van een veld worden "meegerelateerd". Beetje cryptisch woord maar Johan zou het begrijpen.

Kan het nu niet testen maar ik begrijp de logica en ga er van uit dat het gaat werken.

Mijn ervaring tot nu toe: met FM13Pro komt er een enorme bult info en mogelijkheden op je af maar iedere keer moet je terug naar: simpele oplossingen krijg je door simpel te denken.

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