Lade...
 

CX_SPAN_DATE - Datumsperiode

CX_SPAN_DATE

Klassenhierarchie
Beschreibung:

Diese Klasse besteht aus einem Datum (CX_DATE) und einer Dauer in einer Zeiteinheit (Dauer, CX_VALUE). 
Sie kann verschieden Interpretiert werden: Als Intervall (Zeitspanne) aufgefasst stellt das Datum den Start und das Datum verlängert um die Dauer (Start+Dauer) das Ende dar. Als Vorgang aufgefasst, beginnt dieser am Datum und sein Aufwand ist in der Dauer gespeichert. Dieser Aufwand kann dann auch gleich 0 oder sogar negativ sein.

Für diese beiden Bedeutungen gibt es im Wert validEnum noch Flags die bestimmte Spezialfälle abdecken: So kann zum einen bestimmt werden, dass das Intervall unbeschränkt (unendlich) oder halb-unbeschränkt (Start oder Ende fehlt) ist. Zum anderen kann die Dauer sich statt über alle Tage (Brutto) nur über bestimmte Tage wie Arbeitstage (Netto) erstrecken. 
Diese Modi schließen sich aus: Ist die Datumsperiode (halb-)unbeschränkt so hat die Dauer keine Bedeutung. (Theoretische Dauer: Unendlich.) Ist die Dauer Netto, so muss  die Datumsperiode beschränkt sein.

Die Dauer muss nicht in Tagen angegeben werden. Sie kann auch in Wochen, Monaten, Jahren und so weiter angegeben sein. 
Fällt das Datum auf den Anfang einer solchen Periode spricht man von einer diffusen Datumsperiode. In diesem Fall steht die Datumsperiode für eine bestimmte Anzahl von Perioden in der gröberen Einheit. 
Auch hier gilt eine Einschränkung gegenüber den Modi: Diffuse Datumsperioden sind immer beschränkt und Brutto.
Bei bestimmten arithmetischen Operation, wie das Setzen des Startdatums, kann es notwendig sein, die Dauer auf einzelne Tage zurückzurechnen.

Das Datum wird, wie jedes Datum, mit dem aktuellen Tagesdatum initialisiert. Die Dauer ist standardmäßig auf 1 Tag gesetzt. Der Standard-Modus ist Brutto und beschränkt (FROM_TO).
In gewisser Hinsicht kann jedes einfache Datum auch als Datumsperiode aufgefasst werden: Viele Funktionen, die eigentlich für eine Datumsperiode konzipiert worden sind, sind auch auf ein Datum anwendbar. Wird dabei eine Dauer von einem Tag vorausgesetzt.

Während ein Datum unvollständig sein kann, muss eine Datumsperiode mindestens eine Jahresangabe besitzen. Es ist also nicht möglich, Perioden wie z.B. "April - Mai" oder "1. - 15." zu definieren.

Code-Beispiel:

1. "Am 10.1.1996"

2. "Vom 10.1.1996 bis zum 12.1.1996"

3. "Das zweite Quartal 1994"

4. "Ab der 14.ten bis inklusive der 17.ten Kalenderwoche 1996"

5. "Ab dem 20.5.1996"

Darstellung am Bildschirm:

Zur Darstellung von Objekten dieser Klasse existieren folgende Möglichkeiten:

1. Verwendung eines Oberflächenobjektes vom Typ String.

In diesem Fall wird das Objekt in einem einzigen Eingabefeld angegeben. Dabei sind neben Eingaben vom Typ "Startdatum - Enddatum" auch Angaben möglich, wie z.B. "2. Quartal 1996". Auch werden Eingaben wie "4KW96-7KW96" (= "vom Beginn der 4.ten Kalenderwoche bis zum Ende der 7.ten Kalenderwoche 1996") unterstützt. Die folgende Tabelle zeigt alle möglichen Darstellungen. Dabei ist zu beachten, dass Jahresangaben zweistellig erfolgen können, wobei dann das aktuell eingestellte Basis-Jahrhundert hinzuaddiert wird. Die Angabe der Einheit, wie z.B. "Mt" für Monat, richten sich nach den eingestellten System-Einheiten. So kann man im Deutschen statt "Mt" auch "Monat" schreiben. Leerzeichen und Punkte sind optional, so dass "2. Quartal 1996" auch als "2Quartal1996" bzw. als "2Q96" geschrieben werden kann.

