Verschachtelte loop-Schleifen - Erstellen & Ergänzen von Einträgen auf unterer Ebene
Hi ihr Lieben,
ich sitze gerade an einer Formel fest und komme nicht wirklich weiter. Kurz zur Erklärung: Ich habe diese Ebenen:
- Prüfungsaufgaben - E1 (Ebene 1)
- Prüfungsaufgaben - E2 (Ebene 2)
- Prüfungsaufgabenleistungen - E1 (was ein Prüfling in dieser Aufgabe an Punkte gemacht hat)
- Prüfungsaufgabenleistungen - E2
(und noch einige weitere Tabellen, die hier aber nicht von Relevanz sind).
Es sollen über einen Buttonclick Einträge/records (Prüfungsaufgabenleistungen - E1) für die Prüflinge erstellt werden und zu diesen Einträgen sollen bei Unteraufgaben in einer Untertabelle weitere Einträge erstellt werden (Prüfungsaufgabenleistungen - E2) mit der passenden Zuweisung zur jeweiligen Kategorie (Prüfungsaufgaben - E2) erstellt werden. Das klappt soweit auch gut.
Nun sollen jedoch auch Untertabelleneinträge ergänzt werden, wenn die Einträge nicht vollständig sind (zB nur 3 von 4), z.B. weil ein User versehentlich Beiträge gelöscht hat oder weil man im Nachhinein noch eine Unteraufgabe zu einer Aufgabe hinzugefügt hat. Das jedoch klappt noch nicht.
Hier mein bisheriger Code:
let tp := this.' Prüfung';
for j in select 'Prüfungsleistungen' where ' Prüfung' = tp do
for l in j.' Prüfung'.'Prüfungsaufgaben' do
if cnt(select 'Prüfungsaufgabenleistungen - E1' where 'Bezug zu Prüfungsaufgaben - E1' = l and 'Bezug zu Prüfungsleistungen' = j) = 0 then
let k := (create 'Prüfungsaufgabenleistungen - E1');
k.('Bezug zu Prüfungsleistungen' := j);
k.('Bezug zu Prüfungsaufgaben - E1' := l);
for kk in select 'Prüfungsaufgaben - E2' where Oberaufgabe = l do
if cnt(select 'Prüfungsaufgabenleistungen - E2' where 'Bezug zur Prüfungsaufgaben - E2 (Unteraufgaben)' = kk and 'Bezug zu Prüfungsaufgabenleistung - E1' = k) = 0 and cnt(select 'Prüfungsaufgaben - E2' where Oberaufgabe = l) > 0 then
let e := (create 'Prüfungsaufgabenleistungen - E2');
e.('Bezug zu Prüfungsaufgabenleistung - E1' := k);
e.('Bezug zur Prüfungsaufgaben - E2 (Unteraufgaben)' := kk)
end
end
else
if cnt(select 'Prüfungsaufgabenleistungen - E2' where 'Bezug zu Prüfungsaufgabenleistung - E1'.'Bezug zu Prüfungsaufgaben - E1' = l) = 0 and cnt(l.Unteraufgaben) > 0 then
for ku in select 'Prüfungsaufgaben - E2' where Oberaufgabe = l do
if cnt(select 'Prüfungsaufgabenleistungen - E2' where 'Bezug zur Prüfungsaufgaben - E2 (Unteraufgaben)' = ku) = 0 and cnt(select 'Prüfungsaufgaben - E2' where Oberaufgabe = l) > 0 then
let f := (create 'Prüfungsaufgabenleistungen - E2');
f.('Bezug zur Prüfungsaufgaben - E2 (Unteraufgaben)' := ku);
f.('Bezug zu Prüfungsaufgabenleistung - E1' := 2);
end end
end
end
end
end
Der Abschnitt nach dem else (Z. 16ff) funktioniert noch nicht und irgendwie kriege ich da die Bezüge nicht richtig hin. Hilfe gerne willkommen!
Beste Grüße
Sebastian
2 Antworten
-
Ich bin ein bisschen weitergekommen, aber noch nicht ganz fertig.
let tp := this.' Prüfung'; for j in select 'Prüfungsleistungen' where ' Prüfung' = tp do for l in j.' Prüfung'.'Prüfungsaufgaben' do if cnt(select 'Prüfungsaufgabenleistungen - E1' where 'Bezug zu Prüfungsaufgaben - E1' = l and 'Bezug zur Prüfungsleistung' = j) = 0 then let k := (create 'Prüfungsaufgabenleistungen - E1'); k.('Bezug zur Prüfungsleistung' := j); k.('Bezug zu Prüfungsaufgaben - E1' := l); for kk in select 'Prüfungsaufgaben - E2' where Oberaufgabe = l do if cnt(select 'Prüfungsaufgabenleistungen - E2' where 'Bezug zur Prüfungsaufgaben - E2 (Unteraufgaben)' = kk and 'Bezug zu Prüfungsaufgabenleistung - E1' = k) = 0 and cnt(select 'Prüfungsaufgaben - E2' where Oberaufgabe = l) > 0 then let e := (create 'Prüfungsaufgabenleistungen - E2'); e.('Bezug zu Prüfungsaufgabenleistung - E1' := k); e.('Bezug zur Prüfungsaufgaben - E2 (Unteraufgaben)' := kk) end end else for ku in select 'Prüfungsaufgaben - E2' where Oberaufgabe = l do if cnt(select 'Prüfungsaufgaben - E2' where Oberaufgabe = l) > 0 and cnt(select 'Prüfungsaufgabenleistungen - E2' where 'Bezug zur Prüfungsaufgaben - E2 (Unteraufgaben)' = ku and 'Bezug zu Prüfungsaufgabenleistung - E1'.'Bezug zur Prüfungsleistung' = j) = 0 then for g in select 'Prüfungsaufgabenleistungen - E1' where j = 'Bezug zur Prüfungsleistung' and cnt('Bezug zu Prüfungsaufgaben - E1'.Unteraufgaben) > 0 do let f := (create 'Prüfungsaufgabenleistungen - E2'); f.('Bezug zur Prüfungsaufgaben - E2 (Unteraufgaben)' := ku); f.('Bezug zu Prüfungsaufgabenleistung - E1' := g); end end end end end end
Ich erhalte doppelte Einträge, sonst ist alles korrekt. Ich glaube ich müsste in Z. 18 (for g) noch weiter einschränken, um dies zu vermeiden, stehe aber auf dem Schlauch, wie das zu bewerkstelligen ist.
Content aside
- Status Answered
- vor 2 JahrenZuletzt aktiv
- 2Antworten
- 64Ansichten
-
1
Folge bereits