0

Trigger

Hallo,
erstmal vielen Dank für das tolle Produkt. Nun habe ich eine Frage: Ich hab es zwar hinbekommen einen Trigger für ein Feld einzurichten aber kann ich einen Trigger so einrichten, dass er sich auf mehr als ein Feld auswirkt?

Z. B.: wenn Feld A »Ja« dann Felder B UND C ändern

Vielen Dank im Voraus!

193 Antworten

null
    • info.3
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Alex,

    Das mit der Ansicht ist zumindest eine vorübergehende Option. Schöner wäre es, eine farbliche Darstellung beim unterschreiten. Es wird per Formel ermittelt. Ich habe meine gesamten Projekte mit dem Lager vergnüpft. Projektbezogenes Material wird automatisch gleich abgezogen.

    Grüße Frank
    • Alexander_Koenig
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Frank, wir haben das auf der Anforderungsliste. Können aber noch nicht genau sagen, wann es implementiert wird.
    VG, Alex
    • Leonid_Semik
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Guten Tag,

    Ist es möglich mit Trigger einen neuen Datensatz in der verknüpften Tabelle anzulegen?

    Gruß Leo
    • Frank_Bohmer
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Leo, das ist noch nicht möglich. Gruß, Frank
    • Leonid_Semik
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Kann Ninox das Anlegen von Duplikaten verhindern? Ich möchte verhindern, dass die Datensätze angelegt werden, welche alle Felder identisch haben.

    Leo
    • Frank_Bohmer
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Das ist leider nicht möglich.
    Viele Grüße, Frank
    • peter_goldnetde
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Ich möchte beim anlegen eines neuen Datensatzes Werte aus dem Vorherigen Datensatz übernehmen. z.B. Restsaldo und Annuität. Ist das möglich? Ich bekomme das nur mit einem Wert hin.
    • Richard.1
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo

    Und wenn Sie den Datensatz duplizieren und nur entsprechend anpassen......
    • Alexander_Koenig
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo, das geht mit einem Trigger auf Tabellen Ebene, der bei Anlegen eines neuen Datensatzes ausgeführt wird. Nutzen Sie die Funktion last() und select.

    Restsaldo := last(select Tabellenname.Restsaldo) - Saldo

    Eine ähnliches Beispiel finden Sie in der Vorlage Zählerstände.
    • marcel_stoeckterdeichde
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Moin Moin!
    Ich versuche gerade eine automatische Vergabe einer Belegnummer in Abhängigkeit der Belegart umzusetzen. Leider stoße ich da an meine Grenzen. Ich möchte über ein Auswahlfeld die Belegart bestimmen - 1 für Angebot und 2 für Rechnung. Bei der Neuanlage des Datensatzes habe ich somit versucht einen Trigger auf die Tabelle zu setzen, der den max Wert der jeweiligen Belegnummer ermittelt und dann mit +1 hoch zählt.

    let a := max((select Belege).Angebotsnummer) + 1;
    let b := max((select Belege).Rechnungsnummer) + 1;
    if Belegart = 1 then
    (Angebotsnummer := lpad(text(a), 3, "0"))
    else
    (Rechnungsnummer := lpad(text(b), 3, "0"))


    Wenn ich aus einem Angebot jetzt aber eine Rechnung erstellen möchte, hat der Datensatz bereits die Angebotsnummer eingetragen, welche theoretisch beim Duplizieren des Datensatzes gelöscht werden muss. Anschließend sollte die Rechnungsnummer vergeben werden.

    Vielleicht ist der Code oben ja schon ein richtiger Ansatz?

    Vielen Dank für die Hilfe!
    • marcel_stoeckterdeichde
    • vor 8 Jahren
    • Gemeldet - anzeigen
    NACHTRAG:
    Abgesehen von der Problematik funktioniert das mit lpad() noch nicht so ganz.
    • schocki
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo. Ich habe eine Frage zu den Triggern auf Tabellenebene. Was überwacht die Funktion "Nach Änderung folgendes Script ausführen"? Gibt es eine Möglichkeit den Datensatz an dem die Änderung vorgenommen wurde zu bestimmen? MfG schocki
    • Frank_Bohmer
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Das lpad(...) sieht eigtl. gut aus, was funktioniert nicht? Möglich wäre auch format(a, "000")
    Beim Duplizieren werden (absichtlich) keine Trigger ausgelöst.
    Per Skript ist ein duplicate(...) noch nicht möglich. Die etwas aufwändige Alternative wäre, den gesamten Vorgang als Skript umzusetzen und auf eine Befehlsschaltfläche zu legen. So in etwa:

    let r := create Rechnung;
    r.Rechnungsnummer := max((select Belege).Rechnungsnummer) + 1;
    r.Datum := today();
    ...
    for p1 in Rechnungspositionen (
    let p2 := create Rechnungspositionen;
    p2.Rechnung := r;
    p2.Artikel := p1.Artikel;
    ...
    )
    • schocki
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Haben diese "..." Zeichen eine Funktion? MfG schocki
    • schocki
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Entschuldigung. Habe zu schnell gelesen. "..." hat keine Funktion.
    • Frank_Bohmer
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Der Trigger überwacht alle Datenfelder, aber nicht Änderungen in verknüpften Datensätzen. Das Skript bezieht sich auf den gerade geänderten Datensatz.
    • marcel_stoeckterdeichde
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Vielen Dank für die Hilfe!
    Ich habe mich dann gestern doch dafür entschieden, zwei Tabellen (insgesamt vier) für Angebote und Rechnungen anzulegen. Das kommt einem ERP / CRM Tool letztendlich eh näher.
    Jetzt würde ich gerne nur versuchen per Befehlsschaltfläche die Positionen und den Kontakt aus dem Angebot in die Rechnung zu übernehmen. Im Grund müsste ich ja versuchen, erst einen neuen Datensatz per "record" zu erstellen und dann die Angebotspositionen in die Rechnungspositionen zu übernehmen, oder?
    • Frank_Bohmer
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Genau. Einen neuen Datensatz erstellt man zB so:

    let r := create Rechnung;
    r.Rechnungsdatum := today()
    • marcel_stoeckterdeichde
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hier verlassen mich meine "Kenntnisse", welche ich mir durch Try and Error gerade aneigne.


    let r := (create 'Rechnungen');
    let a := Nr;
    r.(Datum := today());
    r.(Kontakt := last((select Kontakt where 'Angebote'.Nr = a).Kontakt)


    Wobei sich 'Nr' auf die Tabelle Angebote bezieht. Im Grunde möchte ich den Kontakt aus dem Angebot nun auch bei der erstellten Rechnung setzen. Ich bekomme allerdings die Fehlermeldung, dass "der Ausdruck mehrfache Ergebnisse zurück liefert" (Angebot.Nr).

    Wenn ich dieses Problem gelöst habe, fehlt mir ja nur noch der Loop für die Übernahme der Positionen.


    for p1 in Rechnungspositionen (
    let p2 := create Rechnungspositionen;
    p2.Rechnung := r;
    p2.Artikel := p1.Artikel)


    Den Code-Schnipsel würde ich als Vorlage nehmen, jedoch verstehe ich den leider auch noch nicht ganz :(

    Wäre über Hilfe mal wieder sehr erfreut!

    Vielen Dank!
    • Leonid_Semik
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Marcel,
    Wenn du die Rechnung aus dem Angebot erstellst und du Angebotspositionen und Rechnungspositionen in separaten Tabellen hast:

    let k:=Kontakt;
    let n:=Nr;
    let r := (create Rechnungen);
    r.Datum:=today();
    r.Angebot:=n
    r.Kontakt:=k;
    let rn:=r.Nr;
    for p in (select Angebotspositionen where Angebot=n)(
    let PR:=p.Produktname;
    let xx:=p.xx....;
    ....
    ....
    let y := (create Rechnungspositionen);
    y.Rechnung:=rn;
    y.Produktname:=PR;
    y.irgentwas:=xx.....;)

    Du muss statt Punkte alle deine Positionsfelder auflisten und diese dann mit y... := übernehmen.

    Besser wäre es wenn ich die Datenbank sehen würde.

    Die Formel ist nicht geprüft.

    Gruß
    Leo
    • marcel_stoeckterdeichde
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Anbei die Datenbank

    • marcel_stoeckterdeichde
    • vor 8 Jahren
    • Gemeldet - anzeigen
    • Leonid_Semik
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Marcel,
    anbei die Datenbank
    https://www.dropbox.com/s/zpb1wgn5aylpwqj/K%C3%BCnstler2.ninox?dl=0

    Ich habe nicht richtig verstanden, was du mit Veranstaltungen machst.

    grüß Leo
    • Leonid_Semik
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Irgendwie ist bei Wordpress Schluss nach 3 Unterhaltungen
    also nochmals

    Hallo Marcel,
    anbei die Datenbank
    https://www.dropbox.com/s/zpb1wgn5aylpwqj/K%C3%BCnstler2.ninox?dl=0

    Ich habe nicht richtig verstanden, was du mit Veranstaltungen machst.

    grüß Leo
    • marcel_stoeckterdeichde
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hey Leo,
    ganz große Klasse! Vielen Dank :)
    Da wäre ich so schnell nicht drauf gekommen. Werde das gleich noch mal in Ruhe durchsehen und schauen, ob ich es nachvollziehen / verstehen kann.

    Die Veranstaltungen sind im Grunde vereinbarte Termine mit Kunden.

    Beispiel:
    Kunde fragt an, ob Künstler an Termin x für 2 Stunden Zeit hat und etwas singen kann. Er bittet neben Terminbestätigung um ein Angebot bzgl. der Kosten.
    Man kann dann ein Angebot erstellen und den Termin über "Veranstaltungen" blocken, bzw. eintragen und mit einem Veranstaltungsort verknüpfen. Hinzu kommt die Verknüpfung rückwärts zu den Belegen (Angebot / Rechnung) und dem dazugehörigen Kontakt.
    Neben einem CRM ergibt dies also auch einen simplen Terminkalender.

    Beste Grüße
    Marcel

Content aside

  • vor 6 JahrenZuletzt aktiv
  • 193Antworten
  • 58012Ansichten