Sie benötigen in Ihren GuiXT Scripten abhängig von einem Datum den Wochentag oder die Kalenderwoche.

Dies können sie grundsätzlich über SAP-RFC-Funktionsbausteine direkt ermitteln lassen. Falls sie jedoch keinen RFC-Zugriff auf Ihr SAP System haben, so könnten die untenstehenden Codings hilfreich sein:

 Kalenderwoche bestimmen

//---------------------------------------------------------------------------------
//   &V[mydate] is a given date in external format like dd.mm.yyyy or mm/dd/yyyy
//---------------------------------------------------------------------------------
// GuiXT uses the following rules for handling dates in computations, or comparisons with < or >:
//
// (1) A date in one of the 6 external date formats is automatically converted to an absolute number 
//     of days, before doing the calculation or comparison  
//
// (2) If one adds or subtracts a number  to/from a date, the result is formatted as a date again, using the 
//     same date format as the given date 

// Get date in format dd.mm.yyyy, to avoid handling all different date formats
Set V[reldate] "&V[mydate]" - "01.01.1000"
Set V[date] "01.01.1000" + "&V[reldate]"

Set V[year] "&V[date](7-10)"

label compute_week

// Get start of 1st week 
Set V[firstweek] "01.01.&V[year]" / 7 decimals=0
Set V[firstweek] "&V[firstweek]"  * 7 

// Get week number
Set V[week] "&V[date]" * 1
Set V[week] "&V[week]" - "&V[firstweek]"
Set V[week] "&V[week]" + 4
Set V[week] "&V[week]" / 7 decimals=0

// Last week of previous year? (can be 52 or 53)
if V[week=0]
    Set V[year] "&V[year]" - 1
    Set V[date] "31.12.&V[year]"
    goto compute_week
endif

// ... or  first week of following year?
if V[week=53]
  Set V[lastweek]  "&V[firstweek]" + 364
  if V[lastweek>28.12.&V[year]]
    Set V[year] "&V[year]" + 1
    Set V[week] 1
 endif
endif

//---------------------------------------------------------------------------------
//   &V[year] &V[week]
//        are now the year and week corresponding to the given date &V[mydate]
//---------------------------------------------------------------------------------

oder als Aufruf über den Funktionsbaustein DATE_GET_WEEK

Wochentag bestimmen

Set V[mydate] "24.12.2012"

// Wochentag 1,2,3,... berechnen
Set V[dt] "&V[mydate]" * 1
Set V[r] &V[dt] / 7 decimals= 0
Set V[r] &V[r] * 7
Set V[r] &V[dt] - &V[r]
Set V[r] &V[r] + 4

// Beginnt mit Freitag
Set V[weekday.1] "Freitag"
Set V[weekday.2] "Samstag"
Set V[weekday.3] "Sonntag"
Set V[weekday.4] "Montag"
Set V[weekday.5] "Dienstag"
Set V[weekday.6] "Mittwoch"
Set V[weekday.7] "Donnerstag"

// Testausgabe
Message "&V[weekday.&V[r]]"

Oder über den Funktionsbaustein DATE_COMPUTE_DAY_ENHANCED

Bestimmen von 1. Tag einer Kalenderwoche

// Testdaten
Set V[week] 1
Set V[year] 2012

Set V[week1] "01.01.&V[year]" / 7 decimals= 0
Set V[week1] "&V[week1]"  * 7 
Set V[diff] "01.01.&V[year]"  * 1 
Set V[diff] &V[diff] - &V[week1]
Set V[week] &V[week] * 7
Set V[diff] &V[week] - &V[diff]
Set V[day] "01.01.&V[year]" +  &V[diff]
Set V[day] "&V[day]" -  7

Message "&V[day]"

Oder über den Funktionsbaustein WEEK_GET_FIRST_DAY

Alle hier aufgeführten Scripte wurden durch Herrn Rodé von der Synactive GmbH erstellt und uns freundlicherweise zur Verfügung gestellt.

Wie bei allen Tipps und Tricks geben wir keine Gewähr.

Empfehlen