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
/