0

join je nach Auswahlfeld

Hallo zusammen,

ich habe eine Tabelle 'Dekadenplan' mit Untertabelle 'Dekaden', die verschiedene Datumsfelder beinhaltet.

Die Daten werden in Blöcken (Auswahlfeld = A, B, C) eingeteilt.

Nun möchte ich in einem Formelfeld je nach Block die Dekaden anzeigen lassen. Bisher habe ich ich es geschafft, dass alle Dekaden aus allen 'Blöcken' angezeigt werden:

join(for i in Dekaden do
    record(Dekaden,i).DekadenBeginn + ""
end, "
")

Nun dachte ich, dass

join(for i in Dekaden.number('Blöcke'="A") do
    record(Dekaden,i).DekadenBeginn + ""
end, "
")

 

nur die Daten aus Block A anzeigt, aber leider bleibt das Formelfeld leer.

Hat jemand eien Idee, wo im Script der Fehler liegen könnte?

 

herzlichen Dank schon mal.

Gruß Kruna

4 Antworten

null
    • ⭐ Ninox Partnerin - Kennes Digital
    • Stefanie_K
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Kruna ,

    du brauchst erst einmal die Werte deiner Blöcke. Ich schätze mal, dass A = 1, B = 2 und C = 3 entspricht.
     

    Dann kannst du in dein Formelfeld folgendes eintragen:

    Für alle Dekaden aus Block A:

    let quell := (select Dekaden where 'Blöcke' = 1);
    join(for i in quell do
          i.DekadenBeginn + ""
    end, "
    ")

    Für alle Dekaden aus Block B:

    let quell := (select Dekaden where 'Blöcke' = 2);
    join(for i in quell do
       i.DekadenBeginn + ""
    end, "
    ")

    Für alle Dekaden aus Block C:

    let quell := (select Dekaden where 'Blöcke' = 3);
    join(for i in quell do
       i.DekadenBeginn + ""
    end, "
    ")
      • Kruna
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Stefanie Kennes guten Morgen,

      vielen Dank für Deine Hilfe und prima, Dein Code funktioniert genau wie beschrieben, nur leider merke ich gerade, dass ich mich nicht richtig ausgedrückt habe. 🙈

      Denn nun fällt mir auf, dass ich nicht erwähnt hatte, dass die Haupttabelle 'Dekadenplan'  pro Datensatz das Jahr beinhaltet, dh. Datensatz 1 = Jahr 2021 usw., dh. je nach Auswahl (DMAF = select 'Dekadenplan'), sollten nur die Dekaden aus dem jeweiligen Block des jeweiligen Jahres angezeigt werden. Weißt Du, wie man das hinbekommt?

      Ich hatte es mit

      let me := this

      versucht, wusste dann aber nicht wo ich das 'me' unterbringen sollte, falls das überhaupt der richtige Ansatz ist.

      Zum besseren Verständnis, habe ich eine test_db beigefügt. 🙂

       

      Gruß

      Kruna

      • ⭐ Ninox Partnerin - Kennes Digital
      • Stefanie_K
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Kruna 
       

      Hier der aktualisierte Code:

      let my := this;
      join(for i in numbers(my.'Dekadenpläne') do
          let xDP := first(select 'Dekadenpläne' where Nr = i);
          let xJahr := year(xDP.Datum);
          let xD := (select Dekaden where 'Blöcke' = 1 and year(DekadenBeginn) = xJahr);
          join(for i in xD do
              i.DekadenBeginn + ""
          end, "
      ")
      end, "
      ")

      Die Zahl hinter "Blöcke" musst du dann entsprechend wieder ersetzen mit 2 für B und 3 für C.

      Du hast leider die Dekadenpläne nicht chronologisch angelegt, sodass das Jahr 2021 nun der Datensatznr. 2 entspricht und das Jahr 2022 der Datensatznr. 1. 

       

      Das führt leider dazu, dass die Daten in dem Formelfeld in der falschen Reihenfolge angezeigt werden, weil der erste Teil der Schleife "for in in numbers(my.'Dekadenpläne') do" dein dynamisches Mehrfachauswahlfeld in der Reihenfolge der Datensatznummern durchläuft. So schreibt er erst die Werte aus 2022 (Datensatznr. 1), dann 2021 (Datensatznr. 2) und dann 2023 (Datensatznr. 3) usw. auf. 

      Ich habe es mit "order by" versucht, war allerdings erfolglos. Da müsstest du noch ein bisschen tüfteln oder jemand anderes hier weiß Rat.

      • Kruna
      • vor 2 Jahren
      • Gemeldet - anzeigen

      HAllo Stefanie Kennes ,

      ich weiß leider nicht, warum Dein Post hier nicht sichtbar ist, aber

       

      let my := this; join(for i in numbers(my.'Dekadenpläne') do     let xDP := first(select 'Dekadenpläne' where Nr = i);     let xJahr := year(xDP.Datum);     let xD := (select Dekaden where 'Blöcke' = 1 and year(DekadenBeginn) = xJahr);     join(for i in xD do         i.DekadenBeginn + ""     end, " ") end, " ")

      war genau richtig. TAUSEND DANK!!👍

       

      Das führt leider dazu, dass die Daten in dem Formelfeld in der falschen Reihenfolge angezeigt werden. Weil der erste Teil der Schleife "for in in numbers(my.'Dekadenpläne') do" dein dynamisches Mehrfachauswahlfeld in der Reihenfolge der Datensatznummern durchläuft. So schreibt er erst die Werte aus 2022 (Datensatznr. 1), dann 2021 (Datensatznr. 2) und dann 2023 (Datensatznr. 3) usw. auf. Ich habe es mit "order by" versucht, war allerdings erfolglos. Da müsstest du noch ein bisschen tüfteln oder jemand anderes hier weiß Rat.

       

      mit (select 'Dekadenpläne') order by Datum beim DMAF hat es auch geklappt.

       

      Eine Problem habe ich noch, welches ich zwar nachvollziehen, aber nicht lösen kann, ist folgende:

      Es ist immer so, dass die erste Dekade 'datumstechnisch' noch zum vorherigen Jahr gehört,

      wie zB Dekade 1 - 30.12.2022, aber eigentlich zum Datensatz 2023 gehört.

      Nun ist es so, dass das im Formefeld auch so angezeigt wird. Hast Du eine Idee, wie man das lösen könnte?

       

      Gruß Kruna