Jump to content
  • 0

syntax calculatie klopt ineens niet meer


BDK

Question

hallo iedereen, een vreemd probleem:

 

ik wil een kleinigheid wijzigen in een lange en ingewikkelde calculatie die ooit gemaakt is in fma8.

 

wanneer ik na wijziging van de berekening OK klik krijg ik de mededeling dat de syntax van de calculatie niet klopt, terwijl ik aan de syntax niets veranderd heb. de berekening werkte altijd goed en de syntax was dus blijkbaar ook altijd in orde.

 

in het verleden was het nog wel eens zo dat dit soort problemen ontstond door de verwisseling van dubbele punten en puntcomma’s tussen engelstalige en nederlandstalige filemakerversies maar dat is hier niet het geval.

 

iemand enig idee?

dank en groet, bdk

Link to comment

9 answers to this question

Recommended Posts

  • 0

zou ik kunnen doen, maar ik ben bang dat je er niet veel wijzer van wordt: de berekening is daarvoor te lang, te complex, te veel haakjes, geneste functies, if’s, trim’s, cases, puntcomma’s enzovoort.

 

waar het me om gaat is het volgende: hoe kan een syntax die eerst wel geaccepteerd wordt door filemaker, nu ineens niet meer geaccepteerd worden (wanneer ik OK klik ZONDER iets veranderd te hebben krijg ik ook de melding dat ‘deze functie te veel parameters bevat’, alleen welke functie dat dan precies is, is vrijwel niet meer te achterhalen).

 

ik kan het natuurlijk gewoon gaan uitzoeken, maar juist omdat de berekening zo lang en complex is voel ik daar niet heel erg veel voor. komt er ongeveer op neer dat ik m opnieuw moet maken :(

Link to comment
  • 0

enfin, hier is ie (maar zeg niet dat ik je niet gewaarschuwd heb ;) ). toen ik m maakte bestond de let-functie blijkbaar nog niet en van comments inbouwen had ik nog nooit gehoord 8O. desalniettemin werkt de berekening goed, ik kan er alleen niks meer aan veranderen...

 



