Terminübersicht für zukünftige Folgetermine erstellen
Ninox Profile

Hallo,

ich benötige für meine Patienten eine Art Terminzettel und würde diesen gerne automatisch durch Ninox erstellen lassen. Basis ist ein erster Termin, sagen wir 01.07.19. Dieser wird in eine verknüpfte Untertabelle eingetragen. Es sollen zu Beginn, also nach dem 1. Termin die 10 Folgetermine (1x wöchentlich am selben Wochentag) für die nächsten Wochen berechnet und erstellt werden und das möchte ich am Ende ausdrucken und dem Patienten mitgeben. Wäre es hier gut eine Untertabelle zu machen und dann auf Knopfdruck neue Datensätze erstellen zu lassen mit dem letzten Datum + 7 Tage oder geht es auch anders? Vielleicht mit einer Schleife, die mir die Daten in ein Array schreibt und das ganze wird dann in einem Text- oder Formelfeld angezeigt? 

Ninox Profile

Wobei es eigentlich gut wäre, wenn ich die Daten auf der Liste editieren könnte. Dann vielleicht doch eine Untertabelle. Mir fehlt nur das Wissen, wie ich das für mehrere Termine hinbekomme.

 

Ninox Profile

Ja, ich würde das auch mit einer Untertabelle machen. Starttermin eingeben und dann per Button Serie erzeugen. Wenn der 'Termin' tatsächlich nur ein Datum (ohne Uhrzeit) und die Anzahl der Termine immer 10 ist, dann ließen sich die Folgetermine in einfacher Form z. B. so generieren:

 

let myPatient := this();
let myTermin := Starttermin;
for x := 7 to 70 step 7 do
    let newRec := create Termine
   
new.Rec.(Patient := myPatient)
   
newRec.(Termin := myTermin + x)
end;
Starttermin := null

 

Ninox Profile

Korrigiere:

 

let myPatient := this;
let myTermin := Starttermin;
for x := 0 to 70 step 7 do
    let newRec := create Termine
    new.Rec.(Patienten := myPatient)
    newRec.(Termin := myTermin + x)
end;
Starttermin := null

 

Ninox Profile

Hallo Dirk,

Ein einfaches Textfeld kannst du so erstellen:

---

Textfeld := "Behandlungstermine:

" + (
let myAR := for i in range(0, 10) do
let myDate := date(year(Datum), month(Datum), day(Datum) + 7 * i);
format(i + 1, "00") + " - " + format(myDate, "dddd") + ", " + format(myDate, "DD.MM.YYYY")
end;
join(myAR, "
")
)

---

Den Skript kannst du entweder als Trigger nach Änderung beim Feld Datum Platzieren oder als Funktion für einen Button. 

 

Leo

Ninox Profile

Korrigiere erneut (da hatte sich ein überflüssger Punkt eingeschlichen). Peinlich. Kann man nicht mal ne Syntaxprüfung in diesen Editor einbauen? ;)

 

let myPatient := this;
let myTermin := Starttermin;
for x := 0 to 70 step 7 do
    let newRec := create Termine
    newRec.(Patienten := myPatient)
    newRec.(Termin := myTermin + x)
end;
Starttermin := null

Ninox Profile

Super. Beide Lösungen funktionieren wunderbar. Das Textfeld könnte man ja im Prinzip auch editieren. Wobei ich häufig den Anwendungsfall habe, dass ich z.B. von 10 Terminen nur noch die zukünftigen und nicht die bereits stattgefundenen angezeigt bekommen will. Das müsste ja aber dann mit last(Datum...) funktionieren als Startdatum für die Schleife, wenn ich das Datum aus der Tabelle mit bisherigen Terminen verwende. Wenn ich dann die Anzahl der Termine - bisherige Termine mit dem count-Befehl ermittle, sollte das gehen, dass Ninox z.B. bei 4 noch übrigen Terminen von 10 nur noch 4x die Schleife durchläuft. Ich bastle mal.... :-) DANKE euch!

Ninox Profile

