Datenfeldeingabe als Auswahlliste aus einer anderen Tabelle
Ich habe eine Tabelle Auftrag (es handelt sich hierbei um Seminare), die mit einer Tabelle Kunde (N:1) und mit einer Tabelle Teilnehmer (1:N) verknüpft ist. Gleichzeitig sind auch die Tabellen Kunde und Teilnehmer verknüpft (1:N). Nun möchte ich beim Anlegen eines neuen Auftrags zuerst den Kunden festlegen und dann den Teilnehmer, wobei zwei Fragestestellungen auftauchen:
1. wie kann ich bei Klick auf die Lupe beim Feld Teilnehmer sicherstellen, dass nur Teilnehmer angezeigt werden, die mit dem zuvor in diesem Auftrag eingegebenen Kunden verknüpft sind? Versucht habe ich in der Tabelle Teilnehmer die Einschränkung
einzugeben. Leider funktioniert das nicht.
2. Beim Anlegen eines neuen Teilnehmers (Klick auf das Plus über den Feld Zeilnehmer im Auftrag) möchte ich, dass in der Teilnehmermaske automatisch der zuvor im Auftrag eingegeben Kunde verknüpft wird. Dazu habe ich auch etwas versucht, das nicht klappt: Bei Anlage eines neuen Datensatzes in der Tabelle Teilnehmer soll folgendes Script ausgeführt werden:
let CurrentAuftrag := record(Auftrag,Nr);
Kunde := CurrentAuftrag.Kunde
Ich denke, die Fragestellung ist recht universell und würde mich über Tipps von Euch freuen.
9 Antworten
-
Hallo, zu 1.: M. E. müsste das so funktionieren, wie du es der Beschreibung nach gemacht hast:
Tabelle 'Teilnehmer' -> Verknüpfung 'Auftrag' -> Optionen: "Einschränkungen" -> a.Kunde = b.Kunde.
Dann sollten in der Tabelle 'Auftrag' bei Klick auf die Verknüpfung 'Teilnehmer' nur die des zuvor ausgewählten Kunden angezeigt werden. Eigentlich ...
Zu 2: Versuch's mal mit folgendem Code unter "Bei neuem Datensatz" in den Optionen der Tabelle 'Teilnehmer':
if Auftrag then
Kunde := Auftrag.Kunde
end
-
Hallo Coytexter, du hast Recht bzgl. 1. .:-) Ich hatte einen anderen Fehler übersehen.
Bei 2. und Deinem Vorschlag gibt er mir die Fehlermeldung: Der Ausdruck liefert mehrfache Ergebnisse zurück: Auftrag.Kunde in Zeile 3 Spalte 3
-
Ergänzende Info: Ich habe einmal getestet ob die if Anweisung 'wahr' ist, wenn ein Auftrag Datenfenster geöffnet ist. Sie gibt leider 'falsch' zurück
-
Hallo zusammen,
ich glaube, mit dem Plus wird es nicht funktionieren (Punkt 2). Ich würde einen Button "Neuen Teilnehmer hinzufügen" anlegen:
---
let me:=this;
let newParticipant:=create Teilnehmer;
newParticipant.Kunde:=me.Kunde;
newParticipant.Auftrag:=me;
popupRecord (newParticipant)---
Leo
-
Hallo ihr beiden, ich war von den in der Ausgangsfrage beschriebenen Verknüpfungen ausgegangen:
Auftrag -> N:1 <- Kunde
Auftrag -> 1:N <- Teilnehmer
Kunde -> 1:N <- TeilnehmerWenn man nun in der Tabelle 'Auftrag' auf das Plus-Zeichen der Verknüpfung zu 'Teilnehmer' klickt, wird durch den o. g. Trigger auch der zuvor ausgewählte 'Kunde' übernommen (siehe Screenshot). Man muss also nur noch den Namen des neuen Teilnehmers eintragen.
Allerdings irritiert mich die Fehlermeldung von wegen "mehrfache Ergebnisse". Das kann ich mir bei der beschriebenen Konstellation nicht erklären.
Bin ich von falschen Voraussetzungen ausgegangen? Oder mache ich irgendwo einen Denkfehler?
-
Hallo Copytexter, hallo Leo
Copytexter, vielen Dank, dass Du Dir die Mühe machst noch einmal nachzuhaken. Tatsächlich habe ich es oben falsch angegeben. Die Verknüpfungen sind:
Auftrag - Kunde (N:1)
Auftrag - Teilnehmer (N:1) <-- !
Kunde - Teilnehmer (1:N)
Bedeutet das tatsächlich, dass es mit dem Plus nicht funktioniert und ich auf einen Button zurückgreifen muss? Wenn das so ist, habt ihr eine Idee wie ich die Kombination der Auswahl aus existierenden Teilnehmern und der Anlage eines neuen Teilnehmers in der Bedienung geschickt darstelle? Einerseits ein Verknüpfungsfeld mit Plus und Lupe, wobei nur die Lupe funktioniert und zusätzlich einen Button als Ersatz für das Plus scheint mir nicht so bedienerfreundlich.
-
Die Frage ist ja, was genau du brauchst. "Auftrag - Teilnehmer (N:1)" bedeutet halt, dass pro Auftrag nur ein Teilnehmer verknüpft werden kann. Erscheint mir zwar seltsam, aber kann ja sein. Und in dem Fall funktioniert der Trigger mit dem Verweis "Auftrag.Kunde" tatsächlich nicht, weil es in der Verknüpfung 'Auftrag' ja nun mehrere Einträge geben kann. Rein technisch könnte man das lösen, indem man einfach first() oder last() davor setzt:
if Auftrag then
Kunde := last(Auftrag.Kunde)
end
Bei einer Schaltfläche müsste man bei dieser Konstellation die Verknüpfung schon in der Tabelle 'Auftrag' vornehmen. Der Code könnte bspw. so aussehen:
let me:=this;
let newTN := create Teilnehmer;
newTN.Kunde := me.Kunde;
Teilnehmer := newTN;
popupRecord(newTN)
Was die "Bedienerfreundlichkeit" angeht: Leo hat mal einen Hack entwickelt, mit dem man per CSS einzelne Bedienungselemente ausblenden kann. Das ist aber "ein scharfes Schwert", wie Frank Böhmer mal formuliert hat, und sollte nur eingesetzt werden, wenn man genau weiß, was man tut und auch, wie man es ggf. wieder rückgängig macht.
Man könnte die Verknüpfung ganz ausblenden und statt dessen ein Funktionsfeld oder eine Ansicht nehmen, aber dann ist eben auch die Lupe weg. Eine andere Möglichkeit fällt mir jetzt nicht ein.
Wobei ich generell den Verdacht habe, dass dein Datenmodell noch nicht ganz ausgereift ist. Aber das ist nur so ein Gefühl ... ;)
-
Danke Copytexter. Das sind gute Impulse anhand derer ich noch mal über Datenmodell und Darstellung nachdenke.
-
Ich wollte dich keineswegs verunsichern. Es hat mich nur stutzig gemacht, dass nach deinem Datenmodell einem Auftrag (= Seminar) jeweils nur ein Teilnehmer zugeordnet werden kann. Das erscheint erst mal ungewöhnlich. Aber ich kenne die Hintergründe nicht, vielleicht hat das ja seine Richtigkeit.
Content aside
- vor 4 JahrenZuletzt aktiv
- 9Antworten
- 864Ansichten