Denna delen av 99 uppdateras inte längre utan har arkiverats inför framtiden som ett museum.
Här kan du läsa mer om varför.
Mac-nyheter hittar du på Macradion.com och forumet hittar du via Applebubblan.

Vad missar jag i min "If" beräkning?

Tråden skapades och har fått 2 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Stockholm
  • 2009-08-26 21:07

Hej,
Såhär ser mitt beräkningsfält ut:
If ( Inköpare = " Serier" or "Kryss" or " Noveller" or "Sommarkryss" ; "Kontaktperson" ; "Saknar kontakt" )

Jag har lagt upp kryssrutor för Serier,Kryss osv och det är tänkt att om inget av dessa är ifyllda, så skall det stå "Saknar kontakt" i fältet. Är något av kryssrutorna ifyllda, -ja då skall det stå "Kontaktperson". Vad är det jag missar?

Kanske finns det något bättre sätt än att använda "If" ?

Mvh
Magnus

Du behöver jämföra fältet med varje värde om beräkningen ska fungera som du tänkt.

If ( Inköpare = "Serier" or Inköpare = "Kryss" or Inköpare = "Noveller" or Inköpare = "Sommarkryss" ; "Kontaktperson" ; "Saknar kontakt" )

En annan variant kan vara att vända på logiken, kolla om fältet har något innehåll, då fungerar beräkningen även om flera av kryssrutorna är ifyllda.

If ( Inköpare ≠ "" ; "Kontaktperson" ; "Saknar kontakt" )

tonbe370 har rätt, du måste göra "riktiga" jämförelser i dina villkor. Visserligen utvärderar FileMaker fältinnehåll i sig självt i ett villkor som sant och tomt fält som falskt, så den sista if-satsen är korrekt.

I If-satser kan du ha flera villkor och ha antingen "and" eller "or" mellan varje villkor. Man kan även använda sig av not (dvs inte):

If(villkor1 and villkor2 and not villkor3; "om det är sant", "om det är falskt")

villkor1, villkor2 och villkor3 kan alltså vara vad som helst som FileMaker kan utvärdera till sant eller falskt. Allt som är något eller positiva nummer är falskt, allt som är inget eller negativa nummer eller noll, är falskt.

1=1 är ett villkor, 1≠2 är ett annat villkor 1>2 är ett tredje och vill du jämföra ett fälts innehåll med ett värde, så använder du fältetsnamn="textsträng".

Du är en smula otydlig i din fråga, jag gissar att du har ETT fält som heter "Inköpare" och på det en värdelista i form av kryssrutor som innehåller dessa värden:

Serier
Kryss
Noveller
Sommarkryss

Om listan även innehåller flera värden som INTE skall ge att det står "Kontaktperson" i ditt beräkningsfält som tex:

Romaner
Antologier
Biografier
Faktaböcker

... och du alltså har kryssrutor i fältet för din värdelista så är tonbe370 första If-sats fel och den andra kan också vara fel.

Det är nämligen så att när man kryssar för flera saker i en värdelista som "ligger på" ett fältet i en layout och den värdelistan visas som kryssrutor, så kommer fältet i att innehålla varje förkryssat värde åtskiljt med ett retur-tecken. Om den har alternativknappar eller meny, står endast det värdet i fältet. (Lägg ut fältet två gånger i layouten, med och utan värdelista "på sig", så ser du.)

En If-sats som fungerar om du vill att vissa angivna värden, men inte alla, skall ge värdet "Kontaktperson" är denna:

If(
Patterncount (Inköpare; "Serier")>0 or
Patterncount (Inköpare; "Kryss")>0 or
Patterncount (Inköpare; "Noveller")>0 or
Patterncount (Inköpare; "Sommarkryss")>0; "Kontaktperson"; "Saknar kontakt"). (Ok eventuellt kommer ordet kryss även att hittas i ordet Sommarkryss, men det går att fixa med ett returtecken).

Patterncount letar efter ordet i fältet och hittar det oavsett vilken rad det står i.

Du kan även använda funktionen IsEmpty så här, om alla kryss i fältet skall ge resultatet "Kontaktperson":

If(IsEmpty(Inköpare); "Saknar kontakt"; "Kontaktperson")

Om det istället är så att du har flera fält och alla dessa har kryssrutor med värdelistor som innehåller endast ett värde så kan du få samma effekt så här:

IfIf(IsEmpty(Serier & Kryss & Noveller & Sommarkryss); "Saknar kontakt"; "Kontaktperson") (Om nu dina fält faktiskt heter Serier, Kryss, Noveller och Sommarkryss).

1
Bevaka tråden