Was das Nicht-Anzeigen zurückliegender Termine betrifft, so könnte man bspw. die Verknüpfungstabelle ausblenden und statt dessen eine Ansicht nehmen. Die ließe sich dann entsprechend filtern (select Termine where Termin >= today()) und würde immer nur zukünftige Termien anzeigen.


Man könnte auch noch einen Dialog zwischenschalten, in dem man bspw. auswählen kann, ob der Termin fünf, zehn oder zwanzig mal wiederholt werden soll. Oder den Turnus: Wöchentlich, 14-tägig usw.


let myChoice := dialog("Bitte wählen", "Wieviele Termine sollen generiert werden?", ["5", "10", "20", "Abbrechen"]);
if myChoice != "Abrechen" then
    let Endzahl := number(myChoice) * 7;
    let myPatient := this;
    let myTermin := Starttermin;
    for x from 0 to Endzahl step 7 do
        let newRec := (create Termine);
        newRec.(Patienten := myPatient);
        newRec.(Termin := myTermin + x)
    end;
    Starttermin := null
else
    alert("Vorgang abgebrochen!")
end


Oder so. Der Ideen und Möglichkeiten wären da noch viele.

Ninox Profile

Vielen Dank euch beiden. Copytexter: Das sind tolle Ideen!

Bei mir kommt es häufig vor, dass ich einem Patienten die nächsten 2-3 Termine ausdrucken will. Problem ist, dass es zwar einen festen Termin gibt und ich dieser sich somit wiederholt. Er kann sich aber auch mal verändern oder ein Termin fällt aus. Ich könnte aber, wenn ich Dich richtig verstanden habe, eine Ansicht bauen und dann z.B. die nächsten 3 Termine anzeigen lassen und diese ggf. auch händisch ändern, falls nötig. Das Ganze dann per Druckvorlage ausdrucken. Oder ich mache es nach Leos Lösung in ein Textfeld und ändere dort eben ggf. noch mal ab. Wobei ich dann nicht so schön bequem einen Datumsanzeiger habe sondern im Text ändern würde.

Ninox Profile

Ein großer Vorteil von Ansichten gegenüber Verknüpfungstabellen ist halt der, dass sie sich nach Bedarf flexibel steuern lassen. Entweder durch einen festen Filter wie oben (nur zukünftige Termine) oder auch dynamisch über Buttons, Daten- und Auswahlfelder.

 

So ließe sich bspw. über der Ansicht ein Auswahlfeld zur Bestimmung der Anzeige platzieren. Nennen wir es mal 'Termine anzeigen', als Optionen könnte es "alle", "zukünftige" und "vergangene" enthalten. Dann könnte man in der Ansicht unter "Funktion" auf dieses Feld Bezug nehmen und die anzuzeigenden Datensätze über eine Abfrage entsprechend filtern:

 

if text('Termine anzeigen') = "zukünftige" then
    select Termine where Termin >= today())
else
    if text('Termine anzeigen') = "vergangene" then
        select Termine where Termin < today())
    else
        select Termine
    end
end

 

Oder per switch-case:

 

switch text('Termine anzeigen') do
    case "zukünftige": select Termine where Termin >= today())
    case "vergangene": select Termine where Termin < today())
    default: select Termine
end

 

Das nur als einfaches Beispiel. Ebenso gut könnte man auch ein numerisches Feld mit der Anzahl der anzuzeigenden Termine auswerten (wobei die Filterung allerdings etwas komplizierter wäre). Und es lassen sich auch verschiedene Kriterien kombinieren, der Funktions-Code einer Ansicht darf durchaus mal etwas umfangreicher sein.

 

Problem (kein Licht ohne Schatten): Ansichten lassen sich nicht ohne weiteres drucken. Dazu müsste man im Drucklayout wieder auf die Verknüpfungstabelle zugreifen und diese ggf. entsprechend filtern.

 

Aber das ist natürlich alles ein bisschen ins Blaue hinein überlegt. Wie gesagt: Der Möglichkeiten sind viele ... ;)

 

Antworten