Ältesten Datensatz heraussuchen
Hi, ich versuche in einer verschachtelten schleife immer die ältesten Datensätze zuerst abzuarbeiten. Hat einer eine Idee, wie ich dies umsetzen könnte? Ich hab folgenden Ansatz ausprobiert:
let ABC := this;
let newa := (create Bestellung);
newa.(Rahmenvertrag := ABC);
newa.(Unternehmen := ABC.'Unternehmen.');
let pos := (select 'Rahmenvertrag Positionen' where Rahmenvertrag = ABC);
let vAnzahl := 0;
for j in pos do
while j.'Bestellen/Abrufen Menge' > 0 do
let oldestRecord := null;
let oldestDate := null;
for i in j.'Liefertermine Rahmenvertrag,' do
if oldestRecord == null or i.Datum < oldestDate then
oldestRecord := i;
oldestDate := i.Datum;
end
end;
if vAnzahl = 0 and oldestRecord != null then
let newd := (create Bestellpositionen);
newd.(Bestellung := newa);
newd.(Artikel := oldestRecord.'Rahmenvertrag Positionen'.'Artikel,,');
newd.(Menge := j.'Bestellen/Abrufen Menge');
newd.(Preis := oldestRecord.Preis);
vAnzahl := 1;
end;
if oldestRecord != null then
if oldestRecord.Verbleibend > 0 or oldestRecord.Neu = true then
if j.'Bestellen/Abrufen Menge' <= oldestRecord.Menge then
oldestRecord.('Abgerufen/Bestellt' := oldestRecord.'Abgerufen/Bestellt' + j.'Bestellen/Abrufen Menge');
oldestRecord.(Verbleibend := oldestRecord.Menge - oldestRecord.'Abgerufen/Bestellt');
j.('Bestellen/Abrufen Menge' := 0);
else
oldestRecord.('Abgerufen/Bestellt' := oldestRecord.Menge);
j.('Bestellen/Abrufen Menge' := j.'Bestellen/Abrufen Menge' - oldestRecord.'Abgerufen/Bestellt');
oldestRecord.(Verbleibend := 0);
oldestRecord.(Neu := false);
end;
if oldestRecord.'Abgerufen/Bestellt' >= oldestRecord.Menge then
oldestRecord.(Status := 2);
end;
end;
end;
end;
vAnzahl := 0;
end;
Leider funktioniert die Zuweisung mit oldestRecord nicht: newd.(Artikel := oldestRecord.'Rahmenvertrag Positionen'.'Artikel,,');
In der Tabelle j.'Liefertermine Rahmenvertrag,' will ich die ältesten Datensätze zuerst abarbeiten.
5 Antworten
-
Hab auch schon versucht die Tabelle zu sortieren:
let ABC := this;
let newa := (create Bestellung);
newa.(Rahmenvertrag := ABC);
newa.(Unternehmen := ABC.'Unternehmen.');
let pos := (select 'Rahmenvertrag Positionen' where Rahmenvertrag = ABC);
let vAnzahl := 0;
for j in pos do
while j.'Bestellen/Abrufen Menge' > 0 do
let sort := (j.'Liefertermine Rahmenvertrag,' order by number(j.'Liefertermine Rahmenvertrag,'.Datum)*-1);
for i in sort do
if vAnzahl = 0 then
let newd := (create Bestellpositionen);
newd.(Bestellung := newa);
newd.(Artikel := i.'Rahmenvertrag Positionen'.'Artikel,,');
newd.(Menge := j.'Bestellen/Abrufen Menge');
newd.(Preis := i.Preis);
vAnzahl := 1
end;
if i.Verbleibend > 0 or i.Neu = true then
if j.'Bestellen/Abrufen Menge' <= i.Menge then
i.('Abgerufen/Bestellt' := i.'Abgerufen/Bestellt' + j.'Bestellen/Abrufen Menge');
i.(Verbleibend := i.Menge - i.'Abgerufen/Bestellt');
j.('Bestellen/Abrufen Menge' := 0)
else
i.('Abgerufen/Bestellt' := i.Menge);
j.('Bestellen/Abrufen Menge' := j.'Bestellen/Abrufen Menge' - i.'Abgerufen/Bestellt');
i.(Verbleibend := 0);
i.(Neu := false)
end;
if i.'Abgerufen/Bestellt' >= i.Menge then
i.(Status := 2)
end
end
end;
vAnzahl := 0
endend
Funktioniert aber leider auch nicht -
Die kleinste Datensatz-ID (Nr) ist ja immer der älteste Eintrag... d.H. wenn Du mal in ein Formelfeld nur:
(select 'Rahmenvertrag Positionen' where Rahmenvertrag = ABC)
eingibst, müsste Ninox dir ja eigentlich schon die richtige Sortierung rausschmeissen... zur Not kannst du das noch durch "order by Nr" ergänzen...
evtl. würde
let pos := ((select 'Rahmenvertrag Positionen' where Rahmenvertrag = ABC) order by Nr);
oder zur Not
let pos := concat(((select 'Rahmenvertrag Positionen' where Rahmenvertrag = ABC) order by Nr).Nr);
schon dein "pos" in die richtige Reihenfolge zu bringen....
-
Hallo, da "Nr" intern kein Wert vom Typ Zahl ist, sollte man number() nutzen, wenn man nach der Record-Nummer sortieren will. Und mit rsort() ließe sich das entstehende Array auch gleich absteigend sortieren:
let Pos := rsort((select 'Rahmenvertrag Positionen' where Rahmenvertrag = ABC) order by DATUM);
Content aside
- Status Answered
- vor 1 JahrZuletzt aktiv
- 5Antworten
- 36Ansichten
-
3
Folge bereits