Verschachtelte Schleife
Hallo Zusammen,
ich habe mal wieder einen Knoten im Kopf, den ich im Moment nicht gelöst bekomme:
Ich habe eine Tabelle "Erfassung". Hier werden Dinge wie 'Datum' und 'Kunde' erfasst. In einer Untertabelle "Einsatz" werden verwendete 'Maschinen' und der 'Umfang' erfasst. Dann gibt es eine weitere Untertabelle "Aufteiler" die mit 'Kunde' und einem 'Anteil' in Prozent belegt wird.
Per Button soll nun folgendes passieren - Aus dem aktuellen Datensatz werden neue Datensätze mit den Infos aus dem aktuellen generiert (gleiches Datum). Der neue Kunde kommt aus der "Aufteilung" Untertabelle. Der ursprüngliche Datensatz wird am Schluss gelöscht.
Soweit war die Schleife auch kein Problem. Was ich nicht hinbekomme - dass eine weitere Schleife innerhalb der ersten Schleife die Untertabelle durchläuft, die 'Maschinen' neu hinzufügt und den 'Umfang' mit dem 'Anteil' aus der Untertabelle "Aufteiler" multipliziert.
Im Moment scheitere ich daran, die verschachtelte Schleife überhaupt ans Laufen zu bekommen:
let me := this;
let newKunden := Aufteiler;
let myMaschinen := Einsatz.Maschinen;
for i in newKunden do
let newU := (create Erfassung);
newU.(Datum := i.me.Datum);
newU.(Kunde := i.Kunde);
newU.for i in Einsatz do
let newE := (create Einsatz);
newE.Maschinen:= myMaschinen;
end
end
Ich bekomme in der drittletzten Zeile den Fehler dass der Ausdruck mehrere Ergebnisse liefert - was ja grundsätzlich auch richtig ist?
Besten Dank im Voraus!
Grüße, Andreas
4 Antworten
-
...Update zur Frage
Die verschachtelte Schleife tut an sich, was sie soll.
Die Zuordnung der in der zweiten Schleife erzeugten Datensätze in der Untertabelle 'Einsatz' müssen jetzt noch zu dem in der ersten Schleife erzeugten Datensatz zugeordnet werden.
Kann hier jemand helfen?let me := this; for i in Aufteiler do let newU := (create Erfassung); newU.(Datum := i.me.Datum); newU.(Kunde := i.Kunde); newU.i.( let me := this; let myEinsatz := (select Einsatz where Erfassung = me); for i in select Einsatz where Erfassung = me do let newE := (create Einsatz); newE.(Maschinen := i.Maschinen); newE.(Umfang := i.Umfang) end ) end
Grüße, Andi
-
ich würde unterschiedliche Variablen für die Schleifen nehmen, z.B.:
let me := this; for i in 'verknüpfter Tabelle' do ...; for ii in select Tabelle where 'Verknüpfung' = me do ... end; ...; end
-
Die Untertabelle "Einsatz" beinhaltet ja jeweils auch eine Verknüpfung auf die "Muttertabelle" Erfassung. Du musst also bei der Erstellung eines neuen Datensatzes in Einsatz (create Einsatz) auch die Verknüpfung auf die Tabelle Erfassung mit der ID des jeweils neu erzeugten Eintrages belegen...
newE.(Erfassung := number(newU))
... ich bin mir jetzt nur nicht sicher, ob das mit der number(newU) auf anhieb klappt. Eventuell musst du vor der zweiten schleife - die ich, wie Torsten schon schrieb - mit for ii oder for p laufen lassen würde - erstmal mit
let mynewU := last(select Erfassung).Nr
die ID des neu erstellten Eintrages in Erfassung finden und dann dem jeweils neu erstellten Datensatz in Einsatz mitgeben...
-
Danke euch Beiden. So funktioniert es :)
let me := this; for i in Aufteiler do let newU := (create Erfassung); newU.(Datum := i.me.Datum); newU.(Kunde := i.Kunde); newU.i.( let myEinsatz := (select Einsatz where Erfassung = me); for p in select Einsatz where Erfassung = me do let newE := (create Einsatz); newE.(Maschinen := p.Maschinen); newE.(Umfang := p.Umfang); newE.(Erfassung := number(newU)) end ) end
Content aside
- vor 1 JahrZuletzt aktiv
- 4Antworten
- 97Ansichten
-
3
Folge bereits