0

Code fehlerhaft

Guten Morgen,

bei nach folgendem code erscheint der Fehlerhinweis: Ende erwartet: if in Zeile 31, Spalte 2.

Wie muss ein zweites if eingebunden werden?

5 Antworten

null
    • Wilfried_Hennen
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Sorry, hier der code:

    if Vertragsstand = "aktiv" then
        if REAKTIONSDATUM = 'Preiserhoehung bis' then
            "Ende 6 Wochen-Frist am " + 'Preiserhoehung bis' + " für Ankündigung einer Preiseränderung durch den Versorger."
        else if REAKTIONSDATUM = '1.SV_LZ_bis' then
            if 'Vertrag_(be)endet' > 0 then
                if 'JahresBoni?' = "ja" then
                    "Vertrag gekündigt, Boni in Schlussrechnung prüfen, Vertragsende an Kündigungstermin anpassen und Zähler übertragen!"
                else if 'NeuKuBo_aus_%' > 0 or 'NeuKuBo€' > 0 then
                    "Vertragsende - Neukundenbonus abgerechnet?"
                else
                    "Vertrag gekündigt, Vertrag_beendet an Kündigungstermin anpassen und Zähler übertragen!"
                end
            else
                "Vertrag (b)endet am " + '1.SV_LZ_bis' + ". Anschluss- oder Neuvertrag erfassen und Zähler übertragen!"
            end
        else if REAKTIONSDATUM = Preisgarantie then
            "Ende Preisgarantie"
        else if REAKTIONSDATUM = SoBo_bis then
            "Zahlungstermin Sonderbonus " + 'SoBo€' + " Euro"
        else if REAKTIONSDATUM = KdgFrist_Ende then
            "Letzte eigene Kündigungsmöglichkeit am " + KdgFrist_Ende + " auf den " + '1.SV_LZ_bis' + "."
        else if REAKTIONSDATUM = KdgPruefung then
            "Eigene Kündigungsprüfung in der Zeit vom " + KdgPruefung + " bis zur letzten Möglichkeit am " + KdgFrist_Ende + "."
        else if 'GV_LZ bis' > 0 then
            "Grundversorgung mit 2 Wochenfrist selber kündbar! Preisänderung muss 6 Wochen vorher angekündigt werden!"
        else if REAKTIONSDATUM = 'Vertrag_(be)endet' then
            "Vertrag (be)endet am " + 'Vertrag_(be)endet' + "! Zähler auf neuen Vertrag übertragen!"
        end
    end

    if Vertragsstand = "passiv" then
        if 'JahresBoni?' = "nein" then
            "Vertrag (be)endet am " + 'Vertrag_(be)endet' + "! Zähler auf neuen Vertrag übertragen!"
        else if 'JahresBoni?' = "ja" then
            "Vertrag (be)endet am " + 'Vertrag_(be)endet' + "! Schlussboni kontrollieren, Zähler auf neuen Vertrag übertragen!"
        end
    end

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Wilfried Hennen 

      Hallo Wilfried, der Aufbau lautet immer "if ... else ... end" (wobei das "else" optional ist). Bei verschachtelten Abfragen muss jedes innere "if" in sich abgeschlossen sein. Zum Beispiel so:

      if Bedingung1 then
         [...]
         if Bedingung2 then
            [...]
         else
            if Bedingung3 then
               [...]
            end
         end
      else
         [...]
      end

      Ich würde den Code deshalb noch mal genau darauf überprüfen. Die Gesamtzahl der "if" und "end" muss exakt übereinstimmen, "else" können auch weniger sein, aber niemals mehr. Und ich sehe da sehr viele "else" ...

      Bei sehr tief verschachtelten if-Abfragen sollte man zudem überlegen, ob sich nicht zumindest ein Teil davon durch ein switch-case-Konstrukt ersetzen lässt.

      https://docs.ninox.com/de/skripten/einfuehrung-in-ninox-skript/verzweigung-festlegen/mehrfachverzweigung-festlegen

      • Bernhard_Schulze.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Hi! Bezieht sich der "case 1 ... 3" demnach auf die Position im Auswahlfeld?

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Hallo Bernhard, ja, Auswahlfelder geben als Standard immer die Nummer des Eintrags als Zahl zurück. Will man den Textwert abfragen, muss man dies explizit angeben:

      text(Auswahlfeld)
      
    • Bernhard_Schulze.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hi! Ich persönlich würde diesen langen Formelschwanz in kleinere Stücke aufteilen und für jedes Szenario eine eigene Formal machen, nach dem Muster z.B. "Vertrag aktiv", "Vertrag passiv", "Vertrag Frist" usw. und diese dann in die Abfragen an der jeweiligen Stelle einfügen. Erstens ist es dadurch übersichtlicher (m.M.n.) und die Fehlersuche kann besser eingekreist werden. Nur so eine Idee ;-)