Dateneinträge zuordnen per Schleife
Hallo Zusammen!
ich komme nicht auf meinen Fehler, wieso meine Zuordnung von Dateneinträgen nicht funktioniert.
let myVon := 'Datum von';
let myBis := 'Datum bis';
for n in select Tabelle1 do
let myID := n.ID;
let myData := (select Tabelle1
where ID = myID and PP_Beginn + 120 > myVon and PP_Beginn < myBis and
Gutschriften2 = null);
for i in myData do
let myGutschrift := first(select Gutschriften where 'G-Datum' = today() and myID = ID);
if myGutschrift = null then
let newR := (create Gutschriften);
newR.('G-Datum' := today());
i.(Gutschriften2 := newR);
newR.(alsTrigger := 1)
else
i.(Gutschriften2 := myGutschrift)
end
end
end
Der Code ist bei einem Button als Skript hinterlegt. Das Ziel dieses Skriptes soll die Erstellung eines neuen Dateneintrages in der Tabelle "Gutschriften" sein, falls noch kein Dateneintrag vorliegt, der die Bedingung ('G-Datum' = today() and myID = ID) erfüllt. Falls schon ein Dateneintrag vorliegt, der die Bedingung erfüllt, soll der Eintrag sich mit dem vorliegenden Dateneintrag verknüfen. Somit sollten 26 Einträge in der Tabelle "Gutschriften" entstehen mit denen dann die Einträge aus Tabelle1, wo die Bedingung (ID = myID and PP_Beginn + 120 > myVon and PP_Beginn < myBis) erfüllt ist, verlnüpft werden.
In der Tabelle1 befinden sich 26 Einträge (Stammdaten).
Gutschriften2 ist das Verknüpfungsfeld von Tabelle1 zu "Gutschriften" (Tabelle)
Aktuell erstellt das Skript nur einen Dateneintrag in der Tabelle "Gutschriften" und verknüpft dann alle 1824 Dateneinträge aus der Tabelle1 mit diesem einzigen Dateneintrag (in Tabelle "Gutschriften").
Ich freue mich über jegliche Anregungen oder Tipps! :)
Viele Grüße
Jonas
8 Antworten
-
Hallo , erst mal die Frage - was beinhaltet die ID? Ist das ein eigenes Feld, wo eine ID geschrieben wird oder möchtest Du die Record ID (Nr bzw. _id) ansprechen?
Auf dem ersten Blick könntest Du das in einer Schleife, statt zwei Schleifen machen, da Du bei der ersten Schleife ohne Bedingungen die Tabelle1 ansprichst und dann in einem zweiten Durchgang innerhalb der ersten Schleife die gleiche Tabelle filterst.
Da kannst Du auch direkt in der ersten Schleife deine where Bedingungen angeben (in dem Fall ohne ID Abgleich). Hier ein Versuch:
let myVon := 'Datum von'; let myBis := 'Datum bis'; for n in (select Tabelle1 where PP_Beginn + 120 > myVon and PP_Beginn < myBis and Gutschriften2 = null) do let myID := n.ID; let myGutschrift := first(select Gutschriften where 'G-Datum' = today() and myID = ID); if myGutschrift = null then let newR := (create Gutschriften); newR.('G-Datum' := today()); n.(Gutschriften2 := newR); newR.(alsTrigger := 1) else i.(Gutschriften2 := myGutschrift) end end
Alternativ könntest Du erst noch zählen, wie viele Gutschriften es gibt - weiß aus dem Kopf gerade nicht, ob das mit if myGutschrift = null ohne weiteres funktioniert.
let myVon := 'Datum von'; let myBis := 'Datum bis'; for n in (select Tabelle1 where PP_Beginn + 120 > myVon and PP_Beginn < myBis and Gutschriften2 = null) do let myID := n.ID; let myGutschriftCnt := cnt(select Gutschriften where 'G-Datum' = today() and myID = ID); if myGutschriftCnt = 0 then let myGutschrift := first(select Gutschriften where 'G-Datum' = today() and myID = ID); let newR := (create Gutschriften); newR.('G-Datum' := today()); i.(Gutschriften2 := newR); newR.(alsTrigger := 1) else i.(Gutschriften2 := myGutschrift) end end
Dein Script setzt aber auch voraus, dass die "ID" in Tabelle "Tabelle1" gleich sein muss mit dem Feld "ID" in der Tabelle "Gutschriften" - was in deinem Vorhaben auch Sinn ergeben könnte.
-
let myVon := 'Datum von'; let myBis := 'Datum bis'; for n in select Tabelle1 do let myID := n.ID; let myData := (select Tabelle2 where ID = myID and PP_Beginn + 120 > myVon and PP_Beginn < myBis and Gutschriften2 = null); for i in myData do let myGutschrift := first(select Gutschriften where 'G-Datum' = today() and myID = ID); if myGutschrift = null then let newR := (create Gutschriften); newR.('G-Datum' := today()); i.(Gutschriften2 := newR); newR.(alsTrigger := 1) else i.(Gutschriften2 := myGutschrift) end end end
so, hier sind die Tabellen richtig angegeben :)
Content aside
- Status Answered
- vor 1 JahrZuletzt aktiv
- 8Antworten
- 70Ansichten
-
2
Folge bereits