0

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

null
    • mirko3
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

    • mirko3
    • vor 4 Jahren
    • Gemeldet - anzeigen

    @Torsten. Okay. Zwei mögliche Schreibweisen. Danke, daß Du mich darauf hingewiesen hast. Dann ist wohl die untere meine Lieblingsform;-). Lg, Mirko

    • Nikotomato
    • vor 3 Jahren
    • Gemeldet - anzeigen

    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.