Jeg har tidligere her skrevet om beregning af helligdage i Klassisk Dynamics C5, men du skal da heller ikke snydes for en NAV funktion der gør det samme. Her sakset ud af en Codeunit-teksteksport så du lige kan se de nødvendige variable – koder du i NAV kan du så selv implementere den. Beklager at vores blog “æder” indrykningerne, så dem må du også lige selv lave…
Algoritmen er i øvrigt at Påskedag er første søndag efter første fuldmåne efter forårsjævndøgn – men NAV compileren forstår det bare ikke rigtigt på den måde 🙂
NAV algoritmen er:
PROCEDURE CalcEastern@1000000008(Year@1000000000 : Integer) : Date;
VAR
a@1000000001 : Integer;
b@1000000002 : Integer;
c@1000000003 : Integer;
d@1000000004 : Integer;
e@1000000005 : Integer;
Day@1000000006 : Integer;
Month@1000000007 : Integer;
BEGIN
a := Year MOD 19;
b := Year MOD 4;
c := Year MOD 7;
d := (24 + 19*a) MOD 30;
e := (5 + 2*b + 4*c + 6*d) MOD 7;
IF (22 + d + e <= 31) AND (22 + d + e >= 1) THEN BEGIN
Day := 22 + d + e;
Month := 3;
END ELSE BEGIN
Day := d + e - 9;
Month := 4;
END;
CASE TRUE OF
(Month = 4) AND (Day = 26): EXIT( DMY2DATE(19,4,Year) );
(Month = 4) AND (Day = 25): EXIT( DMY2DATE(18,4,Year) );
ELSE
EXIT( DMY2DATE(Day,Month,Year) );
END;
END;
|
Ud over ovenstående skal man lige vide hvordan de andre Kirkehelligdage ligger i forhold til Påskedag (det er nemlig den der styrer det). De oplysninger kan du finde i vores tidligere indlæg om algoritmen til Klassisk Dynamics C5 her: Påske og Pinse og Jul står for døren…