1

Feiertagsermittlung nach Bundesländern

Ich wollte ein Script für ein FX-Feld zur Verfügung stellen, welches die Feiertage der einzelnen Bundesländer ermittelt. Voraussetzung hierfür ist, dass eine Tabelle mit Mitarbeiterdaten zur Verfügung steht, in der ein Auswahlfeld mit dem Bundesland des Mitarbeiters enthalten ist. Ich habe mich für die Grundstruktur der Ermittlung eines Scriptes aus dem Forum bedient, das aber nun auf alle Bundesländer erweitert. Vielleicht ganz hilfreich für den ein oder anderen: 

"Code Feiertage Deutschland";
function ostern(thisDate : date) do
    let jahr := year(thisDate);
    let a := jahr % 19;
    let b := floor(jahr / 100);
    let c := jahr % 100;
    let d := floor(b / 4);
    let e := b % 4;
    let f := floor((b + 8) / 25);
    let g := floor((b - f + 1) / 3);
    let h := (19 * a + b - d - g + 15) % 30;
    let i := floor(c / 4);
    let k := c % 4;
    let l := (32 + 2 * e + 2 * i - h - k) % 7;
    let m := floor((a + 11 * h + 22 * l) / 451);
    let n := floor((h + l - 7 * m + 114) / 31);
    let p := (h + l - 7 * m + 114) % 31;
    date(jahr, n, p + 1)
end;
let viewDat := date(year(Datum), month(Datum), day(Datum));
let osterSoDat := format(ostern(viewDat), "DD.MM.");
let osterMoDat := format(ostern(viewDat) + 1, "DD.MM.");
let karfreitagDat := format(ostern(viewDat) - 2, "DD.MM.");
let chrHimmelfDat := format(ostern(viewDat) + 39, "DD.MM.");
let pfingstSoDat := format(ostern(viewDat) + 49, "DD.MM.");
let pfingstMoDat := format(ostern(viewDat) + 50, "DD.MM.");
let fronleichnamDat := format(ostern(viewDat) + 60, "DD.MM.");
let reformationstagDat := "31.10.";
let allerheiligenDat := "01.11.";
"// Bundesweite Feiertage";
let feiertage := "03.10.,25.12.,26.12.,01.01.,01.05.," + osterSoDat + "," + osterMoDat + "," +
    karfreitagDat +
    "," +
    chrHimmelfDat +
    "," +
    pfingstSoDat +
    "," +
    pfingstMoDat;
if mitarbeiter().number(Bundesland) = 1 then
    "// Feiertagskalender für Hessen";
    feiertage := feiertage + "," + fronleichnamDat
else
    if mitarbeiter().number(Bundesland) = 3 then
        "// Feiertagskalender für Nordrhein-Westfalen";
        feiertage := feiertage + "," + fronleichnamDat + "," + allerheiligenDat
    else
        if mitarbeiter().number(Bundesland) = 2 then
            "// Feiertagskalender für Hamburg";
            feiertage := feiertage + "," + reformationstagDat
        else
            if mitarbeiter().number(Bundesland) = 4 then
                "// Feiertagskalender für Bayern";
                feiertage := feiertage + "," + fronleichnamDat + "," + allerheiligenDat + ",06.01.,15.08."
            else
                if mitarbeiter().number(Bundesland) = 7 then
                    "// Feiertagskalender für Baden-Württemberg";
                    feiertage := feiertage + "," + fronleichnamDat + "," + allerheiligenDat + ",06.01."
                else
                    if mitarbeiter().number(Bundesland) = 6 then
                        "// Feiertagskalender für Berlin";
                        feiertage := feiertage + ",08.03."
                    else
                        if mitarbeiter().number(Bundesland) = 15 then
                            "// Feiertagskalender für Brandenburg";
                            feiertage := feiertage + "," + reformationstagDat
                        else
                            if mitarbeiter().number(Bundesland) = 5 then
                                "// Feiertagskalender für Bremen";
                                feiertage := feiertage + "," + reformationstagDat
                            else
                                if mitarbeiter().number(Bundesland) = 10 then
                                    "// Feiertagskalender für Mecklenburg-Vorpommern";
                                    feiertage := feiertage + "," + reformationstagDat
                                else
                                    if mitarbeiter().number(Bundesland) = 9 then
                                        "// Feiertagskalender für Niedersachsen";
                                        feiertage := feiertage + "," + reformationstagDat
                                    else
                                        if mitarbeiter().number(Bundesland) = 16 then
                                            "// Feiertagskalender für Rheinland-Pfalz";
                                            feiertage := feiertage + "," + fronleichnamDat + "," + allerheiligenDat
                                        else
                                            if mitarbeiter().number(Bundesland) = 8 then
                                                "// Feiertagskalender für Saarland";
                                                feiertage := feiertage + "," + fronleichnamDat + "," + allerheiligenDat + ",15.08."
                                            else
                                                if mitarbeiter().number(Bundesland) = 11 then
                                                    "// Feiertagskalender für Sachsen";
                                                    feiertage := feiertage + "," + reformationstagDat + ",22.11."
                                                else
                                                    if mitarbeiter().number(Bundesland) = 13 then
                                                        "// Feiertagskalender für Sachsen-Anhalt";
                                                        feiertage := feiertage + "," + reformationstagDat + ",06.01."
                                                    else
                                                        if mitarbeiter().number(Bundesland) = 14 then
                                                            "// Feiertagskalender für Schleswig-Holstein";
                                                            feiertage := feiertage + "," + reformationstagDat
                                                        else
                                                            if mitarbeiter().number(Bundesland) = 12 then
                                                                "// Feiertagskalender für Thüringen";
                                                                feiertage := feiertage + "," + reformationstagDat
                                                            else
                                                                "// Falls das Bundesland nicht definiert ist, keine Feiertage berechnen";
                                                                false
                                                            end
                                                        end
                                                    end
                                                end
                                            end
                                        end
                                    end
                                end
                            end
                        end
                    end
                end
            end
        end
    end
end;
let istFeiertag := contains(feiertage, format(Datum, "DD.MM."));
if istFeiertag then
    styled(text(istFeiertag), "#fcdad4", "")
else
    styled(text(istFeiertag), "white", "")
end

Antwort

null