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…