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
    • Leonid_Semik
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Jetzt antworte ich mir selbst :-)

    Ich würde aus Tabellen Angebote und Rechnungen eine Tabelle z.B. Bestellungen machen und die Angebote und Rechnungen als zwei Druckansichten erstellen.Sonst hast du Redundanz bei
    Positionen. Ist aber nur eine Option.

    Gruß
    Leo
    • schocki
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo. Ich versuche so etwas wie eine TAG Funktion zusammen zu schustern. Mein Ansatz besteht aus Tabelle1 (TAGs auswählen und hinterlegen) und Tabelle2 (TAG Vorrat). Verknüpfung Tabelle1:Tabelle2 / 1:N. In Tabelle1 habe ich ein Textfeld in dem nach Auswahl, per Script der TAG aus Tabelle2 nachgetragen wird. Jetzt ist es aber so, dass ich die Verknüpfung zu Tabelle2 nach jeder Auswahl manuell lösen muss um einen weiteren TAG auswählen zu können. Letztendlich fehlt nur die Möglichkeit bei dem Verknüpfungsfeld auf Seite der Tabelle1 per Script nach Änderung die Verknüpfung sofort wieder zu lösen. Formelbeispiel für Verknüpfungsfeld in Tabelle1/ Script nach Änderung: Text := TAGs + (if TAGs then ", " else "") + Tabelle2.TAG;
    Tabelle2 := void
    • schocki
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Korrektur der Formel um Missverständnisse zu vermeiden:
    TAGs := TAGs + (if TAGs then “, ” else “”) + Tabelle2.TAG;
    Tabelle2 := void
    • Alexander_Koenig
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo,
    evtl. kommt es in Frage die Tags über eine Kompositions Hilfstabelle zu vergeben.
    Ähnlich dem Rechnungen Beispiel. Hier gibt es "Rechnungspositionen", über die beliebieg "Artikel" zu einer Rechnung hinzugefügt werden können.
    Analog könnte man eine Tabelle "Tag-Positionen" als Komposition mit Tabelle1 verknüpfen und mit Tabelle 2 verknüpfen. Dann kann man in Tabelle 1 über die "Tag Positionen" verschiedene Tags immer wieder hinzufügen.
    VG, Alex
    • Chris_CH
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Ich möchte um Hilfe bitten.

    Eine Tabelle als Aktenregister.
    Tabelle: Akte
    Feld Registernummer (RegNr)
    Die einzelnen Datensätze nummeriere ich fortlaufend, was problemlos geht mit:
    (RegNr := last((select Akte).RegNr) + 1)
    Das ist als Trigger gesetzt bei einem neuen Datensatz.

    Nun muss ich nach einemJahreswechsel wieder bei 1 (ich ergänze "/ AnlY") anfangen
    Ich habe versucht, ein Feld mit der Jahreszahl (AnlY) zu setzen und zum vorigen Eintrag zu vergleichen:
    if last((select Akte).AnlY) < year(today())
    then
    (RegNr := "1")
    else
    (RegNr := last((select Akte).RegNr) + 1)
    Ich teste indem ich die Systemzeit zurücksetze auf 2015. korrekt wird ein Datensatz mit AnlY "2015" erzeugt.
    Setze ich wieder auf 2016, zählt er die RegNr aber immer noch weiter hoch, also fortlaufend, anstatt wieder bei 1 zu beginnen.

    Wie erreiche ich, dass die korrekte (damalige) Jahreszahl genommen wird zum Vergleich oder wie anders kann ich testen, ob es der erste Datensatz eines neuen Jahres ist?

    Ich hoffe, jemand kann mir weiterhelfen.
    • Leonid_Semik
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Chris_CH
    Ich habe mir sowas für ganz anderes Thema gebastelt:
    Auf deine Datenbank umgeleitet würde ich das Feld "Datum" anlegen mit Standardwert Heute(). Dan Trigger bei neuen Datensatz:

    let N := year(Datum);
    RegNr := max((select Akte where year(Datum) = N).Nummer) + 1;

    Und prüfen kannst du indem du das Datum einfach auf 2015 änderst und ein neuen Datensatz erstellst.

    Gruß Leo
    • Chris_CH
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Ich danke Dir sehr, so gehts super.
    • Frank_Bohmer
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Chris_CH,
    folgendes sollte gehen:

    RegNr := max((select Akte where year(Datum) = year(today())).RegNr) + 1

    Viele Grüße,
    Frank
    • Chris_CH
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Ich danke Dir sehr, ja so geht es.
    • Chris_CH
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Ich hänge an einem gedanklichen Problem fest und bitte um Hilfe:

    Ich habe eine Datenbank "Akten" In dieser gibt es Kompositionsdatenbanken "Gegner" und "Mandanten" die jeweils gespeist werden aus mit ihnen verknüpfter Datenbank "Beteiligte"

    Soweit so gut. Das System ist fast identisch zu dem Modell der "Rechnungen" hier deren "Positionen" aus den "Artikeln" gespeist sind.

    Nun kann ich bei den "Beteiligten" mir alle "Akten" anzeigen lassen, bei denen der Beteiligte involviert ist, über die steuerbare Ansicht der Gegner und Mandanten Daten, tatsächlich ist das die Ansicht der Gegner und Mandanten Datenbank. (Um in Eurem "Rechnungsmodell" zu bleiben. Wenn ich in "Artikel" auf "Umsatz Karteikarte " gehe, wird mir eine Ansicht der Rechnungspositionen gezeigt, und an erster Stelle "Rechnungsnummer". So lasse ich mir bei meinen "Beteiligten" deren "Aktenbeteiligungen" anzeigen)

    Da ist mein Wermutstropfen. Ich möchte aus dem jeweiligen "Beteiligten" in dieser Ansicht die angezeigte Akte aufrufen können.

    Ich möchte also mir in der Datenbank "Beteiligte" alle Akten anzeigen lassen (nur anzeigen, keine Anlage oder Bearbeitung erforderlich dort) an denen die Person beteiligt ist.
    Wie kann ich das am elegantesten realisieren? Mir genügt schon eine Liste oder Tabelle die "automatisch gefüllt wird.

    Ich hoffe, dass ihr mir hier auf die Sprünge helfen könnt.

    Christoph
    • Leonid_Semik
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Christof,
    eine Frage - ist pro Akte immer nur ein Mandant und ein Gegner, oder können auch mehrere sein? Es ist wichtig um Datenmodell zu erstellen.

    Gruß Leo
    • Leonid_Semik
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Christoph,
    für den Fall, dass pro Akte nur ein Mandant un nur ein Gegner existiert aber ein Mandant in anderem Fall ein Gegner sein kann, habe ich kleine Vorlage für dich.
    Es existieren nur zwei Tabellen: "Akten" und "Beteiligten". Alles andere ist mit Beziehungen realisiert.

    https://www.dropbox.com/s/qv97cm1ext0ntjv/Akten.ninox?dl=0

    gruß Leo
    • Chris_CH
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Leo,

    pro Akte kann es mehrere Mandanten und mehrere Gegner geben.

    Genauso kann ein Mandant in einer anderen Akte auch Gegner sein.

    Ließe sich das auch darstellen?

    Gruß Christoph
    • Chris_CH
    • vor 8 Jahren
    • Gemeldet - anzeigen
    • Chris_CH
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Du siehst, dass ich mir bei “Beteiligten” mir alle “Akten” anzeigen lasse, bei denen der Beteiligte involviert ist, in der Karteikarte "Akten"
    Die Listen an sich sind auch gut so.

    Aber ich brauche, dass sie auf die Akten und nicht auf die Beteiligten verlinken.
    • Leonid_Semik
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Christoph,
    du verlinkst hier nicht auf beteiligten sonder auf Paar "Beteiligte-Akte"
    und beide Felder sind beim Klick vorhanden. Du hast auch beim Link zu beteiligten geschrieben "Details zu ....."
    Wenn du dasselbe fürs Feld Akten macht, dann kannst du genauso auf Details zu Akten zugreifen

    Ich verstehe nicht ganz warum du Die Adressdaten von Beteiligten nochmals per Trigger in die Tabelle einfügst.Ich würde hier lieber Berechnungsfelder einfügen. Problem bei Trigger sehe ich wenn bei Beteiligten die Adresse oder Telefon sich ändern muss du manuell bei Mandanten und Gegner nachpflegen. Es sei den es ist so gewollt.
    In der Tabelle Mandanten hast du die Verknüpfung auf Akten schon, wenn du jetzt die Berechnungsfelder mit relevanten Daten einfügst, siehst du auch auf ersten Blick , was für Akte das ist.

    Leo
    • Chris_CH
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Ich sitze auf dem Schlauch. Deinen Satz :

    >> du verlinkst hier nicht auf beteiligten sonder auf Paar “Beteiligte-Akte” und beide Felder sind beim Klick vorhanden. Du hast auch beim Link zu beteiligten geschrieben “Details zu …..”
    Wenn du dasselbe fürs Feld Akten macht, dann kannst du genauso auf Details zu Akten zugreifen

    .. verstehe ich nicht.
    Was soll ich wohin verlinken?

    Entschuldige, dass ich das nicht verstehe...

    Christoph
    • Leonid_Semik
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Christop,
    habe deine Datenbank modifiziert. Der Aktenname wird jetzt anders generiert und falls du mehrere Mandanten/Gegner hast werden diese auch aufgelistet auserdem siehst du jetzt sowohl der Name als auch die Akte. Ich habe beide Tabellen als Komposition gesetz. Habe alle doppelte Zusatzfelder gelöscht

    https://www.dropbox.com/s/ch3wpba8firhdw6/KanzleiRegister.ninox?dl=0

    Leo
    • Chris_CH
    • vor 8 Jahren
    • Gemeldet - anzeigen
    elegante Idee, ich danke Dir sehr dafür!
    • Leonid_Semik
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Die Formel bei Aktenname ist fehlerhaft richtig ist

    concat(Mandant.Beteiligte.Name) + (if cnt(Gegner.Beteiligte.Nr) = 0 then
    " (" + wegen + ")"
    else
    ". / ." + concat(Gegner.Beteiligte.Name) + " (" + wegen + ")")

    Außerdem ist in der Liste Mandanten eine Zeile zu viel. Solltest du am besten die Mandanten und gegner löschen und neu anlegen.
    Leo
    • Chris_CH
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Ich danke Dir sehr für Deine Aufmerksamkeit und die sehr hilfreichen Ratschläge.
    Danke Leo
    • Chris_CH
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Ich weiß nicht, ob es eine Frage zu Trägern oder der Syntax ist:

    ich habe in einer Datenbank eine Tabelle aus Mitgliedsnummern und Namen. Diese ist und soll auch so sein - unveränderbar. (MglNr)
    In einer anderen Tabelle (Teilnehmer) habe ich (unter anderem) zwei Felder
    eines Mitgliedsnummer eines Name.
    Ich möchte nun erreichen, dass ich bei Teilnehmer die Mitgliedsnummer angeben kann und der Name dann automatisch aus der Tabelle MglNr gesetzt wird.
    Ich scheitere an der Syntax glaube ich.

    Wie muß ich das machen?

    Christoph
    • Frank_Bohmer
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Christoph,
    normalerweise würde ich das nicht über einen Trigger realisieren, sondern schlicht eine Verknüpfung von Teilnehmer zu der Tabelle Mitglieder anlegen.
    Über einen Trigger - ohne Verknüpfung - könnte es so gelingen:

    let m := MglNr;
    Name := first(select Mitglieder where MglNr = m).Name

    Viele Grüße,
    Frank
    • Chris_CH
    • vor 8 Jahren
    • Gemeldet - anzeigen
    so funktioniert es,
    herzlichen Dank Frank

    Christoph
    • Chris_CH
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Ich löse das so, weil die Mitglieder Tabelle vollkommen statisch ist nun nicht geändert werden darf.