0

Tabellenvariable außerhalb einer If-Abfrage deklarieren

Hallo Zusammen, 

ich möchte außerhalb einer If-Abfrage eine leere variable erstellen, die dann entweder einem neuen Tabellen Record oder einem existierenden Tabellen Record zugewiesen wird. 

let ABC := this;
let lieferschein := null;
if LieferscheinVerkauf = 0 then
    lieferschein := (create LieferscheinVerkauf);
    lieferschein.'Projekt PV' := ABC;
    else lieferschein := LieferscheinVerkauf;
end;
 

Ich habe es mal mit diesem Code probiert, der aber leider nicht funktioniert. Folgender Fehler wird angezeigt: "Expresion does not return a record: lieferschein in Zeile5, Spalte 14".

Ich möchte die Variable außerhalb der If-Anweisung deklarieren, damit ich diese auch außerhalb der If-Abfrage benutzen zu können.

Danke im Vorraus!

7 Antworten

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

    Ninox meckert über die Zeile?:

    lieferschein.'Projekt PV' := ABC;
    

     Du musst ggf. aus dem Record-Item eine Nummer machen. Versuch das mal.

    let ABC := this;
    let lieferschein := null;
    if LieferscheinVerkauf = 0 then
        lieferschein := (create LieferscheinVerkauf);
        lieferschein.'Projekt PV' := number(ABC);
        else lieferschein := LieferscheinVerkauf;
    end;
      • kevin.1
      • vor 8 Monaten
      • Gemeldet - anzeigen

       Genau. Ninox meckert über die Zeile: 

      lieferschein.'Projekt PV' := ABC;
      
      

      Nein das funktioniert leider nicht. Das Problem liegt glaube ich an der Variable, da ich ihr den Wert "null" zuweise, erkennt Ninox diese nicht als Record. Definiere ich die Variable in der If-Anweisung nochmal neu, funktioniert der Code ohne Probleme: 
       

      let ABC := this;
      let lieferschein := null;
      if LieferscheinVerkauf = 0 then
         let lieferschein := (create LieferscheinVerkauf);
          lieferschein.'Projekt PV' := ABC;
          else lieferschein := LieferscheinVerkauf;
      end;
      
    • Torsten_Stang.1
    • vor 8 Monaten
    • Gemeldet - anzeigen

    ich würde es so lösen:

    let ABC := this;
    if not Lieferscheinverkauf then
        let NewLS := (create LieferscheinVerkauf);
        NewLS.'Projekt PV' := ABC
    end;
    let lieferschein := LieferscheinVerkauf;
    
      • kevin.1
      • vor 8 Monaten
      • Gemeldet - anzeigen

       

      Viel Dank für diesen Lösungsansatz! Funktioniert fast perfekt :D

      Das Problem, das ich jetzt noch mit dem Code habe ist, dass beim erstmaligen betätigen, sofern noch kein Lieferschein vorhanden ist, z.B. nicht die Liefernummer sofort gesetzt wird (Erstellt wird der Lieferschein aber korrekt). Erst bei einer zweiten Betätigung oder bei einem bereits existierenden Lieferschein wird die Liefernummer gesetzt. 

       

      let ABC := this;
      let lieferschein := first(LieferscheinVerkauf);
      if LieferscheinVerkauf = 0 then
          let NewLS := (create LieferscheinVerkauf);
          NewLS.('Projekt PV' := ABC);
      end;
      lieferschein.('Liefer-Nr.' := 1)
      • Torsten_Stang.1
      • vor 8 Monaten
      • Gemeldet - anzeigen

        auch wenn mir nicht klar ist, wohin Du mit dem Code willst, sollte Dein Code so klappen:

      let ABC := this;
      if LieferscheinVerkauf = 0 then
          let NewLS := (create LieferscheinVerkauf);
          NewLS.('Projekt PV' := ABC);
      end;
      let lieferschein := first(LieferscheinVerkauf);
      lieferschein.('Liefer-Nr.' := 1)
      
      • kevin.1
      • vor 8 Monaten
      • Gemeldet - anzeigen

       Leider nicht. Selbes Spielchen. Die Liefer-Nr, wird erst beim zweiten Betätigen gesetzt. 

      Prinzipiell soll der Code garantieren, dass es nur einen Lieferschein pro Projekt gibt. 

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

       wenn Du wirklich nur sicherstellen willst, dass nur ein Lieferschein angelegt wird und es sich um eine Untertabelle handelt, kannst Du folgendes tun - ich glaube das ist aber kaum ein Unterschied zu Torsten seiner Lösung:

      let ABC := this;
      if cnt(LieferscheinVerkauf) = 0 then
          let NewLS := (create LieferscheinVerkauf);
          NewLS.('Projekt PV' := ABC);
      end;
      

      Da brauchst Du nichts weiter in irgendein Feld eintragen.

      Wenn es nur eine Verknüpfung und keine Untertabelle ist, kannst Du es fast genauso machen.

      let ABC := this;
      if cnt(select LieferscheinVerkauf where 'Projekt PV' = ABC) = 0 then
          let NewLS := (create LieferscheinVerkauf);
          NewLS.('Projekt PV' := ABC);
      end;
      

      Wenn Du trotzdem die Lieferscheinnummer irgendwo separat stehen haben möchtest, kannst Du das beim Create des Lieferscheins mit einbinden. Und wenn Du den Lieferschein über Button erstellst, kannst Du diesen zusätzlich auch ausblenden, wenn cnt(LieferscheinVerkauf) > 0

Content aside

  • vor 8 MonatenZuletzt aktiv
  • 7Antworten
  • 27Ansichten
  • 3 Folge bereits