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.
