Feld aus einem folgenden Datensatz anzeigen
Hallo,
ich habe folgende Situation.
Ich habe eine Tabelle Buchungen und möchte in einem Datensatz den Gast der als nächstes anreist anzeigen lassen.
Ich habe ein Fuktionfeld mit nachfolgendem Skript angelegt was aber nicht funktioniert:
let a := Apartment.Bezeichnung;
let xAbr := Abreise;
let myFlag := false;
let myArr := for i in (select Buchungen where Apartment.Bezeichnung = a) order by Anreise do
if not myFlag and i.Anreise < xAbr then
void
else
if i.Anreise >= xAbr then
myFlag := true and 'Gäste.'
else
i
end
end
end;
first(myArr)
Was ist daran falsch?
9 Antworten
-
Hallo Peter,
bei 'Gäste'. ist etwas abgeschnitten worden? Ich würde versuchen, es ohne Schleifen zu lösen:
---
let my:=this;
let myNextArrival:=min(select Buchungen where Apartment=my.Apartemt and Anreise>my.Abreise).Anreise;
first(select Buchungen where Anreise=myNextArrival and Apartment=my.Apartemt).'Gäste'.Name
---
Du muss abe nachschauen, was du genau bei Gästen schreiben solltest.
Leo
-
Hallo Leonid,
vielen Dank für den Vorschlag.
Im Prinzip ist es mir klar aber es wird trotzdem nichts angezeigt. Anbei mein angepasstes Skript:
---
let my := this;
let myNextArrival := min(select Buchungen where 'Apartment.' = my.Apartment and Anreise >= my.Abreise and not storniert).Anreise;
first(select Buchungen where Anreise = myNextArrival and 'Apartment.' = my.'Apartment.' and not storniert).'Gäste.'Ich habe noch die Abfrage nach storniert ergänzt. Felder mit einem Punkt nach der Bezeichnen sind brechnete Felder.
Ich glaube ich habe den Thread in der falschen Rubrik gepostet.
-
let my := this;
let myNextArrival := first((select Buchungen where Apartment = my.Apartment and Anreise >= my.Abreise) order by Anreise).Anreise;
first(select Buchungen where Anreise = myNextArrival and Apartment = my.Apartment).'Gäste'.Name -
Beziehungsweise mit der Ergänzung um 'Stoniert':
let my := this;
let myNextArrival := first((select Buchungen where not Storniert and Apartment = my.Apartment and Anreise >= my.Abreise) order by Anreise).Anreise;
first(select Buchungen where Anreise = myNextArrival and Apartment = my.Apartment).'Gäste'.Name
-
Das mit dem 'Gäste.' in deinem Code verstehe ich übrigens auch nicht.
-
Vieln Dank so funktioniert es:
---
let my := this;
let myNextArrival := first((select Buchungen where not 'storniert.' and 'Apartment.' = my.'Apartment.' and Anreise >= my.Abreise) order by Anreise).Anreise;
first(select Buchungen where Anreise = myNextArrival and 'Apartment.' = my.'Apartment.').'Gäste.''Gäste.' ist ein Funktionsfeld und listet die Namen der Gäste auf die in der Untertrabelle eingegeben sind.
-
order by mach hier keinen Sinn.
-
komisch. wenn ich order by entferne funktioniert es aber nicht mehr
-
Ok, ich sehe in meiner Formel einen kleinen Fehler:
---
et my:=this;
let myNextArrival:=min(select Buchungen where not 'storniert.' and 'Apartment.'=my.'Apartemt.' and Anreise>=my.Abreise.Anreise);
first(select Buchungen where not 'storniert.' and Anreise=myNextArrival and 'Apartment.'=my.'Apartemt.').'Gäste.'
---
order by macht dann bei der uhrsprünglichen Formel doch Sinn, wobei ich es in meiner Formel nicht brauche.
gefahr bei first() in Kombination mit order bei () ist es: wenn zufällig zwei Datensätze mit IDs 99 und 100 in der Reihe sind, wird der Datensat mit der Id-100 als first ausgewählt.
Leo
Content aside
- vor 5 JahrenZuletzt aktiv
- 9Antworten
- 1665Ansichten