0

per Button einen Datensatz erzeugen

Hallo zusammen. 
Die Überschrift trift meine Frage nicht ganz. Ich erzeige bereits mit einem Button einen neuen Datensatz. 

let myAusgaben := 25;
let myAuswertung := this;
let myBemerkung := "BESCHREIBUNGSTEXT";
let NR := (create Einkauf);
NR.(Name := 3);
NR.(Datum := today());
NR.(Ausgaben := myAusgaben);
NR.(Kategorie := 19);
NR.(Auswertung := myAuswertung);
NR.(Bemerkung := myBemerkung)

 

Ich möchte nun die 25 in myAusgabe aus einer Tabelle entnehmen.
Tabelle heißt "Verträge" dort gibt es ein Feld, sagen wir das heißt "Beitrag". Und es gibt ein Feld "Lieferant", das ist aber mit einer Entsprechenden Tabelle verknüft. 

Mein Versuch sah so aus: 
let myAusgaben := 'Verträge'.Beitrag['Verträge'.Lieferant="VGW"];

Erzeugt aber leider nur die Fehlermeldung: 
Expression does not return multiple values. 

 

Mit einer where-Klausel habe ich auch schon rumgespielt. gibt aber auch Fehlermeldungen. 

let myAusgaben := 'Verträge'.Beitrag where'Verträge'.Lieferant="VGW";

Fehlermeldung: 

Unexpected keyword:where

 

Vielen Dank schon mal für einen Hinweis!

Viele Grüße
Alex

15 Antworten

null
    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    so vieleicht wenn du nach 25 und VGW als bedingung suchst.

    let myAusgaben:= (select 'Verträge' where Beitrag = 25 and 'Verträge'.Lieferant=“VGW'). dein zu übernehmendes feld

    • Alexander_Pietsch
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Michi,

    danke für deine Rückmeldung.

    Die 25 ist ja eigentlich das was ich aus der Tabelle Verträge haben will. Wenn dort Änderungen vorgenommen werden, soll die Button Funktion entsprechend auch angepasst sein.

    viele Grüße 

    Alex

    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    da must du deine bedingungen so erstellen das es nur eben dieser datensatz ist wer für die erstellung zuständig ist. wenn es mehr werden must du über first() oder last() gehen. oder soll dies nur auf den gerade geöffneten datensatz bei änderung bezogen sein? Was heist du änderst was sodas eine bedingung erfüllt ist und somit ein Datensatz in Einkäufe geschrieben werden soll?

    • Alexander_Pietsch
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Wenn der Beitrag unter Verträge von 25 auf 26 steigt, soll der Button einen Eintrag in Tabelle Einkauf von 26 machen und nicht statisch 25.

    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Du schreibst in den neuen datensatz feste werte. Wann geschieht das? hat jeder in Vertrag angelegte datensatz ein dazugehörigen mit deinen festen werten in einkauf? soll da jedesmal ein neuer datensatz bei änderung hinzukommen oder soll der bestehende in einkauf nur mit anderen werten gefüllt werden?

    • Alexander_Pietsch
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Es wird ein neuer Datensatz in Einkauf angelegt wenn der Button betätigt wird. Der Betrag wird aktuell aus der Tabelle Vertrag genommen. (Zur Zeit steht der wert händisch drin und muss so in Vertrag und in der Button Konfiguration geändert werden)

    rückwirkend sollen keine Datensätze in Einkauf geändert werden.

    Viele Grüße 

    Alex

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    ...nur mal eine Idee:

    let myAusgaben := 'Verträge'.Beitrag['Verträge'.Lieferant="VGW"] liefert (wenn überhaupt) ein Array zurück. Für den letzten Beitrag müßte es aber ungefähr so aussehen:

    let myAusgaben := last('Verträge'[Lieferant=3].Beitrag)

    Für "3" mußt Du die Datensatznummer des Lieferanten "VGW" einsetzen. Ich nehme an, daß es ein Verknüpfungsfeld ist, sonst bleibt "VGW". Gruß Mirko

    • Alexander_Pietsch
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Mirko, 

    ich glaube ich komme hier schon ein ganzes Stück weiter. 

    Leider stoße ich immer noch auf eine Problem. 
    Ich versuche über die Nr.  ( oder ist das bei NINOX die ID) einen ganze bestimmten Datensatz aus Verträge zu nehmen. Sagen wir Datensatz nummer 31. 

    Darin ist ein Feld Betrag. Diesen möchte ich im Butten nutzen. Leider ist der immer leer. 

     

    let myAusgaben := last(Verträge[Verträge = 31].Beitrag);

    Eigentlich kann last ja weg, denn es gibt nur einen Datensatz Nr. 31

    Was mach ich blos falsch.... 

     

    Viele Grüße 

    Alex

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    ...aha. Dann vielleicht so:

    record('Verträge',31).Beitrag

    Du sprichst dadurch das Feld Beitrag im Datensatz Nr. 31 in der Tabelle Verträge an.

    • Alexander_Pietsch
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Mirko, manchmal ist die Lösung so einfach. Man muss aber erst noch große "Gedanken"- Kreise drumherum drehen. Danke auch noch mal an Michi für den Input.
    Ist alles sicherlich Basis-Wissen was ich noch nicht so drauf habe. Record kannte ich jetzt so noch gar nicht.
    Einen angenehmen Tag und eine schönen Restwoche.
    Viele Grüße

    • Alexander_Pietsch
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Mirko, 

    ich hätte da doch noch mal eine Frage an dich 

    Wenn ich jetzt die Summer aus zwei ( drei ...) Verträgen haben möchte, wie muss dass dann aussehen? 

    So bekomme ich jedenfalls eine Fehlermeldung. 

    sum('Verträge',31+32).Beitrag

     

    Danke dir und viele Grüße

    Alex

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Alexander. Entweder einzeln addieren, oder (etwas eleganter) das Ergebnis einer for-Schleife mit range (erster Wert inklusive, zweiter Wert exclusive) summieren. Oder for-Schleife mit select und Bedingungen. Gruß Mirko

    1.

    record('Verträge',31).Betrag + record('Verträge',32).Betrag + record('Verträge',33).Betrag

    2.

    sum(for i in range(31,34) do
    record('Verträge',i).Betrag
    end)

    3.

    sum(for i in (select 'Verträge')[number(Nr) >= 31 and number(Nr) <= 33] do
    i.Betrag
    end)

    • Alexander_Pietsch
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Perfekt! Danke dir. Damit kann ich doch schon mal was anfangen. 

     

    VG Alex

    • Alexander_Pietsch
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Wenn ich noch eine Frage stellen dürfte...?
    Kann ich die Beschriftung des Buttons mit dem Ergebnis aus
    record('Verträge',31).Betrag + record('Verträge',32).Betrag + record('Verträge',33).Betrag
    füllen oder ist hier nur reiner Text erlaubt?

    VG Alex

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Das geht nicht. Hier wäre eventuell ein neben dem Button liegendes Funktionsfeld hilfreich, welches Dir das Ergebnis anzeigt und demzufolge dynamisch ist.

Content aside

  • vor 2 JahrenZuletzt aktiv
  • 15Antworten
  • 421Ansichten