Jump to content
  • 0

case functie werkt slechts gedeeltelijk


lee

Question

Posted

Ik heb hier een calculatie veld 'bestelkosten' genaamd waar volgende berekening aan vast hangt.

 

Case(Subtotaal

min_bedrag_bestellen? Subtotaal< max_bedrag_bestellen ,belkosten_max_bedrag ,max_bedrag_bestellen? Subtotaal,franco_bedrag).

 

Nu in de bereking werkt:

Subtotaal belkosten_min_bedrag

min_bedrag_bestellen? Subtotaal< max_bedrag_bestellen ->belkosten_max_bedrag

 

werkt niet:

 

max_bedrag_bestellen ? Subtotaal -> franco_bedrag

 

Dus als het subtotaal van mijn bestelling over max_bedrag_bestellen (bijv €100) gaat dan moeten de bestelkosten gelijk worden aan het bedrag dat in 'franco_bedrag' (meestal €0) staat.

 

Weet iemand waar dit aan kan liggen of weet een betere oplossing.

Ik werk met een amerikaanse versie van filemaker Pro

13 answers to this question

Recommended Posts

  • 0
Posted

Lee, als je goede resultaten wil berijken/bereiken (om de Foemper een plezier te doen) zal je toch nauwkeuriger moeten werken:

Case is een functie, en elke functie heeft een eigen syntaxis. Als die syntaxis niet correct gerespecteerd wordt, dan geeft Filemaker een foutmelding, nog voor het calculatievenster gesloten kan worden.

Heb je zo'n foutmelding gekregen?

Overigens bevat die syntaxis veldnamen en operatoren. Als we geen lijstje hebben van je velddefinities, is het ook niet mogelijk je calculatie te beoordelen. Zo stel ik me bijvoorbeeld een vraag bij dat vraagteken. Maakt dat deel uit van een veldnaam?

Ik denk dat je er best aan doet het bestandje binnen te sturen. Je zal dan ongetwijfeld goede hulp krijgen.

  • 0
Posted
Case(Subtotaal

min_bedrag_bestellen? Subtotaal< max_bedrag_bestellen ,belkosten_max_bedrag ,max_bedrag_bestellen? Subtotaal,franco_bedrag).

Ik heb in eerste instantie een tip om de leesbaarheid te vergroten

Ik schrijf mijn Case altijd als volgt

Case(

Subtotaal

min_bedrag_bestellen? Subtotaal< max_bedrag_bestellen , belkosten_max_bedrag ,

max_bedrag_bestellen? Subtotaal , franco_bedrag

)

Dit geeft je het voordeel dat het beter leesbaar is en ook dat je sneller iets kan toevoegen. Je kan gewoon een lijn uit je Case copieren en er tussenplakken.

Ik vermoed dat je de "min_bedrag_bestellen?" informatief hebt tussengevoegd en dat die niet in je echte case staan. Ik mis in ieder geval iets in je Case statement.

Maar het belangrijkste misschien is om te weten dat van zodra 1 voorwaarde voldaan is in je Case statement geen verdere controles gebeuren en het statement beëindigd wordt.

  • 0
Posted
Maar het belangrijkste misschien is om te weten dat van zodra 1 voorwaarde voldaan is in je Case statement geen verdere controles gebeuren en het statement beëindigd wordt.

Hé Danny, ik dacht dat dat al een paar keer aan bod was gekomen op de FSA-lists. Het zou goed zijn als je gelijk had, want dan zouden we de meest plausibele voorwaarde bovenaan kunnen plaatsen om de Case-evaluatie sneller te kunnen afsluiten. Heel wat FSA'ers hebben ondertussen proefondervindelijk aangetoond dat dat NIET het geval is en dat onze goeie ouwe FileMaker de hele kees opvreet, tot de laatste letter, ook al is er voldaan aan de allereerste voorwaarde!

  • 0
Posted

Ik heb het eventjes nagetrokken in de archieven. Ik bespaar je de hele thread en geef enkel de eindantwoorden en conclusies van Marcel de Maria van FileMaker Inc. voorafgegaan door een concluderende vraag van Geoffrey Gerhard (FSA list van 3 februari 2001):

>> The Case function always returns one of several possible results based on a

>> series of tests. It evaluates each expression in order, and when a TRUE

>> expression is found, returns the result supplied for that expression.

>

> I read this as suggesting that a Case function does NOT evaluate ALL