Eingabe Datum
Start - Ende Ab dem Start-Datum bis zum Ende-Datum
n Kw Jahr Die n. Kalenderwoche in dem Jahr Jahr
n Mt Jahr Der n. Monat in dem Jahr Jahr
n Q Jahr Das n. Quartal in dem Jahr Jahr
n T Jahr Das n. Tertial in dem Jahr Jahr
Jahr Das Jahr Jahr
n Jz m Das n. Jahrzehnt in dem m. Jahrhundert
n Jh Das n. Jahrhundert
n Jt Das n. Jahrtausend

Anmerkung: Bei der Eingabe einer Datumsperiode werden das Start- und Enddatum durch eines der folgenden Zeichen getrennt: '-', '·' oder '/'.

Die folgenden Abbildungen zeigen Beispiele (Programmcode):

2. Die Verwendung von zwei Oberflächenobjekten vom Typ Date

In dem einen Feld wird das Start- und in dem anderen das Enddatum eingegeben (Programmcode). Dabei ist zu beachten, dass ohne zusätzliche Oberflächenobjekte nur definierte Start- und Enddaten verwaltet werden können, d.h. Angaben wie "ab dem 3.10.1990" sind nicht möglich.

3. Die Verwendung der Oberflächenobjekte Date und String

Das erste Oberflächenobjekt gibt das Startdatum und das zweite die Zeitdauer an (Programmcode). Dabei ist zu beachten, dass ohne zusätzliche Oberflächenobjekte nur definierte Start- und Enddatum verwaltet werden können, d.h. Angaben wie "ab dem 3.10.1990" sind nicht möglich.

Im Zusammenhang mit diesen Darstellungsmöglichkeiten und bestimmten InstantView- Anweisungen spielen die zum Objekt gehörigen Flags eine wichtige Rolle, da mit Ihnen die Darstellung des Objektes modifiziert werden kann.

Operatoren
Operator Beschreibung
+, -, Arithmetik 
>, <, = Vergleiche

 

Methodenverzeichnis (MDI)
Funktion MA* Parameter Rückgabe Kurzbeschreibung
Einzelangaben:        
ValueOfDate     INTEGER interner Datumswert
Duration     OBJECT Periodendauer
         
Tagesangaben:        
DayOfDate     INTEGER Tag des Datums
WeekOfDate     INTEGER Kalenderwoche des Datums
MonthOfDate     INTEGER Monat des Datums
QuarterOfDate     INTEGER Quartal des Datums
TertianOfDate     INTEGER Tertial des Datums
YearOfDate     INTEGER Jahr des Datums
DecadeOfDate     INTEGER Jahrzehnt des Datums
CenturyOfDate     INTEGER Jahrhundert des Datums
MilleniumOfDate     INTEGER Jahrtausend des Datums
         
Wochenangaben:        
DayOfWeek     INTEGER Wochentag des Datums
DayInWeek     INTEGER Wochentag-Position bezüglich Arbeitswochenbeginn
YearOfWeek     INTEGER Jahr der Kalenderwoche
         
Monatsangaben:        
DaysInMonth     INTEGER Tagesanzahl im Monat
         
Jahresangaben:        
DayOfYear     INTEGER Tag-Position im Jahr
         
Einsprachig:        
WeekdayNameOfDay     STRING Wochentagsname
ShortWeekdayNameOfDay     STRING abgekürzter Wochentagsname
NameOfMonth     STRING Monatsname
ShortNameOfMonth     STRING abgekürzter Monatsname
NameOfDay     STRING (Feiertags-)Name des Tages
SpecialNameOfDay   INTEGER STRING bestimmter (Feiertags-)Name des Tages
         
Mehrsprachig:        
MLWeekdayNameOfDay     MLSTRING mehrsprachiger Wochentagsname
MLShortWeekdayNameOfDay     MLSTRING mehrsprachiger abgekürzter Wochentagsname
MLNameOfMonth     MLSTRING mehrsprachiger Monatsname
MLShortNameOfMonth     MLSTRING mehrsprachiger abgekürzter Monatsname
MLNameOfDay     MLSTRING mehrsprachiger (Feiertags-)Name des Tages
MLSpecialNameOfDay   INTEGER MLSTRING bestimmter mehrsprachiger (Feiertags-)Name des Tages
         