If ( A::ca_waarde_soort = 1;

If ( A::KEUZE_GEBRUIK_STIJL = "ja" ; 



Case ( 

A_naar_STL::AANSPREEKVORM = "voorletters en achternaam"; 

Trim ( If ( A::SOORT = "m" or A::SOORT = "v" or A::SOORT = "mv" ; 
If ( IsEmpty ( A::VOORLETTERS ) -1; A::VOORLETTERS & " "; If ( IsEmpty ( A::VOORNAAM ) -1; Left ( A::VOORNAAM;1 )  & " "; "" )  )  & "" &  If ( IsEmpty ( A::VOORVOEGSEL ) -1; A::VOORVOEGSEL & " ";"" )  & "" & If ( IsEmpty ( A::ACHTERNAAM ) -1; A::ACHTERNAAM ;"" )  ; A::NAAM_COMPLEET )  ) ; 

A_naar_STL::AANSPREEKVORM = "titel en voorletters en achternaam"; 

If  (  A_naar_STL::KEUZE_LAAT_WEG_DHRMEVR ≠ "ja"  or IsEmpty ( A::TITEL )  ; Case ( A::SOORT = "m"; A_naar_STL::DHR & " " ; A::SOORT = "v"; A_naar_STL::MEVR & " " ; A::SOORT = "mv"; A_naar_STL::DHRMEVR & " "  )  ; ""  )   & "" & Trim (  If ( IsEmpty ( A::TITEL )  -1;A::TITEL & " " ;"" )  & "" & If ( IsEmpty ( A::VOORLETTERS ) ; If ( IsEmpty ( A::VOORNAAM ) -1 ;  Left ( A::VOORNAAM;1 )  & " " ;"" ) ;  ""  &  A::VOORLETTERS & " " )  & "" & If ( IsEmpty ( A::VOORVOEGSEL ) ; "";  A::VOORVOEGSEL & " " )  & "" & If ( IsEmpty ( A::ACHTERNAAM )  ;""; A::ACHTERNAAM )  ) ; 

A_naar_STL::AANSPREEKVORM = "titel en voornaam en achternaam"; 

If  (  A_naar_STL::KEUZE_LAAT_WEG_DHRMEVR ≠ "ja"  or IsEmpty ( A::TITEL )  ; Case ( A::SOORT = "m"; A_naar_STL::DHR & " " ; A::SOORT = "v"; A_naar_STL::MEVR & " " ; A::SOORT = "mv"; A_naar_STL::DHRMEVR & " "   )  ; ""  )   & "" & Trim (  If ( IsEmpty ( A::TITEL )  -1;A::TITEL & " " ;"" )  & "" & If ( IsEmpty ( A::VOORNAAM ) ; "" ;  A::VOORNAAM & " "  )  & "" & If ( IsEmpty ( A::VOORVOEGSEL ) ; ""; A::VOORVOEGSEL & " "  )  & "" & If ( IsEmpty ( A::ACHTERNAAM )  ;""; A::ACHTERNAAM )  ) ; 

A_naar_STL::AANSPREEKVORM = "titel en achternaam"; 

If  (  A_naar_STL::KEUZE_LAAT_WEG_DHRMEVR ≠ "ja"  or IsEmpty ( A::TITEL )  ; Case ( A::SOORT = "m"; A_naar_STL::DHR & " " ; A::SOORT = "v"; A_naar_STL::MEVR & " " ; A::SOORT = "mv"; A_naar_STL::DHRMEVR & " "  )  ; ""  )  & "" & Trim (  If ( IsEmpty ( A::TITEL )  -1; A::TITEL & " " ;"" )  & "" & Trim ( If ( IsEmpty ( A::TITEL )  -1;A::TITEL & " " ;"" )  & "" &  If ( IsEmpty ( A::VOORVOEGSEL ) ; "";  A::VOORVOEGSEL & " "  )  & "" & If ( IsEmpty ( A::ACHTERNAAM )  ;""; A::ACHTERNAAM )  ) ; 



Trim ( A::VOORNAAM  & " " & If ( IsEmpty ( A::VOORVOEGSEL ) ; ""; A::VOORVOEGSEL & " "  )  & ""  & A::ACHTERNAAM )  ) 


; A::NAAM_COMPLEET ) 

; A::NAAM_COMPLEET ) 


& 


If  (  IsEmpty  (  A::LABELNAAMSUB  )  -1 and A::LABELNAAMSUB  ≠ A_label_sub_naar_A::NAAM_COMPLEET  ;  "¶" & A::LABELNAAMSUB   ; 

If ( IsEmpty ( A::label_adrescode_sub )  -1  ;

If  (  A_label_sub_naar_A::ca_waarde_soort = 1 ; 


If ( A::ca_waarde_soort = 1 ;   " " & A_naar_STL::EN & " " ; "¶" & A_naar_STL::TAV   & " "  )  ; "¶"  )  & "" & 

If ( A_label_sub_naar_A::ca_waarde_soort = 1;


If ( A::KEUZE_GEBRUIK_STIJL = "ja" ; 

Case ( 

A_naar_STL::AANSPREEKVORM = "voorletters en achternaam"; 

Trim ( If ( A_label_sub_naar_A::SOORT = "m" or A_label_sub_naar_A::SOORT = "v" or A_label_sub_naar_A::SOORT = "mv" ; 
If ( IsEmpty ( A_label_sub_naar_A::VOORLETTERS ) -1; A_label_sub_naar_A::VOORLETTERS & " "; If ( IsEmpty ( A_label_sub_naar_A::VOORNAAM ) -1; Left ( A_label_sub_naar_A::VOORNAAM;1 )  & " "; "" )  )  & "" & If ( IsEmpty ( A_label_sub_naar_A::VOORVOEGSEL ) -1; A_label_sub_naar_A::VOORVOEGSEL & " ";"" )  & "" &  If ( IsEmpty ( A_label_sub_naar_A::ACHTERNAAM ) -1; A_label_sub_naar_A::ACHTERNAAM ;"" )  ; A_label_sub_naar_A::NAAM_COMPLEET )  ) ; 

A_naar_STL::AANSPREEKVORM = "titel en voorletters en achternaam"; 

If  (  A_naar_STL::KEUZE_LAAT_WEG_DHRMEVR ≠ "ja"  or IsEmpty ( A_label_sub_naar_A::TITEL )  ; Case ( A_label_sub_naar_A::SOORT = "m"; A_naar_STL::DHR & " " ; A_label_sub_naar_A::SOORT = "v"; A_naar_STL::MEVR & " " ; A_label_sub_naar_A::SOORT = "mv"; A_naar_STL::DHRMEVR & " "  )  ; ""  )  & "" & Trim (  If ( IsEmpty ( A_label_sub_naar_A::TITEL )  -1; A_label_sub_naar_A::TITEL & " " ;"" )  & "" & If ( IsEmpty ( A_label_sub_naar_A::VOORLETTERS ) ; If ( IsEmpty ( A_label_sub_naar_A::VOORNAAM ) -1 ;  Left ( A_label_sub_naar_A::VOORNAAM;1 )  & " " ;"" ) ;  A_label_sub_naar_A::VOORLETTERS & " "  )  & "" & If ( IsEmpty ( A_label_sub_naar_A::VOORVOEGSEL ) ; ""; A_label_sub_naar_A::VOORVOEGSEL & " "  )  & "" & If ( IsEmpty ( A_label_sub_naar_A::ACHTERNAAM )  ;""; A_label_sub_naar_A::ACHTERNAAM )  ) ; 

A_naar_STL::AANSPREEKVORM = "titel en voornaam en achternaam"; 

If  (  A_naar_STL::KEUZE_LAAT_WEG_DHRMEVR ≠ "ja"  or IsEmpty ( A_label_sub_naar_A::TITEL )  ; Case ( A_label_sub_naar_A::SOORT = "m"; A_naar_STL::DHR & " " ; A_label_sub_naar_A::SOORT = "v"; A_naar_STL::MEVR & " " ; A_label_sub_naar_A::SOORT = "mv"; A_naar_STL::DHRMEVR & " "  )  ; ""  )  & "" & Trim ( If ( IsEmpty ( A::TITEL )  -1;A_label_sub_naar_A::TITEL & " " ;"" )  & "" & If ( IsEmpty ( A_label_sub_naar_A::VOORNAAM ) ; ""; A_label_sub_naar_A::VOORNAAM & " "  )  & "" & If ( IsEmpty ( A_label_sub_naar_A::VOORVOEGSEL ) ; "";  A_label_sub_naar_A::VOORVOEGSEL & " "  )  & "" & If ( IsEmpty ( A_label_sub_naar_A::ACHTERNAAM )  ;""; A_label_sub_naar_A::ACHTERNAAM )  ) ; 

A_naar_STL::AANSPREEKVORM = "titel en achternaam"; 

If  (  A_naar_STL::KEUZE_LAAT_WEG_DHRMEVR ≠ "ja"  or IsEmpty ( A_label_sub_naar_A::TITEL )  ; Case ( A_label_sub_naar_A::SOORT = "m"; A_naar_STL::DHR & " " ; A_label_sub_naar_A::SOORT = "v"; A_naar_STL::MEVR & " " ; A_label_sub_naar_A::SOORT = "mv"; A_naar_STL::DHRMEVR & " "  )  ; ""  )  & "" & Trim ( If ( IsEmpty ( A_label_sub_naar_A::TITEL )  -1;A_label_sub_naar_A::TITEL & " " ;"" )  & "" &  If ( IsEmpty ( A_label_sub_naar_A::VOORVOEGSEL ) ; ""; A_label_sub_naar_A::VOORVOEGSEL & " "  )  & "" & If ( IsEmpty ( A_label_sub_naar_A::ACHTERNAAM )  ;""; A_label_sub_naar_A::ACHTERNAAM )  ) ; 



Trim ( A_label_sub_naar_A::VOORNAAM  & " " & If ( IsEmpty ( A_label_sub_naar_A::VOORVOEGSEL ) ; ""; A_label_sub_naar_A::VOORVOEGSEL & " "  ) & ""  & A_label_sub_naar_A::ACHTERNAAM )  ) 



; A_label_sub_naar_A::NAAM_COMPLEET ) 

; A_label_sub_naar_A::NAAM_COMPLEET ) 


; "" )  ) 


Link to comment
  • 0

Drie vragen:

 

1. Waarom 'IsEmpty ( veld ) -1' als test? Ik zie het nut van die -1 niet....

2. Is het ongelijk teken '≠' op windows ook bruikbaar? Was altijd een verschil tussen mac en windows.....

3. Hoe zit het met tests als 'veld≠"tekst" and isempty(veld)' ? Ik gebruik daar altijd haakjes...

 

 

HTH

 

rmw

Link to comment
  • 0
IsEmpty ( veld ) -1

die -1 draait het resultaat om.

Als isempty = true = 1, dan 1-1 = 0 = false

Als isemtpy = false = 0,dan 0-1= -1, en dat leest volgens mij dan weer als een booleaans true. als ik me niet vergis.

ik geef de voorkeur aan

 

not ( isempty ( veld ) ) of not isempty ( veld )

 

@BDK

als je deze functie echt wilt debuggen zou ik hem opnieuw opmaken, met inspringen. dus

 

Case
 ( 
   Dit is een test ; 
   FunctieA
      (
          Input ; parameter ; parameter 
      )         
   ; 
   FunctieB
      (
          Input ; parameter ; parameter 
      )
  )
enz...

 

dan ga je zien welke functies bij welke haakjes horen en welke parameters bij welke functies.

 

EDIT

Maar misschien is het beter om eens te gaan kijken of het ook anders kan. Dus inderdaad met Let (), geen case en if door elkaar gebruiken, en voorzover ik het kan zien zou het ook simpeler kunnen als je de logica anders opbouwt. Uiteindelijk is het een combinatie van

 

wel of geen aanspreekvorm & wel of geen titel & wel of geen ( voorletters of voornaam ) & wel of geen tussenvoegsel & wel of geen achternaam

 

dat zou zoiets kunnen zijn als

Case 
 ( 
   gebruikstijl ; 
   TrimAll 
      ( 
         case ( gebruikaanspreekvorm ; aanspreekvormveld ) & " " &
         case ( gebruiktitel ; titel ) & " " &
         case ( gebruikvoornaam ; voornaam ; voorletters ) & " " &
         tussenvoegsel & " " &
         achternaam
         ; 1 ; 1 
       ) //eind trim
    ; naamcompleet
  ) //eind case

 

dit zal wel overgesimplificeerd zijn ten opzichte van wat je wilt. maar misschien kun je er wat mee. TrimAll is zo handig omdat je niet meer al die IsEmpty testen hoeft uit te voeren. Je plakt gewoon alles aan elkaar en later haal je de overbodige spaties weg.

Link to comment
  • 0

@ rmw

 

‘isempty ( veld ) - 1’ is inderdaad nog uit de tijd dat ik niet ontdekt had dat je ook NOT kunt gebruiken. het resultaat is evenwel hetzelfde als ‘not isempty ( veld )’

 

ik weet niet of ≠ ook op windows te gebruiken is. ik neem eigenlijk aan van wel, want filemaker biedt m zelf aan in het lijstje met operatoren.

 

je derde vraag begrijp ik niet helemaal

 

 

@ kjoe

 

dank kjoe, voor je uitgebreide hulp. ik denk dat helemaal opnieuw maken inderdaad het beste is. alle trim’s kunnen er inmiddels sowieso uit en met de let-functie moet het allemaal een stuk overzichtelijker kunnen.

 

ik ga je voorbeeld eens bestuderen. nog een paar vragen:

1. die inspringers, zijn die gewoon een kwestie van heel veel spaties typen?

2. laat trimall wel alle spaties staan die je zelf binnen de berekening toevoegt?

 

EDIT:

TrimAll laat inderdaad zelf toegevoegde spaties staan, handig! bijvoorbeeld:

TrimAll ( veld 1 & " " & veld 2 & " " & veld 3 & " " & veld 4 ; 1 ; 0 )

 

dank en groet, bdk

Link to comment
  • 0
1. die inspringers, zijn die gewoon een kwestie van heel veel spaties typen?

2. laat trimall wel alle spaties staan die je zelf binnen de berekening toevoegt?

1- helaas wel, met 'tab' maak je het veld- of functie-selectievak actief. ook handig, maar ja.

2 - trimall haalt alle dubbele spaties weg. Dus als je veld1 & " " & veld2 & " " & veld3 hebt, en veld 2 is leeg, dan zorgt trimall ( veld1 & " " & veld2 & " " & veld3 ; 1 ; 1 ) dat er geen twee spaties komen tussen veld1 en veld3.

Voor de parameters van trimall moet je even de helpviewer bekijken, ik meen dat het vooral verschillen oplevert als je ook niet-romeinse tekens (bijv. japanse karakters) in de tekst hebt.

Link to comment
  • 0

ok, hier de nieuwe versie... langer, maar wel veel overzichtelijker en efficiënter en veel sneller in elkaar gezet. ik heb er ook meteen maar commentaar bij gezet voor een beter begrip. en omdat ik niet de hele tijd spaties wilde typen heb ik m in een teksteditor getypt waarin je wel met tabs kunt werken. als je de berekening daarna naar filemaker kopieert gaan de tabs gewoon mee.

 

bedankt kjoe

 

 



// deel 1, de hoofdgeadresseerde

If 
( 
// hoofdgeadresseerde is een persoon
A::ca_waarde_soort = 1
;
Let
(
[
voornaam1 =  A::VOORNAAM
;
voorletters1 =  
			If 
			( 
			not IsEmpty ( A::VOORLETTERS ) 
			; 
			A::VOORLETTERS 
			; 
			 Left ( A::VOORNAAM ; 1 )  
			)  
;
voorvoegsel1 =  A::VOORVOEGSEL
;
titel1 =
		If 
		(  
		A_naar_STL::KEUZE_LAAT_WEG_DHRMEVR ≠ "ja"  or IsEmpty ( A::TITEL )  
		; 
			Case 
			( 
			A::SOORT = "m" ; A_naar_STL::DHR 
			; 
			A::SOORT = "v"; A_naar_STL::MEVR
			; 
			A::SOORT = "mv"; A_naar_STL::DHRMEVR
			) // end case
		) // end if
		&
		A::TITEL
;
achternaam1 = A::ACHTERNAAM
]
;
	If
	(
	A::KEUZE_GEBRUIK_STIJL = "ja"
	;
		Case 
		( 
			A_naar_STL::AANSPREEKVORM = "voorletters en achternaam";
			TrimAll ( voorletters1 & " " & voorvoegsel1 & " " & achternaam1 ; 1 ; 0 )
		;
			A_naar_STL::AANSPREEKVORM = "voornaam en achternaam";
			TrimAll ( voornaam1 & " " & voorvoegsel1 & " " & achternaam1 ; 1 ; 0 )
		;
			A_naar_STL::AANSPREEKVORM = "titel en voorletters en achternaam";
			TrimAll ( titel1 & " " & voorletters1 & " " & voorvoegsel1 & " " & achternaam1 ; 1 ; 0 )
		;
			A_naar_STL::AANSPREEKVORM = "titel en voornaam en achternaam";
			TrimAll ( titel1 & " " & voornaam1 & " " & voorvoegsel1 & " " & achternaam1 ; 1 ; 0 )
		) // end case
	;
	TrimAll ( voornaam1 & " " & voorvoegsel1 & " " & achternaam1 ; 1 ; 0 )
	) // end if
) // end let
;
// hoofdgeadresseerde is niet een persoon
A::NAAM_COMPLEET 
) // end if



&



// deel 2, de verbinding (t.a.v. of en)

If
(
// hoofdgeadresseerde is een persoon
A::ca_waarde_soort = 1
;
If
(
// subgeadresseerde is ook een persoon
A_label_sub_naar_A::ca_waarde_soort = 1
;
" " & A_naar_STL::EN & " "
;
"¶"
) // end if
;
// hoofdgeadresseerde is niet een persoon
If
(
// subgeadresseerde is een persoon
A_label_sub_naar_A::ca_waarde_soort = 1
;
"¶" & A_naar_STL::TAV & " "
;
"¶"
) // end if
) // end if




&



// deel 3, de subgeadresseerde

If 
( 
// subgeadresseerde is een persoon
A_label_sub_naar_A::ca_waarde_soort = 1 
;
Let
(
[
voornaam2 =  A_label_sub_naar_A::VOORNAAM
;
voorletters2 =  
			If 
			( 
			not IsEmpty ( A_label_sub_naar_A::VOORLETTERS ) 
			; 
			A_label_sub_naar_A::VOORLETTERS 
			; 
			 Left ( A_label_sub_naar_A::VOORNAAM ; 1 )  
			)  
;
voorvoegsel2 =  A_label_sub_naar_A::VOORVOEGSEL
;
titel2 =
		If 
		(  
		A_naar_STL::KEUZE_LAAT_WEG_DHRMEVR ≠ "ja"  or IsEmpty ( A_label_sub_naar_A::TITEL )  
		; 
			Case 
			( 
			A_label_sub_naar_A::SOORT = "m" ; A_naar_STL::DHR 
			; 
			A_label_sub_naar_A::SOORT = "v"; A_naar_STL::MEVR
			; 
			A_label_sub_naar_A::SOORT = "mv"; A_naar_STL::DHRMEVR
			) // end case
		) // end if
		&
		A_label_sub_naar_A::TITEL
;
achternaam2 = A_label_sub_naar_A::ACHTERNAAM
]
;
	If
	(
	A::KEUZE_GEBRUIK_STIJL = "ja"
	;
		Case 
		( 
			A_naar_STL::AANSPREEKVORM = "voorletters en achternaam";
			TrimAll ( voorletters2 & " " & voorvoegsel2 & " " & achternaam2 ; 1 ; 0 )
		;
			A_naar_STL::AANSPREEKVORM = "voornaam en achternaam";
			TrimAll ( voornaam2 & " " & voorvoegsel2 & " " & achternaam2 ; 1 ; 0 )
		;
			A_naar_STL::AANSPREEKVORM = "titel en voorletters en achternaam";
			TrimAll ( titel2 & " " & voorletters2 & " " & voorvoegsel2 & " " & achternaam2 ; 1 ; 0 )
		;
			A_naar_STL::AANSPREEKVORM = "titel en voornaam en achternaam";
			TrimAll ( titel2 & " " & voornaam2 & " " & voorvoegsel2 & " " & achternaam2 ; 1 ; 0 )
		) // end case
	;
	TrimAll ( voornaam2 & " " & voorvoegsel2 & " " & achternaam2 ; 1 ; 0 )
	) // end if
) // end let
;
// subgeadresseerde is niet een persoon
A_label_sub_naar_A::NAAM_COMPLEET 
)

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