Abwesenheiten im Formelfeld anzeigen
Moinsen,
ich möchte gerne die Abwesenheiten der Mitarbeiter bei unserer Kolonnenplanung in einem Formelfeld darstellen.
let datum := Datum;
let output := "";
for m in select Mitarbeiter do
for a in m.Abwesenheitsplaner do
if datum >= a.'Erster Tag' and datum <= a.'Letzter Tag' then
output := output + m.Vorname + " " + m.Name + ": " + text(a.Art) + ", "
end
end
end;
output
Mit dem Code werden die Mitarbeiter schon richtig angezeigt. Jetzt möchte ich gerne die Abwesenheiten aber gruppiert angezeigt bekommen je nach Abwesenheitsart. Da bekomme ich irgendwie keinen Namen rein:
let datum := Datum;
let mitarbeiter := (select Mitarbeiter);
let artenListe := unique((select Abwesenheitsplaner).Art);
let output := "";
for art in artenListe do
let namen := [];
for m in mitarbeiter do
let abw := m.Abwesenheitsplaner[datum >= 'Erster Tag' and datum <= 'Letzter Tag' and Art = art];
if cnt(abw) > 0 then
namen := namen + "- " + m.Vorname + " " + m.Name
end
end;
if cnt(namen) > 0 then
output := output + art +
":
" +
join(namen, "
")
end
end;
output
Die Abwesenheiten werden einzeln, also unique, angezeigt, aber es tauchen keine Namen auf?
Hat da jemand einen Tip?
Gruß Mirko
8 Antworten
-
Man könnte es so
let datum := Datum; let my := (select Mitarbeiter).{ name: Name, prename: Vorname, art: Abwesenheitsplaner[datum >= 'Erster Tag' and datum <= 'Letzter Tag'].text(Art) }; let result := for i in my[art != ""] order by text(art) do --- { i.art }: { i.prename } { i.name } --- end; join(result, " ")
oder so
let datum := Datum; let my := (select Mitarbeiter).{ name: Name, prename: Vorname, art: Abwesenheitsplaner[datum >= 'Erster Tag' and datum <= 'Letzter Tag'].text(Art) }; let css := " <style> td {background-color:#e5e6eb;padding:0 .5em} </style>"; html(--- { css } <table>{ for j in my[art != ""] order by text(art) do } <tr><td>{ j.art }</td><td>{ j.prename }</td><td>{ j.name }</td></tr>{ end } </table> ---)
machen. Oder ganz anders.
-
Hallo Mirko,
das funktioniert leider auch nicht, oder ich habe mich vielleicht falsch ausgedrückt.
Ich möchte das die Art nur einmal angezeigt wird, und darunter dann die Mitarbeiter aufgelistet, z.b sind vielleicht drei MA im Urlaub, und zwei in der Berufsschule, dann soll oben nur einmal Berufsschule stehen, und darunter die beiden Mitarbeiter, genauso bei krank usw.
Gruß Mirko
-
Aha. Dann versuche es mal so. Mirko
let datum := Datum; let my := (select Mitarbeiter).{ name: Name, prename: Vorname, art: Abwesenheitsplaner[datum >= 'Erster Tag' and datum <= 'Letzter Tag'].text(Art) }; let uni := unique((select Abwesenheitsplaner).text(Art)); let css := " <style> td {background-color:#e5e6eb;padding:0 .5em} </style>"; html(--- { css } <table>{ for j in uni do } <tr><td>{ j }</td><td>{ join(my[art = j].(text(prename) + " " + text(name)), ", ") }</td></tr>{ end } </table> ---)
let datum := Datum; let my := (select Mitarbeiter).{ name: Name, prename: Vorname, art: Abwesenheitsplaner[datum >= 'Erster Tag' and datum <= 'Letzter Tag'].text(Art) }; let uni := unique((select Abwesenheitsplaner).text(Art)); join(for i in uni do i + ": " + join(my[art = i].(text(prename) + " " + text(name)), ", ") end, " ")
-
Moin Mirko,
das klappt auf jeden Fall schon mal.
Wenn ich jetzt noch nur die Auswahlpunkte angezeigt bekommen kann, die an dem Tag ausgewählt sind, wäre das perfekt.
Wie auf dem Bild zu sehen zeigt er jetzt auch die Auswahlmöglichkeiten an, wo an dem Tag aber keine Abwesenheit vorliegt. Bei Deiner Formel waren auch alle Mitarbeiter, die nicht abwesend waren angezeigt, das habe ich aber geändert bekommen:
let uni := unique((select Abwesenheitsplaner)[Art != null].text(Art));
Gruß Mirko
-
Dann vielleicht so
let datum := Datum; let my := (select Mitarbeiter).{ name: Name, prename: Vorname, art: Abwesenheitsplaner[datum >= 'Erster Tag' and datum <= 'Letzter Tag'].text(Art) }; let uni := unique(my.first(art)); join(for i in uni do i + ": " + join(my[art = i].(text(prename) + " " + text(name)), ", ") end, " ")
let datum := Datum; let my := (select Mitarbeiter).{ name: Name, prename: Vorname, art: Abwesenheitsplaner[datum >= 'Erster Tag' and datum <= 'Letzter Tag'].text(Art) }; let uni := unique(my.first(art)); let css := " <style> td {background-color:#e5e6eb;padding:0 .5em} </style>"; html(--- { css } <table>{ for j in uni do } <tr><td>{ j }</td><td>{ join(my[art = j].(text(prename) + " " + text(name)), ", ") }</td></tr>{ end } </table> ---)
-
Moin Mirko,
das hat super geklappt!
Vielleicht hast Du auch noch eine Idee zu den auswählbaren Mitarbeitern.
Die Kolonnenplanung ist so aufgebaut, dass ich je Tag einen neuen Datensatz anlege. In einer Untertabelle erstelle ich je Kolonne einen neuen Datensatz. In der Untertabelle wähle ich die Mitarbeiter über ein dmulti aus.
Ich möchte jetzt nach erstellen einer Kolonne beim erstellen der nächsten Kolonne die Mitarbeiter, die schon verplant sind nicht mehr angezeigt bekommen, und natürlich auch die nicht, die gar nicht erst anwesend sind weil sie Krank, Urlaub etc haben.
Es soll am Ende so aussehen, wenn alle Kolonnen geplant sind das dmulti in der Untertabelle nichts mehr anzeigt.
Aktuell habe ich das nur mit einem dmulti in der haupttabelle hinbekommen, noch ohne die abwesenheiten zu berücksichtigen, da werden mir aber schon mal alle verplanten nicht mehr angezeigt.
let all := ((select Mitarbeiter) order by Funktion); let kopla := Kolonnenplanung.Mitarbeiter; let verplant := for k in Kolonnenplanung do for m in k.numbers(Mitarbeiter) do record(Mitarbeiter,m).Name end end; let frei := for i in all do if not contains(concat(verplant), i.Name) then record(Mitarbeiter,i) end end; frei
hier mein Versuch in der UT:
let my := this; let all := ((select Mitarbeiter) order by Funktion); let verplant := for k in (select Kolonnenplanung)[Kolonnen2 = my] do for m in k.numbers(Mitarbeiter) do if m != my then record(Mitarbeiter,m).Name end end end; let frei := for i in all do if not contains(concat(verplant), i.Name) then record(Mitarbeiter,i) end end; frei
wie müsste der code aussehen, damit er funktioniert? und evtl .auch die abwesenheiten der MA berücksichtigt.
Gruß
Mirko -
Hallo Mirko,
deswegen nutze ich ja gerade das dmulti, da sich Mitarbeiter ändern. Da die Planung maximal einen Monat rückwirkend angeschaut wird sind Änderungen da nicht so gravierend.
Gruß Mirko
Content aside
- vor 8 TagenZuletzt aktiv
- 8Antworten
- 65Ansichten
-
2
Folge bereits