Konvertierungen:        
ImportDateNumber   STRING, INTEGER   Import der Datumszahl als String
ExportDateNumber   INTEGER, INTEGER STRING Export der Datumszahl als String
ImportObject   OBJECT   (Start-)Datum setzen
SetDate   STRING, INTEGER   Basisdatum aus der übergebenen Zeichenkette importieren
SetSpanDate
231532
  STRING, INTEGER   Datumsperiode aus der übergebenen Zeichenkette importieren
         
Tagestypangaben:        
IsDateType   INTEGER INTEGER Ist das Datum ein "spezieller freier Tag"?
IsTerm     INTEGER Ist das Datum ein Termin?
IsAnniversary     INTEGER Ist das Datum ein Jahrestag?
IsHoliday     INTEGER Ist das Datum ein Feiertag?
IsVacation     INTEGER Ist das Datum ein Ferientag?
IsWorkingday     INTEGER Ist das Datum ein Werktag?
TypeOfDate     INTEGER Typ des Datums
LeapYear     INTEGER Ist das Datum ein Schaltjahr?
IsDiffuse     INTEGER Wird die Dauer nicht in Tagen angegeben?
         
Datumsvergleiche:        
Encompassed   OBJECT INTEGER "Enthalten in"-Test (Konjunktion)
Overlap   OBJECT INTEGER Überlappungs-Test (Disjunktion)
AgeInYMD   OBJECT VECTORject> Genaue Differenz zu einem anderen Datum
AgeInFullYears   OBJECT OBJECT Abgerundete Jahresdifferenz zu einem anderen Datum
AgeInCommencedYears   OBJECT OBJECT Aufgerundete Jahresdifferenz zu einem anderen Datum
         
Relativangaben:        
First   INTEGER OBJECT erster Wochentag im Monat
Second   INTEGER OBJECT zweiter Wochentag im Monat
Third   INTEGER OBJECT dritter Wochentag im Monat
Fourth   INTEGER OBJECT vierter Wochentag im Monat
Last   INTEGER OBJECT letzter Wochentag im Monat
Previous   INTEGER OBJECT Suche nach einem vorherigen bestimmten Wochentag
Next   INTEGER OBJECT Suche nach einem nächsten bestimmten Wochentag
NextDate   OBJECT OBJECT der Folgetag innerhalb der Datumsperiode
NextTerm   OBJECT OBJECT der Folgetag innerhalb der Datumsperiode (als DateTime)
Easter     OBJECT Ostersonntags-Berechnung
         
Erzeugen seines Objektes:        
Day   INTEGER, INTEGER OBJECT Erzeugen eines Tagesdatums im aktuellen Jahr
Date   INTEGER, INTEGER, INTEGER OBJECT Erzeugen eines genauen Tagesdatums
SpanDate   OBJECT, OBJECT OBJECT Erzeugen einer genauen Datumsperiode
Week     OBJECT Erzeugen einer Kalenderwoche
Month       Erzeugen eines Monats
Quarter       Erzeugen eines Quartals
Tertian       Erzeugen eines Tertials
Year       Erzeugen eines Jahres
Decade       Erzeugen eines Jahrzehnts
Century       Erzeugen eines Jahrhunderts
Millenium       Erzeugen eines Jahrtausends
         
Einzelangaben:        
SetDay   INTEGER   Setzen eines neuen Tages
SetMonth   INTEGER   Setzen eines neuen Monats
SetYear   INTEGER   Setzen eines neuen Jahres
SetZero       Setzen auf "unbeschränkt"
         
Start/Ende:        
StartOfPeriod     OBJECT Periodenbeginn
EndOfPeriod     OBJECT Periodenende
StartOfPeriodMA *     Periodenbeginn
EndOfPeriodMA *     Periodenende
RealStartOfPeriod     OBJECT Die frühere der Grenzperioden
RealEndOfPeriod     OBJECT Die spätere der Grenzperioden
FirstPeriod     OBJECT Erste Teilperiode
LastPeriod     OBJECT Letzte Teilperiode
SetStartOfPeriod   OBJECT   Setzen eines Startdatums mit Verändern der Periodendauer
SetEndOfPeriod   OBJECT   Setzen des Enddatums mit Verändern der Periodendauer
MoveStartOfPeriod (MovePeriodToStartDate)   OBJECT   Setzen des Startdatums ohne Verändern der Periodendauer
MoveEndOfPeriod (MovePeriodToEndDate)   OBJECT   Setzen des Enddatums ohne Verändern der Periodendauer
SetRealStartOfPeriod   OBJECT   Setzen des früheren Datums mit Verändern der Periodendauer
SetRealEndOfPeriod   OBJECT   Setzen des späteren Datums mit Verändern der Periodendauer
MoveRealStartOfPeriod   OBJECT   Setzen des früheren Datums ohne Verändern der Periodendauer
MoveRealEndOfPeriod   OBJECT   Setzen des späteren Datums ohne Verändern der Periodendauer
SetPeriodBorders   OBJECT, OBJECT   Setzen des Start- und Enddatums
         
