0

if... and... Was mache ich falsch?

Hallo Zusammen,

ich habe folgende Formel auf einem Button gelegt:

if Kundennummer = null and 'Übergabe an Dispo' = false then
    alert("E-Mail nicht gesendet")
else
    alert("E-Mail gesendet")
end

Ich möchte, keinen mail versand (alerts dienen als Darstellung) , wenn KUNDENNUMMER und 'Übergabe an Dispo' leer sind.

Leider klappt das nicht so ganz, da scheinbar die else bedinung greift, sobald eines der Bedingungen erfüllt sind. 

Wo ist mein Fehler?

Die Kundennummer ist ein Zahlenfeld.

'Übergabe an Dispo' ist ein Ja/Nein Feld

Lg

10 Antworten

null
    • Developer by Smartplanung
    • smartplanung
    • vor 9 Monaten
    • Gemeldet - anzeigen

    Wenn es für das Ja/Nein-Feld keinen Standardwert gibt (Ja oder nein), ist das Feld bei einem neuen Record automatisch null. Ich persönlich frage solche Felder grundsätzlich ab, ob diese true oder NOT true sind, da es nur 1 true-Variante geben kann, mit null jedoch 2-false Varianten, zumindest im Grundverständnis vieler User.

    Lange Rede usw....

    if Kundennummer = null and not 'Übergabe an Dispo' then
        alert("E-Mail nicht gesendet")
    else
        alert("E-Mail gesendet")
    end
    
      • Martin_Ossadnik
      • vor 9 Monaten
      • Gemeldet - anzeigen

       Danke für deine fixe antwort.

      Standwert ist auf nein gesetzt. 

      Aber auch dein Code, ging bei mir nicht.

      Es kam das  "else" Ergebnis obwohl nur die Kd. Nummer  eingegeben war.

      • Developer by Smartplanung
      • smartplanung
      • vor 9 Monaten
      • Gemeldet - anzeigen

       achso, ja klar.

      if Kundennummer = null (nein, weil Kundennummer gesetzt) and not Übergabe an Dispo = ja.

      Bei Bedingungen mit UND dazwischen, müssen beide Bedingungen zutreffend sein (true). Wenn jedoch die Kundennummer angegeben wurde, kommst Du auf false, da Kundennummer ja nicht null ist. Entweder:

      if Kundennummer = null or not 'Übergabe an Dispo' then
          alert("E-Mail nicht gesendet")
      else
          alert("E-Mail gesendet")
      end
      

      oder (würde ich bevorzugen):

      if Kundennummer > 0 and 'Übergabe an Dispo' then
       alert("E-Mail gesendet")
      else
       alert("E-Mail nicht gesendet")
      end
      
      • Martin_Ossadnik
      • vor 9 Monaten
      • Gemeldet - anzeigen

       Ok, krass. die beiden Formel gehen.

      Aber warum kommt da eine "or" anweisung anstatt einer "and" anweisung?

      ich dachte bei "or" muss nur eines der beiden zutreffen?

       

      Aber was mich noch mehr wundert,... 

      Diese Formel funktioniert: 

      if Kundennummer != null and 'Übergabe an Dispo' = true then
          alert("E-Mail gesendet")
      else
          alert("E-Mail nicht gesendet")
      end

      meine erste von oben, allerdings nicht, obwohl es die gleiche ist, nur eben mit umgekehrte Abfrage.

      if Kundennummer = null and 'Übergabe an Dispo' = false then
          alert("E-Mail nicht gesendet")
      else
          alert("E-Mail gesendet")
      end

      Kannst du mir den Grund dafür erklären?

       

      ANSONSTEN DANKE DIR! 

      Du hast mir geholfen :)

      • Developer by Smartplanung
      • smartplanung
      • vor 9 Monaten
      • Gemeldet - anzeigen

       das ist immer so eine Sache das zu erklären 😅

      Eine If Bedingung setzt immer voraus true zu sein. Andernfalls geht es in ein else, sofern es eins gibt.

      Man muss dann alles in der If Bedingung betrachten. Wenn Du sagst ich möchte etwas auslösen, wenn die Kundennummer leer ist UND Ja/Nein auch true ist, geht das auch nur, wenn beides auch wirklich der Fall ist. Wenn auch nur eins davon nicht zutrifft, wird deine Bedingung nicht erfüllt. Anders ist es bei einem ODER. Da reicht eine einzige Bedingung, welche zutreffen muss.

      Der einfachste Weg ist tatsächlich immer davon auszugehen, was wie sein muss, damit die Bedingung erfüllt ist und was alternativ (else) passieren soll.

      Also in deinem Fall:

      Du möchtest nur eine Mail senden, wenn eine Kundennummer vorhanden ist und an die Dispo übergeben wurde. Wenn auch nur eines der beiden Dinge nicht so ist, soll keine Mail gesendet werden.

      Und ja, auch dein Beispiel ist ähnlich zu meiner Lösung. Du kehrst die Bedingung entsprechend um. Statt null soll Kundennummer nicht null sein und statt Dispo = false soll Dispo = true sein.

      Kundennummer > 0 geht z.B. nur bei Zahlenfeldern. Eine 0 als Zahl nimmt ein Zahlenfeld nicht an. Sondern nur >= 1. Sobald also eine Kundennummer angegeben wurde, ist der Wert immer größer als 0. Alternativ geht dann auch Deine Lösung, da die Kundennummer ja nicht mehr Null ist, sobald sie vorhanden ist. Ist sogar noch besser, da diese Art der Bedingung bei verschiedenen Datenfeldern funktioniert.

      Um solche If-Bedingungen einfacher zu prüfen, kannst Du auch ein Formelfeld verwenden und einfach die If-Bedingung reinschreiben, ohne If/End:

      Kundennummer != null and 'An Dispo Übergeben'

      Ergebnis ist dann Ja oder Nein

      • Martin_Ossadnik
      • vor 9 Monaten
      • Gemeldet - anzeigen

       Ich Danke dir vielmals für den ausfürlichen text. Das hilft enorm ;)

       

      Ich habe dennoch weitere fragen zu der Thematik in einem anderen Bereich:

      Ich möchte, dass wenn unten "ZB1 + ZB2" angeklickt wird, das im oberen Mehrfachauswahlfeld auch die ersten beiden Punkte markiert werden. Das habe ich hinbekommen mit:

       let myA := string(1 + 2);
      if 'vom ZLD/Filiale erhalten' = 3 then
          'Status Dokumente' := myA
      end

      Nun habe ich aber das Problem, dass wenn im MFA Feld der dritte Punkt markiert ist, dass meine o.g. Formel den Wert zurücksetzt und nur 1 und 2 markiert. 

       

      Wie baue ich es um, dass punkt 3 im MFA Feld nicht auf 0 gesetzt wird?

      ich habe auch das probiert: 

      let myA := string(1 + 2);
      let myB := string(1+2+3);

      if 'Status Dokumente' = string(3) and  if 'vom ZLD/Filiale erhalten' = 3
              then 
                  'Status Dokumente' := myB
              else
                  'Status Dokumente' := myA

                  end
                      end

       

      hier meckert er bei dem zweiten end!

       

      War das verständlich?

       

      lg

      • Developer by Smartplanung
      • smartplanung
      • vor 9 Monaten
      • Gemeldet - anzeigen

       sehr gerne.

      'Status Dokumente' ist ein MFA, kein dynamisches? Dann würde ich statt string(), chosen(Feld, AuswahlId) verwenden. String habe ich persönlich nie verwendet, daher kann ich dazu nicht viel sagen. Aber chosen('Status Dokumente', 3) gibt Dir ein true zurück, wenn die 3. Auswahl ausgewählt wurde, andernfalls false. Die Id der Auswahl siehst Du in der Liste rechts, wo Du die Auswahl eingetragen hast. Die IDs sind fortlaufend und können nicht mehr zurückgeholt werden, wenn sie einmal gelöscht wurden. Ähnlich wie bei den Datensätzen und deren Id.

      Zu dem if/else...jedes if benötigt ein end an richtiger Stelle. Der markiert Dir ein end, weil eins zu viel ist. Du hast ja nur ein if dort stehen. --- Korrektur: das zweite if in der Bedingung ist falsch. Das gehört da nicht hin. Immer:
      if [Bedingungswert 1] [Operator (=, !=, >, <, >=, <=)] [Vergleichswert 1] [and/or] [Bedingungswert 2] [Operator (=, !=, >, <, >=, <=)] [Vergleichswert 2] then...

      Operatoren und Vergleichswerte erübrigen sich oft, wenn wie z.B. chosen() verwendet wird, da die Funktion bereits ein true/false ausgibt. Man könnte auch chosen(feld, x) = true als Bedingung machen, muss man aber nicht.

      Um das MFA wieder zu füllen ginge eigentlich auch [1, 2] und [1, 2, 3]

      if chosen('Status Dokumente', 3) and 'vom ZLD/Filiale erhalten' = 3 then
         'Status Dokumente' := [1, 2, 3]
      else
         'Status Dokumente' := [1, 2]
      end
      
      • Martin_Ossadnik
      • vor 9 Monaten
      • Gemeldet - anzeigen

       Danke für die Erklärung, aber egal was ich im Feld "'vom ZLD/Filiale erhalten'" anklicke, er wählrt im MFA (Kein Dynamischesfeld), immer 1 und 2. Auch wenn ich im "'vom ZLD/Filiale erhalten'" 1 und 2 anwähle.  Punkt 3 im MFA wird nicht angehakt.

    • Ninox-Professional
    • planoxpro
    • vor 9 Monaten
    • Gemeldet - anzeigen
     said:
    Auch wenn ich im "'vom ZLD/Filiale erhalten'" 1 und 2 anwähle.

    Demnach wäre auch 'vom ZLD/Filiale erhalten' ein Mehrfachauswahlfeld. Das müsste dann ebenfalls mit chosen() abgefragt werden:

    if chosen('Status Dokumente', 3) and chosen('vom ZLD/Filiale erhalten', 3) then
       'Status Dokumente' := [1, 2, 3]
    else
       'Status Dokumente' := [1, 2]
    end

    PS: Die Zuweisung mit string() wird wohl nicht funktionieren. Mehrfachauswahlfelder geben normalerweise Arrays zurück und erwarten bei Zuweisungen auch Arrays (kommagetrennte Werte in eckigen Klammern). Die Abfrage auf einzelne ausgewählte Optionen erfolgt mit chosen().

    https://docs.ninox.com/de/skripten/funktionen-ueberblick/funktionen/chosen

      • Martin_Ossadnik
      • vor 9 Monaten
      • Gemeldet - anzeigen

       Danke dir, das ist nur ein MFA Feld vorhanden.

      Ich habs aber gelöst:

       

      if 'vom ZLD/Filiale erhalten' = 3 then
          if chosen('Status Dokumente', 3) then
              'Status Dokumente' := [1, 2, 3]
          else
              'Status Dokumente' := [1, 2]
          end
      end

       

      DANKE EUCH :)

Content aside

  • vor 9 MonatenZuletzt aktiv
  • 10Antworten
  • 61Ansichten
  • 3 Folge bereits