Tobias Koeper

Feiertagsabfrage USA

Recommended Posts

Hallo zusammen,

 

ich baue momentan ein Call Routing, welches unter anderen Auswerten soll, ob der aktuelle Tag ein Feiertag ist. Das Skript dafür habe ich bereits für deutsche Feiertage. Dieses Skript läuft ohne Probleme.

Das gleiche Skript mit amerikanischen Feiertagen bricht jedoch sofort mit folgender Fehlermeldung im Eventlog ab:

 

Ein Skript wurde wegen eines Skript-Fehler beendet oder nicht ausgeführt.
 Skript: callrouting.vbs (User, XYZ)
Fehler:  Kompilierungsfehler in Microsoft VBScript, Anweisungsende erwartet, 800a0401
 

Der Ruf wird also nicht aufgebaut, sondern direkt abgewiesen.

 

Das betroffene Skript ist wie folgt aufgebaut:

 

Dim Jahr, a, b, c, d, e, f
Dim Neujahr, IndependenceDay, VeteransDay, Christmas, MartinLutherKingDay, PresidentsDay, MemorialDay, LaborDay, ColumbusDay, Thanksgiving
Dim Feiertage(10) As String
Dim Found

    Jahr = Year(Now)
   
        Neujahr = DateSerial(Jahr, 1, 1)
        IndependenceDay = DateSerial(Jahr, 7, 4)
        VeteransDay = DateSerial(Jahr, 11, 11)
        Christmas = DateSerial(Jahr, 12, 25)
    
 
    MartinLutherKingDay = DateSerial(Jahr, 1, (8 - Weekday(DateSerial(Jahr, 1, 1), (2 + 1) Mod 8)) + ((3 - 1) * 7))
    PresidentsDay = DateSerial(Jahr, 2, (8 - Weekday(DateSerial(Jahr, 2, 1), (2 + 1) Mod 8)) + ((3 - 1) * 7))   
    MemorialDay = DateSerial(Jahr, 5, (8 - Weekday(DateSerial(Jahr, 5, 1), (2 + 1) Mod 8)) + ((5 - 1) * 7))   
    LaborDay = DateSerial(Jahr, 9, (8 - Weekday(DateSerial(Jahr, 9, 1), (2 + 1) Mod 8)) + ((1 - 1) * 7))
    ColumbusDay = DateSerial(Jahr, 10, (8 - Weekday(DateSerial(Jahr, 10, 1), (2 + 1) Mod 8)) + ((2 - 1) * 7))
    Thanksgiving = DateSerial(Jahr, 11, (8 - Weekday(DateSerial(Jahr, 11, 1), (5 + 1) Mod 8)) + ((4 - 1) * 7))
   
    
        Feiertage(0) = Neujahr
        Feiertage(1) = MartinLutherKingDay
        Feiertage(2) = PresidentsDay
        Feiertage(3) = MemorialDay
        Feiertage(4) = IndependenceDay
        Feiertage(5) = LaborDay
        Feiertage(6) = ColumbusDay
        Feiertage(7) = VeteransDay
        Feiertage(8) = Thanksgiving
        Feiertage(9) = Christmas
      


    Found = 0

    For a = 0 To 10
            If Feiertage(a) = Left(Now, 10) Then
                Found = 1
            End If
        Next


    If Found = 1 Then UseExit = 1 Else UseExit = 2

 

 

 

Das deutsche Skript sieht folgendermaßen aus (läuft wie gesagt ohne Probleme):

 

Dim Jahr,a, b, c, d, e, f
Dim Ostersonntag, Rosenmontag, Karfreitag, Ostersamstag, Ostermontag, ChrHimmelfahrt, Pfingstsonntag, Pfingstmontag, Fronleichnam
Dim Feiertage(16)
Dim Found

    Jahr = Year(Now)


a = Jahr Mod 19

b= Jahr \ 100
c = (8 * b + 13) \ 25 - 2
d = b - (Jahr \ 400) - 2
e = (19 * (Jahr Mod 19) + ((15 - c + d) Mod 30)) Mod 30
    
    If e = 28 Then
            If a > 10 Then
                e = 27
            End If
        ElseIf e = 29 Then
            e = 28
        End If
