0

Anzeige eines Statusfelds abhängig von Datumsfeldern in einer 1:n-verknüpften Tabelle

Liebe Leute,

ich noch mal mit einem Problem, bei dem v. a. Leo und der Copytexter mir schon viel geholfen haben – vor allem dabei, es in seine einzelnen Teile aufzuteilen (Danke dafür!) – und wo jetzt der letzte Schliff fehlt. Ich komm nicht drauf.

Ich habe zwei Tabellen: "Tagungen" und "Rücksprachen" in einer 1:n-Beziehung, d. h. bei einer Tagung könne mehrere oder auch keine Rücksprachen nötig sein. Die Felder, die den Status der Rücksprache definieren sind zwei Datumsfelder: "Wiedervorlage" und "Erledigt".

Es gibt, soweit ich das sehe, fünf verschiedene Möglichkeiten, wie sich die der Status einer Rücksprachen darstellen kann. Diese Möglichkeiten sollen in der Tabelle "Tagungen" angezeigt werden. Dafür hab ich ein Skript gebastelt, das auch erstmal funktioniert:

let myRS1 := "Nichts zu klären";
let myRS2 := "Erledigung in der Zukunft! Bitte korrigieren.";
let myRS3 := "Rücksprache überfällig";
let myRS4 := "Rücksprache offen";
let myRS5 := "Alles erledigt";
if not 'Rücksprachen'.Wiedervorlage and not 'Rücksprachen'.Erledigt then
myRS1
else
if 'Rücksprachen'.Erledigt > today() then
myRS2
else
if 'Rücksprachen'.Wiedervorlage < today() and not 'Rücksprachen'.Erledigt then
myRS3
else
if 'Rücksprachen'.Wiedervorlage >= today() and not 'Rücksprachen'.Erledigt then
myRS4
else
if 'Rücksprachen'.Wiedervorlage and 'Rücksprachen'.Erledigt then
myRS5
else
"Unvorhergesehene Konstellation!"
end
end
end
end
end

Es funktioniert dann nicht mehr, wenn es zu einem Datensatz Tagungen" mehrere Datensätze in der Tabelle "Rücksprachen" gibt.

Daher die Frage: Kann man und wenn ja wie, dieses Skript so anpassen, dass es auch bei mehreren Datensätzen in der Tabelle "Rücksprachen funktioniert?

Danke, ein schönes Wochenende und beste Grüße

ali

