0

Auswahl Verknüpfungstabelle Filtern nach Wert in Mehrfachauswahl

Hallo zusammen

Ich habe ein Problem. Für unsere Jugendfachstelle erstelle ich eine Datenbank, welche dabei helfen soll Ferienjobs von Privatpersonen an Jugendliche zu vermitteln.

Die Privatpersonen melden mir ihre Arbeiten. Ich trag diese Arbeiten in einer Tabelle 'Arbeiten' ein. In dieser Tabelle gibt es eine Mehrfachauswahl, in welcher ich die möglichen Einsatztage anwählen kann.

In einer anderen Tabelle 'Arbeitnehmende' trage ich die Jugendlichen ein. Dort ist auch eine Mehrfachauswahl, welche analog zu der der 'Arbeiten'-Tabelle ist und die möglichen Einsatztage eingetragen werden.

Nun habe ich eine Tabelle 'Vermittlungen', in welcher die 'Arbeiten' und die  'Arbeitnehmenden' verknüpft werden. Ich wähle zuerst die 'Arbeit' aus und möchte dann in der Auswahl der 'Arbeitnehmenden' nur die sehen, welche an den möglichen Einsatztagen des verknüpften 'Arbeiten'-Datensatzes zur Verfügung stehen.

Ich denke ich muss dies mit einer Funktion im Feld Einschränkungen machen, aber habe keine Ahnung wie.

Könnt ihr mir helfen?

Danke und liebe Grüsse

Simon

7 Antworten

null
    • john_eans
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo,

    bei Einschränkungen kannst du mit a. und b. die beiden "Seiten" der Verknüpfung wählen.
    Wenn dein Mehrfachauswahlfeld "Einsatztage" lautet, dann bei Einschränkungen 

    concat(numbers(a.Arbeiten.Einsatztage)) = concat(numbers(b.Einsatztage))
    

    eintragen.

    Aber Achtung! Das funktioniert jetzt nur, wenn bei 'Arbeiten' und 'Arbeitnehmenden' genau die gleichen Tage ausgewählt sind. Wenn bei 'Arbeiten' z.B. Mo und Fr ausgewählt ist, wird ein Arbeitnehmender mit Mo und Di nicht angezeigt.

    In einem Funktionsfeld könnte man jetzt mit Schleifen arbeiten, aber das funktioniert m.E. im Einschränkungen nicht.

    Ich geh davon aus, dass früher oder später einer von den Pros vorbei schaut, die werden eine "vollständige" Lösung haben ;-)

    VG

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi Simon. Sicher mußt Du noch Anpassungen der Namen im Script vornehmen, dann kannst Du es ja mal versuchen. Gruß Mirko

    let filterArray := for i in a.Arbeiten.chosen(mfafArbeiten) do
    if contains(concat(chosen(b.mfafArbeitnehmende)), i) then 1
    end
    end;
    cnt(filterArray) > 0
      • Kinder- und Jugendfachstelle Zollikofen
      • Simon_Fluckiger
      • vor 2 Jahren
      • Gemeldet - anzeigen

      MZ Hallo Mirko. Vielen Dank. Hat geklappt! LG  Simon

      • mirko3
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Simon Flückiger Hallo Simon. Wenn Dich die Vorteile von Leos Script überzeugt haben, dann streiche dort noch die 4 oder 5 Klammer - die ist zu viel.

    • Leonid_Semik
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Zusammen,
    aus Erfahrung sind die loops in den Einschränkungen nicht besonders schnell und bei größeren Tabellen kommt es oft zu Verzögerungen. Ich würde es so lösen

    cnt(array(numbers(a.Arbeiten.Einsatztage)),numbers(b.Einsatztage)))>cnt(unique(numbers(a.Arbeiten.Einsatztage),numbers(b.Einsatztage)))
    

    Leo

      • mirko3
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Leonid Semik Danke Leo. Bessere Laufzeit ist immer gut. Für das Verständnis der Logik Deines Scripts habe ich einige Zeit gebraucht. Schon echt genial. Mirko

      • john_eans
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Leonid Semik Sehr cool! Diese Herangehensweise hilft mir bei vielen anderen Sachen weiter!