f = (d + 6 * e + 2 * (Jahr Mod 4) + 4 * (Jahr Mod 7) + 6) Mod 7

        Ostersonntag = DateSerial(Jahr, 3, e + f + 22)
        Rosenmontag = DateSerial(Jahr, 3, e + f + 22 - 48)
        Ostersamstag = DateSerial(Jahr, 3, e + f + 22 - 1)
        Karfreitag = DateSerial(Jahr, 3, e + f + 22 - 2)
        Ostermontag = DateSerial(Jahr, 3, e + f + 22 + 1)
        ChrHimmelfahrt = DateSerial(Jahr, 3, e + f + 22 + 39)
        Pfingstsonntag = DateSerial(Jahr, 3, e + f + 22 + 49)
        Pfingstmontag = DateSerial(Jahr, 3, e + f + 22 + 50)
        Fronleichnam = DateSerial(Jahr, 3, e + f + 22 + 60)
      


        Feiertage(0) = "01.01." & Jahr
        Feiertage(1) = Rosenmontag
        Feiertage(2) = Karfreitag
        Feiertage(3) = Ostersamstag
        Feiertage(4) = Ostersonntag
        Feiertage(5) = Ostermontag
        Feiertage(6) = "01.05." & Jahr
        Feiertage(7) = ChrHimmelfahrt
        Feiertage(8) = Pfingstsonntag
        Feiertage(9) = Pfingstmontag
        Feiertage(10) = Fronleichnam
        Feiertage(11) = "03.10." & Jahr
        Feiertage(12) = "01.11." & Jahr
        Feiertage(13) = "24.12." & Jahr
        Feiertage(14) = "25.12." & Jahr
        Feiertage(15) = "26.12." & Jahr
        Feiertage(16) = "31.12." & Jahr

    Found = 0

    

    For a = 0 to 16
            If Feiertage(a) = Left(Now, 10) Then
                Found = 1
            End If
        Next


    If Found = 1 then UseExit = 1 Else UseExit = 2

 

 

Kann mir jemand sagen wo hier der Fehler liegt?

 

Vielen Dank!

 

Edited by Tobias Koeper

Share this post


Link to post
Share on other sites

Hallo @Tobias Koeper

 

Habe den gleichen Fehler in meinen Script... Einen Anhaltspunkt hat mir @srom gegeben:

 

Schau mal in die CallRouting.vbs des Users wo das CallRouting aktiv ist...dort wurde wo etwas doppelt deklariert

 

Vielleicht hilft dir das weiter?

 

Grüsse

Share this post


Link to post
Share on other sites

Um auszuschliessen, dass bei der Berechnung der Tage MartinLutherKingDay bis Thanksgiving nicht evtl. irgendwo eine Klammer fehlt, würde ich die alle auskommentieren, und dann schrittweise wieder mit hinein nehmen ins Skript und gucken, ob und wenn ja ab wann der Fehler wieder auftritt.

 

 

Share this post


Link to post
Share on other sites
beychr    4

Kannst Du wenn möglich das korrekte Skript dann hier auch veröffentlichen?

 

Ich bin sicher manch anderer hätte ebenfalls Interesse an dieser Lösung ;)

Share this post


Link to post
Share on other sites

Na klar, das korrekte Skript sieht wie folgt aus:

 

Dim Jahr, a
Dim Neujahr, IndependenceDay, VeteransDay, Christmas, MartinLutherKingDay, PresidentsDay, MemorialDay, LaborDay, ColumbusDay, Thanksgiving
Dim Feiertage(9)
Dim Found

Jahr = Year(Now)
   
Neujahr = DateSerial(Jahr, 1, 1)
IndependenceDay = DateSerial(Jahr, 7, 4)
VeteransDay = DateSerial(Jahr, 11, 11)
Christmas = DateSerial(Jahr, 12, 25)

    
 
    MartinLutherKingDay = DateSerial(Jahr, 1, (8 - Weekday(DateSerial(Jahr, 1, 1), (2 + 1) Mod 8)) + ((3 - 1) * 7))
    PresidentsDay = DateSerial(Jahr, 2, (8 - Weekday(DateSerial(Jahr, 2, 1), (2 + 1) Mod 8)) + ((3 - 1) * 7))   
    MemorialDay = DateSerial(Jahr, 5, (8 - Weekday(DateSerial(Jahr, 5, 1), (2 + 1) Mod 8)) + ((5 - 1) * 7))   
    LaborDay = DateSerial(Jahr, 9, (8 - Weekday(DateSerial(Jahr, 9, 1), (2 + 1) Mod 8)) + ((1 - 1) * 7))
    ColumbusDay = DateSerial(Jahr, 10, (8 - Weekday(DateSerial(Jahr, 10, 1), (2 + 1) Mod 8)) + ((2 - 1) * 7))
    Thanksgiving = DateSerial(Jahr, 11, (8 - Weekday(DateSerial(Jahr, 11, 1), (5 + 1) Mod 8)) + ((4 - 1) * 7))
    
    
        Feiertage(0) = Neujahr
        Feiertage(1) = MartinLutherKingDay
        Feiertage(2) = PresidentsDay
        Feiertage(3) = MemorialDay
        Feiertage(4) = IndependenceDay
        Feiertage(5) = LaborDay
        Feiertage(6) = ColumbusDay
        Feiertage(7) = VeteransDay
        Feiertage(8) = Thanksgiving
        Feiertage(9) = Christmas
       


    Found = 0

    For a = 0 to 9
            If Feiertage(a) = Date Then
                Found = 1
            End If
        Next


    If Found = 1 Then
    UseExit = 1
    Else
    UseExit = 2
    End If

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now