Jump to content
  • 0

Voorloopnullen voor een sleutelveld


rickel

Question

Posted

Ik heb een sleutel (numeriek) van 6 posities. Zodra ik een waarde in een sleutelveld neerzet, zou ik graag voorloopnullen gedisplayed tot het aantal van 6 is bereikt. Is dit mogelijk in FMP9?

11 answers to this question

Recommended Posts

  • 0
Posted (edited)

Case (

getal < 10 ; "00000" & getal ;

getal < 100 ; "0000" & getal ;

getal < 1000 ; "000" & getal ;

getal < 10000 ; "00" & getal ;

getal < 100000 ; "0" & getal ;

getal )

 

Notatie kan wellicht korter...

Edited by Guest
  • 0
Posted

AvD... en wat doe je dan als het getal uit 7 cijfers gaat bestaan in de loop van de tijd?

 

If ( Length ( getal ) > 6 ; getal ; Right("00000" & getal;6) )

 

zoiets...?

  • 0
Posted
zoiets...?

Dat zou zoiets kunnen zijn, afhankelijk van je analyse. Het probleem stelt zich alleen wanneer het zich stelt, als je begrijpt wat ik bedoel. En dat zou zich niet mogen stellen als de analyse OK is. Als je je klantenbestand uitbreid met jaarlijks te hernummeren ID's, ik bedoel als je elke eerste januari terug van 0 begint met een jaarcode ervoor, dan vraag ik altijd hoeveel nieuwe klanten ze dit jaar verwachten: meer dan 9 (grapje!), meer dan 99 (meestal ook een grapje, maar bij vele kleine zelfstandigen niet), meer dan 999 enzovoort. Ik voorzie dan het aantal digits.

Als ik per jaar zeker niet meer dan 99 999 facturen verwacht, dan volstaan vijf digits. Elk bedrijf kan dit wel inschatten, desnoods neem je een nul meer. Je vraag is hiermee hopelijk beantwoord.

  • 0
Posted

Wat me opvalt is:

 

...een sleutel (numeriek) van 6 posities

 

Als daar nu meer dan 6 posities zouden voorkomen, zelfs als je er 7 voorziet, wil ik Murphy toch even thuislaten. Kwestie mogelijke relaties niet te breken.

 

Right("00000" & number;Case(
Length ( number )  ≤ 6;6;Length ( number )))

kan daar bij helpen.

  • 0
Posted
Ja, dat kan veel korter:

 

Right("00000" & getal;6)

 

 

wat ik me bij dit soort kwesties wel eens afvraag is: levert zo’n glanzend efficiënte notatie als die van avd ook een efficiëntere afhandeling door filemaker op?

 

of om het anders te stellen: is spaarzaam maar doeltreffend formuleren hetzelfde als efficiënt programmeren in termen van milliseconden, processorwatts en zeespiegelstijging? of betreft het ‘slechts’ een verschil in zweet, RSI en esthetiek? iemand?

 

groet, bdk

  • 0
Posted

wat ik me bij dit soort kwesties wel eens afvraag is: levert zo’n glanzend efficiënte notatie als die van avd ook een efficiëntere afhandeling door filemaker op?

 

Ge moogt gerust zijn....

 

of om het anders te stellen: is spaarzaam maar doeltreffend formuleren hetzelfde als efficiënt programmeren in termen van milliseconden, processorwatts en zeespiegelstijging? of betreft het ‘slechts’ een verschil in zweet, RSI en esthetiek? iemand?

 

 

someFieldResult = 

If(GetAsNumber(thisFieldValue)=0; "..,,,.";
If(GetAsNumber(thisFieldValue)=1; ".,.,,.";
If(GetAsNumber(thisFieldValue)=2; ".,,.,.";
If(GetAsNumber(thisFieldValue)=3; ".,,,..";
If(GetAsNumber(thisFieldValue)=4; ",..,,.";
If(GetAsNumber(thisFieldValue)=5; ",.,.,.";
If(GetAsNumber(thisFieldValue)=6; ",.,,..";
If(GetAsNumber(thisFieldValue)=7; ",,..,.";
If(GetAsNumber(thisFieldValue)=8; ",,.,..";
If(GetAsNumber(thisFieldValue)=9; ",,,..."; ""))))))))))

 

zal alleen bij beginners indruk maken....terwijl een Case() zelfs beter zou geweest zijn...

 

someFieldResult = 

Choose(GetAsNumber(thisFieldValue); 
"..,,,.";".,.,,.";".,,.,.";".,,,..";",..,,.";",.,. ,.";",.,,..";",,..,.";",,.,..";",,,...";"")

 

is al heel wat beter, terwijl

 

someFieldResult =
Middle("..,,,..,.,,..,,.,..,,,..,..,,.,.,.,.,.,,.. ,,..,.,,.,..,,,...", TextToNum(thisFieldValue) * 6 + 1, 6)

op alle vlakken energie zal besparen en het meest efficient is, terwijl het nog steeds 'verstaanbaar' en 'leesbaar' is.

 

Of nog, iets waar er een toggle als resultaat moet zijn zien we dikwijls iets in de aard van:

 

If(related::fieldStatus = 0 or IsEmpty (related::fieldStatus); 1 ; 0)

 

Alternating is niet nodig:

 

not GetAsBoolean(related::fieldStatus)

 

of zelfs beter

 

Abs(related::fieldStatus – 1)

 

Zowel op vlak van berekeningen als op vlak van scripting is eenvoud nog altijd de kortste, beste en doeltreffendste weg.

  • 0
Posted

@avd

 

dat met die shifttoets is inderdaad waarschijnlijk een direct gevolg van het werken met filemaker: in de loop van de jaren ben ik tot de conclusie gekomen dat er voor hoofdletters toch echt veel handiger functies te verzinnen zijn dan het toch redelijk zinloze markeren van het begin van een zin :) en als filemaker ergens in een formule hoofdletters wil hebben plaatst het programma ze zelf toch wel.

 

@ jean, prachtig.

 

maar hoe weet je dat

Abs(related::fieldStatus – 1)

beter is dan

not GetAsBoolean(related::fieldStatus)

lijkt me iets dat je ergens geleerd moet hebben, want zo op t oog zijn beide formuleringen even kernachtig?

de eerste heeft een soort van wederkerigheid in zich (abs ( -1 )) die wellicht een extra cycle vergt maar de tweede heeft dan weer NOT wat weer meer inspanning zou kunnen vergen dan niet NOT? (we zijn nu wel echt op de afdeling haarkloverij beland :) )

 

groet, bdk

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