> Tests, but only Test1 through the first Test that evaluates as TRUE (and

> does NOT evaluate any Subsequent Tests.)

>

This is not correct All arguments are evaluated before FileMaker Pro

generates a result.

 

Er zijn daarna nog wat commentaren gekomen, ook in verband met dit toch wel "oneconomisch" verloop van de evaluatie van de Case- (en overigens ook de Choose-functie). Vergelijk het met de ober in het stationsbuffet die een bestelling opneemt aan de verste tafel. Hij loopt ook terug naar de bar langs alle andere tafels, hoewel daar niemand hem gewenkt heeft: de calculation engine kan een calculatie niet verlaten voor het einde.

  • 0
Posted

Een eenvoudige test bewijst nu weer juist iets anders

Case (

waarde = "ABC" , "resultaat regel 1 in case" ,

waarde = "ABC" , "resultaat regel 2 in case" ,

"allemaal onzin"

)

deze simpele Case in een calculation leertje toch dat het resultaat regel 1 zal zijn indien de waarde = "ABC".

Mis ik iets ?

  • 0
Posted

Heb er nog een gevonden (ook van De Maria):

> Given a Case statement where 25 Tests and 26 Results are each complex

> constructions of functions and operators, and the Boolean Value of Test1

> = 1, does FileMaker's engine evaluate the functions and values in the

> remaining (completely irrelevant) 24 Tests and 25 (irrelevant) results?

>

YES. What should be clear now is that the first true test only returns its

corresponding result after this internal process (reading all the parameters

of the function) is completed.

  • 0
Posted

Wat hier nu wel belangrijk is dat we duidelijke informatie geven aan onze forumleden.

In eerste instantie is het belangrijk welk resultaat je bekomt.

Daarna kan je je misschien zorgen maken over het feit dat de engine die in FileMaker zit om deze Case te behandelen zeker niet de efficientste is op aarde :wink:

  • 0
Posted

Dat klopt! De antwoorden van De Maria hebben toch wel één voordeeltje: tegen onze verwachtingen in, speelt de volgorde van de beweringen in de case- en choose-functie géén rol. We hoeven ons daar dus niet langer het hoofd over te breken (wat velen onder ons vroeger wel deden: de meest waarschijnlijke voorwaarde zetten we eerst).

  • 0
Posted

dannydv schreef:

 

Maar het belangrijkste misschien is om te weten dat van zodra 1 voorwaarde voldaan is in je Case statement geen verdere controles gebeuren en het statement beëindigd wordt.

 

Bedankt voor de tip.

Het heeft me op het goede spoor gezet. De Case werkt nu!

Inderdaad, achteraf bekeken was mijn vraag wel onoverzichtelijk voorgesteld.

Zal er op letten in de toekomst

  • 0
Posted
Wat hier nu wel belangrijk is dat we duidelijke informatie geven aan onze forumleden.

 

dannydv schreef:

 

Maar het belangrijkste misschien is om te weten dat van zodra 1 voorwaarde voldaan is in je Case statement geen verdere controles gebeuren en het statement beëindigd wordt.

 

Ja, maar het is nu precies dit laatste wat NIET waar is. Als we het weten, mogen we toch geen onwaarheden op het forum laten staan, denk ik. We sluiten de zaak hier maar af.

  • 0
Posted

Juist André,

ik zal mijn statement lichtjes moeten wijzigen.

Was

Maar het belangrijkste misschien is om te weten dat van zodra 1 voorwaarde voldaan is in je Case statement geen verdere controles gebeuren en het statement beëindigd wordt.

Moet zijn

Het belangrijkste misschien om te weten is dat je Case statement terug komt met het resultaat dat vermeld staat bij de eerste voorwaarde die voldaan is.

Zo is het beter (lees juister) denk ik :roll:

  • 0
Posted

toch stelt dat extra voorwaarden aan de ontwikkelaar. Voor een proper gebruik moet die namelijk zelf in de gaten houden dat hij een set voorwaarden opstelt die

 

EN alle mogelijke gevallen afdekt (of de default waarde wordt geretourneerd)

EN geen overlappingen tussen gevallen bevat. Anders is het resultaat van de vergelijking namelijk ahankelijk van de volgorde waarin de tests uitgevoerd zijn. En dat kan natuurlijk niet de bedoeling zijn. Ik zit momenteel een beetje te stunten met de If-Else en de Case-functies. Wat daar nou het verschil tussen is....... behalve de syntax dan.... :?:

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