Zuordnungs-/Verknüpfungsprobleme
Hallo zusammen,
ich probiere grade herum eine Zuordnungen durch eine Überprüfung von Kriterien durchzuführen. Aktuell habe ich mir eine Schaltfläche eingebaut, um es manuell auszuprobieren:
let me := this;
let myPatID := Pat_X_Prax;
let myPP_B := 'Fall-Beginn';
let myPauschal := first(select Pauschalen where Fall.Pat_X_Prax = myPatID and myPP_B >= PP_Beginn and myPP_B <= PP_Ende);
if 'RG-Status' = 0 then
me.(Pauschalen := myPauschal)
end;
Die Zuordnung funktioniert so wie sie soll, aber leider nur für eine Zuordnung. In der Abbildung müssten die F_ID 303 der Pauschal_ID P-168 und F_ID 304 der Pauschal_ID 170 zugeordnet werden. Ich verstehe nicht ganz, wieso die Zuordnung einmal einwandfrei funktioniert, sodass in der Tabelle Pauschalen eine Pauschal_ID zwei F_IDs zugeordnet werden kann, aber keine weiteren.
Hat jemand eine Idee wodran das liegen kann?
lg Jonas
16 Antworten
-
Hallo
du lässt den script ja auch nur einmal laufen und mit first die 1. Zuordnung machen, welche die Kriterien erfüllt.
Wenn du mit for ii in select Pauschalen ..... eine Schleife baust, wird er auch alle finden
lg
Arsène
-
Moin Arsène,
ist eine Schleife wirklich von nöten, da ich nicht alle finden brauche? denn mit myPauschale will ich immer die erste Pauschale ( Pauschal_ID ) die das Zeitintervall gesetzt hat.
z.B.:F_ID 297 hat eine Pauschale mit der Pauschal_ID 168 erstellt, wo das Intevall von PP_Beginn: 01.01.2019 bis PP_Ende: 01.05.2019 liegt.
F_ID 302 wurde mit dem 'Fall-Beginn' 01.03.2019 korrekterweise der Pauschale mit der Pauschal_ID 168 zugeordnet, da dieses Datum zwischen dem PP_Beginn und PP_Ende liegt.
Jetzt müsste doch F_ID 303 mit dem 'Fall-Beginn' 20.02.2019 auch der Pauschale mit der Pauschal_ID 168 zugeordnet werden, da ich über myPauschal ja immer die erste Pauschale ( Pauschal_ID) des geöffneten Zeitintervalls nehme.
lg
Jonas
-
du erstellst eine Kondition und pflückst dir mit first die erste Zuordnung raus. Normal, dass das Programm damit dann aufhört. Es kann nicht mit einer Programmzeile mehrere Zuordnungen machen, es sei denn, du lässt es in einer Schleife machen. ODer du lässt "first" weg, damit priduzierts du dann einen Array mit den IDs, die die Bedingungen erfüllen. Dann musst du das aber noch weiterverarbeiten.
lg
Arsène -
Moin Arsène,
aktuell sieht der Ablauf wie folgt aus:
1. Eintrag wird erstellt
2. Button wird betätigt für die ZuordnungÜber den Button sollen nicht alle Einträge auf einmal zugeordnet werden, sondern nur der frisch erstellte Eintrag. Damit wäre doch keine Schleife von nöten, denn es muss keine mehrfache Zuordnung tätigen, sondern immer nur den ersten Datensatz der das Zeitintervall gesetzt hat mit first(...) holen. Dadurch das ich das manuell, bei jeden Eintrag mache, müsste das first(...) doch sogesehen bei jedem Eintrag "neu vergeben" werden/"reseted" sein oder liege ich mit der Annahme falsch?
lg
Jonas -
Ich denke first() weist immer auf first-in, also auf den ersten Datensatz Deiner Bedingung und ist quasi unveränderlich (außer wenn del), während last() dann den letzten (last-in), also aktuellen Datensatz bezeichnet. Deshalb könnte Dein Code einmal funktionieren und dann nicht wieder.
-
aha! okay danke!
Aber wie kriege ich denn überhaupt den ersten Datzensatz der das Zeitintervall aufgsetzt hat mehrmals angesteuert? Wenn First() sich somit den ja eigentlich "rausgenommen" hat.
-
was meinst du genau mit "Eintrag wird erstellt"?
Du könntest doch wenn du einen EIntrag erfasst, in diesem Feld dein Script unter "nach Änderungen folgendes Script ausführen" hinterlegen.
-
let aa:= (select Tabelle);
aa[Bedinungen hier einfügen].(Feld x := Ergebniss)
Ähnlich geht es auch mit for i in tabelle where Bedingungen do feld:= Ergebnis
-
Das geht aber nur wenn nur die eine Bedingung erfüllt wird! Bei mehreren Ergebnissen must du es eingrenzen zb. Mit First oder last
-
@Arsène stimmt wäre eine gute Idee, werde ich so umsetzen, nur muss der Code der Zuordung prinzipiell funktionieren.
@Michi also ich bin leider noch nicht so geübt in den Schleifen, daher meine Frage: wie muss ich den Code verändern, dass die Zuordnung mehrmals funktioniert?
aktuell mit dem Code passiert genau das selbe wie vorher. Ein Fall mit dem innerhalb des Zeitintervall liegenenden 'Fall-Beginn' wird korrekt zugeordnet, aber ein zweiter wie in der Abbildung zusehen nicht
let me := this;
let myPatID := Pat_X_Prax;
let myF_B := 'Fall-Beginn';
for i in select Pauschalen where Fall.Pat_X_Prax = myPatID and myF_B >= PP_Beginn and myF_B <= PP_Ende do
me.(Pauschalen := i)
end -
ich blicke nicht so wirklich durch,
versuch doch mal da "me" in die Variable einzubauen.
let me := this;
let myPatID := me.text(Pat_X_Prax);
let myF_B := me.'Fall-Beginn';
for i in select Pauschalen where Fall.text('Pat_X_Prax´) = myPatID and myF_B >= 'PP_Beginn'and myF_B <= 'PP_Ende' do
Pauschalen := i.Feldwert oder "text" ..es läuft alle datensätze durch, wo die bedinungen erfüllt sind wird dein gewählter wert von der variable "i" übergeben
-
okay, war leider nicht von Erfolg. Aber dennoch danke für deine Mühen und deine Zeit!
-
Hallo Jonas. Wenn es noch von Interesse für Dich ist, dann hilf den Helfenden dadurch, indem Du noch folgende Angaben machst.
1. Welche Tabellen spielen hier eine Rolle und wie sind sie verknüpft? Es ist ja wahrscheinlich noch eine Tabelle "Fall" im Spiel, oder?.
2. In welcher Tabelle befindet sich der Code? Woher bekommt er seine Daten?
3. Was ist "Pauschalen" für ein Feld (Verknüpfungsfeld - mit welcher Tabelle?, hast Du den Feldnamen geändert?, oder ist es ein Textfeld?)
4. Warum steht im Code "Pauschalen" und in Deiner Tabellenansicht "Pauschalen_ID". Spielt letztere überhaupt eine Rolle?
Für mich sieht es so aus, als ob Du eine Verknüpfung der Tabelle Pauschalen mit sich selbst durchführst (Zeile 4: select Pauschalen... -> Zeile 7: Pauschalen:=).
Das verwirrt mich etwas. Also, es gibt noch Hoffnung. Notfalls ist hier bestimmt auch jemand bereit, sich Deine von Daten geleerte Tabelle sich anzusehen.
Gruß Mirko
-
Moin Mirko,
erstmal vielen Dank für deine Engagement, dass ganze aufzubröseln.
1. die Tabellen: Patienten / Praxis / Fall /Pauschalen
1.1 die Tabellen Patienten und Praxis spielen nur eine Rolle, da aus ihnen der Pat_X_Prax gebildet wird, denn nur Praxis oder Patient führt zu einer nicht eindeutigen Identifizierung der Fälle.2. der Code befindet sich in der Tabelle Fall und erhält die Daten über eine weitere Tabelle Anfangsbericht, welche nur ein neuen Eintrag erstellt und mehr nicht.
3. Pauschalen ist in der Tabelle Fall eine N:1 Verknüpfung zu Pauschalen. und alle Feldnamen sind unverändert.
4. ich bin mir jetzt unsicher welchen Code du meinst, aber die Pauschal_ID in der Tabelle Fall ist nur für die Veranschaulichung, dass die Verknüpfung korrekt ist. ich halte mir die Pauschal_ID immer wie bei SQL als PrimaryKey, daher baue ich mir das als Kontrolle ein. Verknüpft werden soll mehrere Einträge aus Tabelle Fall mit dem einen Eintrag aus Pauschalen, wo die Bedingungen
Fall.Pat_X_Prax = myPatID and myF_B >= PP_Beginn and myF_B <= PP_Ende
übereinstimmen.Ich hoffe, diese Informationen konnte ein bisschen mehr Klarheit in das Ganze bringen.
lg
Jonas -
Hallo Jonas. Ich habe mal, so gut es ging, Deine Tabelle nachgestellt. Pauschalen : Fall = 1:N. Ich verstehe ja nicht, warum Du die Fälle und damit die Verknüpfung nicht aus der Tabelle Pauschalen direkt über die Verknüpfungstabelle erstellst, damit hättest Du keine Nacharbeit, aber was solls. Das wäre Lösung 1 und geht auch als Button.
Wenn in beiden Tabellen (Pauschalen, Fall) das Feld "Pat_X_Prax" vorhanden ist, dann müßte es mit unten stehendem Code 1. einzeln, 2. als Schleife gelingen.
Ich denke dass es an einer Codestelle lag, Zeile 3. Fall.Pat_X_Prax. Fall.Pat_X_Prax existiert erst, wenn eine Verknüpfung vorhanden ist, die Du ja erst anlegen willst. Es gibt auch ein Array wieder und keine Einzelwerte. Damit funktioniert es ab der 2. Verknüpfung nicht mehr. Es müßte dann first(Fall.Pat_X_Prax) heißen und gelingt nur, wie gesagt, wenn mindestens eine Verknüpfung schon besteht. Das ist hackelig, aber Lösung 3. Ich hoffe es hilft Dir etwas weiter. Schönes WE*
for i in select Fall do
let myPatID := i.Pat_X_Prax;
let myPP_B := i.Fall_Beginn;
let pauschalNr := last((select Pauschalen)[Pat_X_Prax = myPatID and myPP_B >= PP_Beginn and myPP_B <= PP_Ende]);
if i.'RG-Status' = 0 then
i.(Pauschalen := pauschalNr)
end
end
*
let me := this;
let myPatID := Pat_X_Prax;
let myPP_B := Fall_Beginn;
let pauschalNr := first((select Pauschalen)[Pat_X_Prax = myPatID and myPP_B >= PP_Beginn and myPP_B <= PP_Ende]);
if 'RG-Status' = 0 then
me.(Pauschalen := pauschalNr)
end
*
Gruß Mirko
-
Moin Mirko,
wow! Fantastisch. Es funktioniert endlich einwandfrei! Ich hab's total übersehen, dass Fall.Pat_X_Prax ein Array zurückgibt und somit die mehrfache Zuordnung nicht klappt. Vielen herzlichen Dank für deine Mühen! Dir auch ein schönes WE!!!
LG
Jonas
Content aside
- vor 3 JahrenZuletzt aktiv
- 16Antworten
- 712Ansichten