Anwendung / Praxis

Arbeiten mit Datumsfunktionen

Beispiele für das Rechnen mit Datumswerten, das Auslesen von bestimmten Tagen oder die Prüfung auf einen gültigen Datumswert.
Dabei wird auch das BO Time verwendet.

Monate zu einem Datum addieren oder subtrahieren (ST-DATECALC.FS)

Beispiel

# ******************************************************************************************************
# Subscript für Datumsberechnung
# ______________________________________________________________________________________________________
# Kunde: STANDARD
# ______________________________________________________________________________________________________
# Dateiname: ST-DATECALC.FS
# ______________________________________________________________________________________________________
# Autor: OPACC Software AG, Luzern - Roman Vonwil
# ______________________________________________________________________________________________________
# Erstellt: 10.10.2012 / rv
# ______________________________________________________________________________________________________
# Funktionen: Anzahl Monate addieren - -> /Calc.Date.AddMonth
# Anzahl Monate subtrahieren -> /Calc.Date.SubMonth
# ______________________________________________________________________________________________________
# Übergabe: «X(Date.Start)» Datum
# «X(Calc.MoveMonth)» Anzahl Monate
# ______________________________________________________________________________________________________
# Rückgabe: «X(Date.NewDate)» Berechnetes Datum
# ______________________________________________________________________________________________________
# Verwendung: Entsprechende Subroutine aufrufen (Parameter vorher setzen)
# ______________________________________________________________________________________________________
#
/Datum
«X(Date.Start=«TODAY\D10»)»
«X(Calc.MoveMonth=11)»
# Datumsberechnung Anzahl Monate hinzufügen
«/Calc.Date.AddMonth»
«X(Date.NewDate)\D10»
# Datumsberechnung Anzahl Monate abziehen
«/Calc.Date.SubMonth»
«X(Date.NewDate)\D10»
/

/Calc.Date.SubMonth
«X(Date.NewDate=)»
«/DateCalc.SetValues»
«/Date.SubMonths»
/

/Calc.Date.AddMonth
«X(Date.NewDate=)»
«/DateCalc.SetValues»
«/Date.AddMonths»
/

/DateCalc.SetValues
«X(Calc.Day =«(«TODAY(D,«X(Date.Start)\D10»)\N»)\N»)»
«X(Calc.Month =«(«TODAY(M,«X(Date.Start)\D10»)\N»)\N»)»
«X(Calc.Year =«(«TODAY(Y,«X(Date.Start)\D10»)\N»)\N»)»
/

/Date.AddMonths
# ______________________________________________________________________________________________________
# Berechnung für Anzahl ganze Jahre
«X(Calc.Divisor=«(«X(Calc.MoveMonth)\N»/12)\N,.00»)»
«nPOS(.,«X(Calc.Divisor)»)»
«X(Calc.RestDiv=«POS(1)»)»
# ______________________________________________________________________________________________________
# Neues Jahr speichern
«X(Calc.Year=«(«X(Calc.Year)\N»+«X(Calc.RestDiv)»)\N»)»
# ______________________________________________________________________________________________________
# Berechnung für Anzahl Monate
«X(Calc.MonthAdd=«(«(«X(Calc.MoveMonth)\N»-«(«X(Calc.RestDiv)\N»*12)\N»)\N»)\N»)»
# ______________________________________________________________________________________________________
# Neuen Monat speichern
«X(Calc.Month=«(«X(Calc.Month)\N»+«X(Calc.MonthAdd)\N»)\N»)»
# ______________________________________________________________________________________________________
# Sonderfall Jahreswechsel
«nzX(Calc.Month)>12\N»«X(Calc.Month=«(«X(Calc.Month)\N»-12)\N»)»«X(Calc.Year=«(«X(Calc.Year)\N»+1)\N»)»
# ______________________________________________________________________________________________________
# Neues Datum speichern
«X(Date.NewDate=«X(Calc.Day)».«X(Calc.Month)».«X(Calc.Year)»)»
/