Addition/Subtraktion:        
AddDay   INTEGER   Tages-Addition
AddNetDay   INTEGER, INTEGER   Addiert so viele Tage, dass das Datum um die angegebene Anzahl an Tagen in der gegebenen Tageskategorie verschoben wird
AddWeek   INTEGER   Wochen-Addition
AddMonth   INTEGER   Monats-Addition
AddYear   INTEGER   Jahres-Addition
         
Mengenoperationen:        
JoinPeriods   OBJECT OBJECT Erzeuge aus zwei Datumsperioden eine Vereinigung (Konjunktion)
OverlappingPeriod   OBJECT   Erzeuge aus zwei Datumsperioden die Schnittmenge (Disjunktion)
         
         
Dauer/Netto/Brutto:        
Duration     OBJECT Periodendauer (abhängig Tageskategorie)
SetDuration   OBJECT   Setzen der Periodendauer (wird Brutto)
NetDuration   INTEGER OBJECT Netto-Periodendauer (für jeweilige Tageskategorie)
SetNetDuration   OBJECT, INTEGER   Setzen der Periodendauer für Tageskategorie
GrossDuration     OBJECT Brutto-Periodendauer (unabhängig Tageskategorie)
SetGrossDuration   OBJECT   Setzen der Periodendauer ohne Tageskategorie
RealDuration     OBJECT Periodendauer (positiv auch wenn StartOfPeriod später als EndOfPeriod)
SetRealDuration   OBJECT   Setzen der Periodendauer unter Beibehaltung des Vorzeichens
DurationMA *     Periodendauer
GrossDurationMA *     Brutto-Periodendauer (unabhängig Tageskategorie)
RealDurationMA *     Periodendauer (positiv auch wenn StartOfPeriod später als EndPeriod)
IsNet   INTEGER INTEGER Ist die Tageskategorie (Netto-Typ) gesetzt?
GetNet     INTEGER Tageskategorien (Bitfeld)
SetNet   INTEGER   setzen der Tageskategorie
         
string   INTEGER CX_STRING Liefert die String-Darstellung des Objektes

* MA = Member-Access-Funktion

 

Datenverzeichnis (DDI)
Datenfeld Typ Referenz-Klasse I* Kurzbeschreibung
this CX_SPAN_DATE      
duration CX_VALUE     Die Periodenlänge. Kann jede Einheit sein, die auf Tag rückführbar ist, sie muss nicht positiv sein. Welche Tage sie umfasst hängt vom Netto-Typ ab. (siehe auch Funktion Duration)
validEnum INTEGER     Bit 0-1:
Der Typ der Zeitspanne: 
"0" = eine Zeitspanne mit Start und Ende (FROM_TO)
"1" = Start, aber es existiert kein Ende (FROM)
"2" = Ende, aber es existiert kein Start (TO)
"3" = unendlicher Zeitraum ohne Start und Ende (ENDLESS)
Bit 2-7:
Tageskategorien, auf die sich die Dauer (duration) bezieht. Gesetztes Bit heißt: die jeweilige Kategorie wird aus der Dauer herausgenommen.
Ist keines dieser Bits gesetzt (Default) heißt dies also die Dauer ist Brutto, umschließt also alle Tage zwischen Start und Ende.
Alle Bits gesetzt kommt nicht vor, da dies bedeuten würde, dass kein Tag mit der Dauer gezählt wird.
Die Bits (Kategorien) im einzelnen (siehe auch DatumstypenKonstanten):
2: [Is]Term, aber nicht Kat. 6 3: [Is]Anniversary, aber nicht Kat. 2,6 4: [Is]Holiday, aber nicht Kat. 2-3,6 5: [Is]Vacation, aber nicht Kat. 2-4,6 6: [Is]Workingday 7: [Is]Rest: jeder Tag der nicht zu Kat. 2-6 gehört (evtl. leer)

* I = Indizierbares Datenfeld

 

Verwendung in AppsWH
Modul Kurzbeschreibung