Schleifen erstellt Mehrfacheinträge
Mit diesem Code erstelle ich eine neue Abrechnung und gleichzeitig möchte ich die für dieses Jahr relevanten Mieter in einer Tabelle Nuzungen erstellen. Als Abfrage dienen mir die Felder MVBeginJahr und MVEndeJahr. Leider werden mehrfache Nutzungen je Mieter erstellt. Wie kann ich das abstellen?
Hier ein Auszug des derzeitigen Codes.
let myID := Nr;
let myJAHR := max(Betriebskostenabrechnung.Jahr) + 1;
let myABR := (create Betriebskostenabrechnung);
myABR.(Abrechnungseinheit := myID);
myABR.(Jahr := myJAHR);
myABR.(Abrechnungsbeginn := date(Jahr, 1, 1));
myABR.(Abrechnungsende := date(Jahr, 12, 31));
for n in (select Mietermanagement)[MVBeginJahr < myJAHR and MVEndeJahr > myJAHR or MVBeginJahr < myJAHR and MVEndeJahr = null] do
let myNutz := (create Nutzungen);
myNutz.(Nutzungsbeginn := n.date(myJAHR, 1, 1));
myNutz.(Nutzungsende := n.date(myJAHR, 12, 31));
for m in (select Mietermanagement)[MVBeginJahr < myJAHR and MVEndeJahr = myJAHR] do
let myNutz := (create Nutzungen);
myNutz.(Nutzungsbeginn := m.date(myJAHR, 1, 1));
myNutz.(Nutzungsende := m.date(MVEnde));
for k in (select Mietermanagement)[MVBeginJahr = myJAHR and MVEndeJahr > myJAHR] do
let myNutz := (create Nutzungen);
myNutz.(Nutzungsbeginn := k.date(MVBeginn));
myNutz.(Nutzungsende := k.date(myJAHR, 12, 31));
end
end
end
4 Antworten
-
Hallo. Vielleicht helfen Dir meine bescheidenen Ideen, oder Dein Problem ist schon gelöst. Ich habe mal alles in eine Schleife gepackt. Es müsste dann ab Zeile 8 Deines Codes eingesetzt werden. Ist natürlich ungetestet, da mir ja Dein Datenmodell fehlt. Im Übrigen sind nur Deine create Anweisungen ungenau, so legst jeweils einen neuen Datensatz an, einen mit dem einen Datum und einen mit dem anderen.
myNutz.(
FELD1:=Inhalt1;
FELD2:=Inhalt2
) wäre korrekt.
*
let myNutz := (create Nutzungen);
for i in (select Mietermanagement) do
if i.MVBeginJahr < myJAHR and i.MVEndeJahr > myJAHR or i.MVBeginJahr < myJAHR and i.MVEndeJahr = null
then
myNutz.(
Nutzungsbeginn := i.date(myJAHR, 1, 1);
Nutzungsende := i.date(myJAHR, 12, 31)
)
else
if i.MVBeginJahr < myJAHR and i.MVEndeJahr = myJAHR
then
myNutz.(
Nutzungsbeginn := i.date(myJAHR, 1, 1);
Nutzungsende := i.date(MVEnde)
)
else
if i.MVBeginJahr = myJAHR and i.MVEndeJahr > myJAHR
then
myNutz.(
Nutzungsbeginn := i.date(MVBeginn);
Nutzungsende := i.date(myJAHR, 12, 31)
)
end
end
end
end
*
Gruß. Mirko
-
Hallo Mirko,
losgelöst vom Thread-Thema:
let myNew := (create Tabelle);
myNew.(Feld1 := Inhalt1);
myNew.(Feld2 := Inhalt2);
bewirkt das gleiche wie
let myNew := (create Tabelle);
myNew.(
Feld1 := Inhalt1;
Feld2 := Inhalt2
)
lg, Torsten
-
@Torsten. Okay. Zwei mögliche Schreibweisen. Danke, daß Du mich darauf hingewiesen hast. Dann ist wohl die untere meine Lieblingsform;-). Lg, Mirko
-
Lieben Dank, Mirko, für die Rückmeldung. Habe das Problem vorerst so gelöst, dass die Schleifen hintereinander abgearbeitet werden, um die erforderlichen Ergebnisse zu erhalten. LG, Frank ... und ein frohes Weihnachtsfest.
Content aside
- vor 3 JahrenZuletzt aktiv
- 4Antworten
- 464Ansichten