/Date.SubMonths
# ______________________________________________________________________________________________________
# Berechnung für Anzahl ganze Jahre
«X(Calc.Divisor=«(«X(Calc.MoveMonth)\N»/12)\N,.00»)»
«nPOS(.,«X(Calc.Divisor)»)»
«X(Calc.RestDiv=«POS(1)»)»
# ______________________________________________________________________________________________________
# Neues Jahr speichern
«X(Calc.Year=«(«X(Calc.Year)\N»-«X(Calc.RestDiv)»)\N»)»
# ______________________________________________________________________________________________________
# Berechnung für Anzahl Monate
«X(Calc.MonthAdd=«(«(«X(Calc.MoveMonth)\N»-«(«X(Calc.RestDiv)\N»*12)\N»)\N»)\N»)»
# ______________________________________________________________________________________________________
# Neuen Monat speichern
«X(Calc.Month=«(«X(Calc.Month)\N»-«X(Calc.MonthAdd)\N»)\N»)»
# ______________________________________________________________________________________________________
# Sonderfall Jahreswechsel
«nzX(Calc.Month)<1\N»«X(Calc.Month=«(«X(Calc.Month)\N»+12)\N»)»«X(Calc.Year=«(«X(Calc.Year)\N»-1)\N»)»
# ______________________________________________________________________________________________________
# Neues Datum speichern
«X(Date.NewDate=«X(Calc.Day)».«X(Calc.Month)».«X(Calc.Year)»)»
/ 

Den ersten/letzten Tag der Woche und des Monats auslesen

Beispiel

/headerreport
# ******************************************************************************
# Den ersten/letzten der Woche/des Monats auslesen
# ******************************************************************************
«/Date.GetFirstAndLast»
/

/Date.GetFirstAndLast
# ______________________________________________________________________________
# Definieren des Ausgangsdatums
«X(Date.String=29.02.2012)»
«/BIZ.GetBo.FirstAndLastWeekAndMonth»
# ______________________________________________________________________________
# Ausgabe der Werte:
Der erste Tag der Woche:   «X(Date.FirstDayOfWeek)»
Der letzte Tag der Woche:  «X(Date.LastDayOfWeek)»
Der erste Tag des Monats:  «X(Date.FirstDayOfMonth)»
Der letzte Tag des Monats: «X(Date.LaystDayOfMonth)»
/

/BIZ.GetBo.FirstAndLastWeekAndMonth
«XSER(reqTime:GetBo)»
«XSER(reqTime:addArg=Time)»
«XSER(reqTime:addArg=«X(Date.String)»)»
«XSER(reqTime:addArg=)»
«XSER(reqTime:addArg=)»
«XSER(reqTime:addArg=)»
«XSER(reqTime:addArg=)»
«XSER(reqTime:addArg=)»
«XSER(reqTime:addArg=Time.WeekFirstDay,Time.WeekLastDay,Time.MonthFirstDay,Time.MonthLastDay)»
«nXSER(reqTime:execute>resTime)\A»
# ______________________________________________________________________________
# Speichern der Rückgabe
«X(Date.FirstDayOfWeek  =«XRES(resTime:Time.WeekFirstDay)»)»
«X(Date.LastDayOfWeek   =«XRES(resTime:Time.WeekLastDay)»)»
«X(Date.FirstDayOfMonth =«XRES(resTime:Time.MonthFirstDay)»)»
«X(Date.LaystDayOfMonth =«XRES(resTime:Time.MonthLastDay)»)»
/

Prüfen ob ein Wert ein gültiges Datum darstellt

Beispiel

/headerreport
# ******************************************************************************
# Prüfen ob ein Wert ein gültiges Datum darstellt
# ******************************************************************************
«/Date.CheckIsDate»
/

/Date.CheckIsDate
# ______________________________________________________________________________
# Definieren des zu prüfenden Datums
«X(Date.String=29.02.2012)»
«/BIZ.GetBo.IsDate»
# ______________________________________________________________________________
# Ausgabe nach Prüfung
«nz X(Date.Correct)\I»«X(Date.String)» ist ein gültiges Datum!
«nz~X(Date.Correct)\I»«X(Date.String)» ist KEIN gültiges Datum!
/

/BIZ.GetBo.IsDate
«XSER(reqTime:GetBo)»
«XSER(reqTime:addArg=Time)»
«XSER(reqTime:addArg=«X(Date.String)»)»
«XSER(reqTime:addArg=)»
«XSER(reqTime:addArg=)»
«XSER(reqTime:addArg=)»
«XSER(reqTime:addArg=)»
«XSER(reqTime:addArg=)»
«XSER(reqTime:addArg=Time.Date)»
«nXSER(reqTime:execute>resTime)\A»
# ______________________________________________________________________________
# prüfen ob Fehler aufgetreten (z.B. wenn eingabe kein Datumsformat)
«X(Date.Correct=0)»
«nz XRES(resTime:mText)\I»«GOTO(# End_CheckIsDate)»
# ______________________________________________________________________________
# Speichern der Rückgabe
«X(Date.ReturnValue=«XRES(resTime:Time.Date)»)»
# ______________________________________________________________________________
# Vergleichen der Rückgabe
«nzX(Date.ReturnValue)=«X(Date.String)\A»\A»«X(Date.Correct=1)»
# End_CheckIsDate
/