6 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Ali, jeder verknüpfte Eintrag in 'Rücksprachen' definiert einen Status. Bei mehreren Einträgen müsste man also auch alle abfragen und anhand eines Algorithmus entscheiden, welcher Status in 'Tagungen' angezeigt werden soll. Das wäre recht kompliziert.

     

    Ich würde den Status deshalb schon dort auswerten, wo er definiert wird, also in der Tabelle 'Rücksprachen'. Zum Beispiel über ein Auswahlfeld 'Status' mit den entsprechenden Texten (plus Farbe/Symbol). Über die Reihenfolge (IDs) ließe sich dabei auch gleich eine Wertigkeit festlegen, nach der sich später die Anzeige in 'Tagungen' richtet (bspw. die mit dem niedrigsten Wert):

     

    "Korrigieren" (1)
    "Überfällig" (2)
    "Offen" (3)
    "Erledigt" (4)

     

    Mit einem Änderungstrigger in beiden(!) Datumsfeldern 'Wiedervorlage' und 'Erledigt' lässt sich der Status automatisch aktualisieren:

     

    Status := if Erledigt then
       if Erledigt > today() then 1 else 4 end
       else
       if Wiedervorlage > today() then 3 else 2 end
    end

     

    Das Statusfeld kann man in der Verknüpfungstabelle in 'Tagungen' anzeigen lassen, damit man sofort sieht, wo ggf. noch etwas zu tun ist.

     

    Um nun den jeweils dringlichsten Status (der mit der niedrigsten Auswahl-ID) der Rücksprache-Einträge im Datensatz 'Tagungen' anzeigen zu lassen, genügt ein Funktionsfeld mit folgender Formel:

     

    item(sort('Rücksprachen'.Status), 0)

     

    • Ali
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Lieber Copytexter,

    besten Dank für die rasche und hilfreiche Antwort!

    Der erste Teil leuchtet sofort ein: Den Status erst einmal dort anzeigen lassen, we er auftritt, nämlich in der Tabelle "Rücksprachen".

    Beim zweiten Teil bin ich nicht sicher, ob ich ihn verstanden habe, vor allem den Part mit den Triggern in den beiden Datumsfeldern.

    Ich habe versucht, das Problem zu lösen, indem ich sechs Variablen definiert habe, die den möglichen Stati entsprechen. Das Problem dabei war, dass, sobald ich die Variablen mit der Funktion "styled" vershen habe, es Fehler bei der Ausswertung dieser Variablen im Auswertungsfeld der Tabelle "Tagungen" gegeben hat. Deshalb hier der Umweg über versteckte "Rechenfelder" und sichtbare und "gestylte Statusfelder", die den Status bunt und lesber anzeigen, aber die nicht weiter verwendet werden.

    Kurz:

    Feld "Status Rücksprache verstecktes Rechenfeld" in Tabelle "Rücksprachen":_

    let myRS1 := 1;
    let myRS2 := 2;
    let myRS3 := 3;
    let myRS4 := 4;
    let myRS5 := 5;
    let myRS6 := 6;
    if not Wiedervorlage and not Erledigt then
    myRS1
    else
    if Erledigt > today() then
    myRS2
    else
    if Wiedervorlage < today() and not Erledigt then
    myRS3
    else
    if Wiedervorlage >= today() and not Erledigt then
    myRS4
    else
    if Wiedervorlage and Erledigt or not Wiedervorlage and Erledigt then
    myRS5
    else
    myRS6
    end
    end
    end
    end
    end

    Diese Stati werden im Feld "Status Rücksprache" lesbar übersetzt:

    if 'Status Rücksprache verstecktes Rechenfeld' = 1 then
    styled("Nichts zu klären", "white", "black", "")
    else
    if 'Status Rücksprache verstecktes Rechenfeld' = 2 then
    styled("Erledigung in der Zukunft! Bitte korrigieren.", "red", "black", "warn2")
    else
    if 'Status Rücksprache verstecktes Rechenfeld' = 3 then
    styled("Rücksprache überfällig!", "red", "black", "warn2")
    else
    if 'Status Rücksprache verstecktes Rechenfeld' = 4 then
    styled("Rücksprache offen", "orange", "black", "gear")
    else
    if 'Status Rücksprache verstecktes Rechenfeld' = 5 then
    styled("Problem erledigt", "green", "white", "check")
    else
    if 'Status Rücksprache verstecktes Rechenfeld' = 6 then
    styled("Unvorhergesehene Konstellation!", "red", "white", "irritated")
    end
    end
    end
    end
    end
    end

    In der Tabelle "Tagungen" werden die Variablen aus dem unsichtbaren Rechenfeld dann ebenfalls in einem versteckten Rechenfeld "Status Rücksprachen unsichtbares Rechenfeld" ausgewertet:

    let myStRS1 := 1;
    let myStRS2 := 2;
    if cnt('Rücksprachen'['Status Rücksprache verstecktes Rechenfeld' = 2]) or cnt('Rücksprachen'['Status Rücksprache verstecktes Rechenfeld' = 3]) or cnt('Rücksprachen'['Status Rücksprache verstecktes Rechenfeld' = 4]) then
    myStRS1
    else
    myStRS2
    end

    Und dann in dem sichtbaren Feld "Status Rücksprachen" übersetzt:

    if 'Status Rücksprachen unsichtbares Rechenfeld' = 1 then
    styled("Rücksprache offen", "red", "black", "warn2")
    else
    if 'Status Rücksprachen unsichtbares Rechenfeld' = 2 then
    styled("keine offenen Rücksprachen", "green", "white", "happy")
    else
    styled("Irgendetwas stimmt nicht", "red", "white", "irritaed")
    end
    end

     

    Das funktioniert zwar, hat aber zumindest zwei Nachteile:

    1. Mit den unsichbaren Zwischenfeldern zu arbeiten ist umständlich und

    2. die Komplexitätsreduktion in der letzten Statustabelle führt zu ungenauen Angaben: Sie kennt nur zwei Modi: "Erledigt" und "Noch zu tun". Das Problem, das ich nicht in den Griff bekomme, ist ein logisches:
    Ich kann  zwar prüfen, ob alle Rücksprachen zu einer Tagung erledigt sind, aber ich weiß nicht, wie ich die drei möglichen offenen Stati (Datumsfehler, Rücksprache offen, Rücksprache überfällig) in der Tabelle tagungen anzeigen lassen kann.

    Wenn Du eine Idee haben solltest: Großartig! Du kannst mir aber auch gerne sagen, wo ich mich verrannt habe …

    Auf jeden Fall wünsche ich einen schönen Sonntag,
    Beste Grüße
    ali

    • Ninox-Professional
    • planoxpro
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Ali, hattest du es mal so ausprobiert, wie ich es beschrieben habe? Was genau verstehst du an den Triggern nicht?

     

    Dein Code ist ja wieder etwas völlig anderes. Ich habe keine Ahnung, wozu "versteckte Rechenfelder" und "gestylte Statusfelder" gut sein sollen. Und es ist sehr mühselig, sich da jedesmal neu reinzuwühlen.

     

    Was die Formatierung per styled() betrifft: Wenn du den Einträgen des Status-Auswahlfeldes in der Tabelle 'Rücksprachen' jeweils eine Farbe und/oder ein Symbol zuweist, dann wird das bei meinem obigen Vorschlag auch in der Tabelle 'Tagungen' genauso übernommen, also Text mit Farbe und Symbol.

     

    2021-07-04_17-14-28

    • Ali
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Copytexter,

    ja, jetzt hab ichs nachgebaut und es ist natrürlich sehr viel eleganter, als die umständlichen Versteckfelder. Danke dafür!

    Wegen des Triggers: Was soll der denn triggern? Aktualisiert ein Eintrag in die Datumsfelder nicht automatisch den Datansatz?

    Beste Grüße
    ali

    • Ninox-Professional
    • planoxpro
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Ali, wenn das Darum geändert wird, muss es auch ausgewertet und dem Auswahlfeld 'Status' der neue Wert zugewiesen werden. Das macht der Änderungs-Trigger im Datumsfeld. Ohne einen solchen Trigger würde gar nichts passieren, wenn das Datum geändert wird. Denn ein Auswahlfeld ändert sich nicht automatisch in Abhängigkeit anderer Felder. Das können nur Funktionsfelder. Man hätte statt der Trigger also auch ein solches Funktionsfeld nehmen und die Berechnung dort vornehmen können. Im Hinblick auf die weitere Auswertung und die Gestaltungsmögloichkeiten mit Farben und Symbolen erschien aber in diesem Fall ein Auswahlfeld praktischer.

    • Ali
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Ich denke, ich habs jetzt hinbekommen.

    Besten Dank!

    :-D

Content aside

  • vor 2 JahrenZuletzt aktiv
  • 6Antworten
  • 379Ansichten