Aus mehreren verknüpften Tabellen neue Datensätze erstellen

Grundlage (vgl.Bild)
Es bestehen Tabellen mit den folgenden Verknüpfungen:
Mietobjekte 1 → n zu Verträge
Verträge 1 → n zu Vertragskonto und zu Mietzinsen
Meine Fragestellung: Wie muss die Funktion lauten
Für alle 'Verträge', die zu einem Mietobjekt gehören und den 'Status Vertrag' != "gekündigt" haben (es gibt laufend und befristet), soll mit einem Button jeden Monat im verknüpften 'Vertragskonto' ein Datensatz mit den folgenden Inhalten erstellt werden, wobei die entsprechenden Felder in 'Vertragskonto' bestehen .
Datum aus Mietobjekte.Sollstellung → Datum in Vertragskonto.Sollstellung
und
Betrag von Mietzinsen.Nettomietzins where 'Status Mietzins' = "gültig" → Betrag in 'Vertragskonto.Nettomietzins
und
Betrag von Mietzinsen.Heizung → in Vertragskonto mit der folgenden Bedingung
if Mietzins.'Status' = "gültig" then
if Mietzins.'Heizung ap' = 1 then
Vertragskonto.'Heizung a' else
Vertragskonto.'Heizung p'
end
end
und
Betrag von Mietzinsen.Nebenkosten → in Vertragskonto mit der folgenden Bedingung
if Mietzins.'Status' = "gültig" then
if Mietzins.'Heizung ap' = 1 then
Vertragskonto.'Nebenkosten a' else
Vertragskonto.'Nebenkosten p'
end
end
und
Betrag von Mietzinsen.Liftkosten → in Vertragskonto mit der folgenden Bedingung
if Mietzins.'Status' = "gültig" then
if Mietzins.'Liftkosten ap' = 1 then
Vertragskonto.'Liftkosten a' else
Vertragskonto.'Liftkosten p'
end
end
und
Betrag von Mietzinsen.Allgemein → in Vertragskonto mit der folgenden Bedingung
if Mietzins.'Status' = "gültig" then
if Mietzins.'Allgemein ap' = 1 then
Vertragskonto.'Allgemein a' else
Vertragskonto.'Allgemein p'
end
end
Kann man das in einer Funktion machen? Mir raucht der Kopf. Vielen Dank für jede Idee!
1 Antwort
-
Da meine Frage fast eine Woche in der cue steckengeblieben ist, fand ich inzwischen mit ChatGPT die folgende Lösung die funktioniert, möglicherweise nicht super elegant ist.
let myarchiv := (select 'Verträge' where text('Status Vertrag') != "gekündigt");
for vertrag in myarchiv do
let SoDa := 'Datum Sollstellung';
if cnt(select Vertragskonto where Vertrag = vertrag and 'Datum Sollstellung' = SoDa) > 0 then
alert("Für diesen Monat ist die Sollstellung schon erfolgt!")
else
let neMiete := last(vertrag.Mietzinsen.Nettomietzins);
let heizak := if last(vertrag.Mietzinsen.'Heizung ap') = 1 then
last(vertrag.Mietzinsen.Heizung)
end;
let heizpa := if last(vertrag.Mietzinsen.'Heizung ap') = 2 then
last(vertrag.Mietzinsen.Heizung)
end;
let nekoak := if last(vertrag.Mietzinsen.'Nebenkosten ap') = 1 then
last(vertrag.Mietzinsen.Nebenkosten)
end;
let nekopa := if last(vertrag.Mietzinsen.'Nebenkosten ap') = 2 then
last(vertrag.Mietzinsen.Nebenkosten)
end;
let likoak := if last(vertrag.Mietzinsen.'Liftkosten ap') = 1 then
last(vertrag.Mietzinsen.Liftkosten)
end;
let likopa := if last(vertrag.Mietzinsen.'Liftkosten ap') = 2 then
last(vertrag.Mietzinsen.Liftkosten)
end;
let allgak := if last(vertrag.Mietzinsen.'Allgemeine ap') = 1 then
last(vertrag.Mietzinsen.'Allgemeine NK')
end;
let allgpa := if last(vertrag.Mietzinsen.'Allgemeine ap') = 2 then
last(vertrag.Mietzinsen.'Allgemeine NK')
end;
let new := (create Vertragskonto);
new.(Vertrag := vertrag);
new.('Datum Sollstellung' := SoDa);
new.(Nettomiete := neMiete);
new.('Heizung akonto' := heizak);
new.('Heizung pauschal' := heizpa);
new.('Nebenkosten akonto' := nekoak);
new.('Nebenkosten pauschal' := nekopa);
new.('Liftkosten akonto' := likoak);
new.('Liftkosten pauschal' := likopa);
new.('Allgemeine NK akonto' := allgak);
new.('Allgemeine NK pauschal' := allgpa)
end
end;
'Datum Sollstellung' := null
Content aside
- Status Answered
- vor 2 WochenZuletzt aktiv
- 1Antworten
- 34Ansichten
-
1
Folge bereits