Lade...
 

CX_PERIODIC_DATE::Import

CX_PERIODIC_DATE::Import

Beschreibung:

Mit dieser Funktion wird die Beschreibung eines periodischen Datums importiert.

Code-Beispiel:

In dem Beispiel-Programm wird das periodische Datum "an jedem vorletzten Montag im Monat" generiert.

Var(value, pdate)
CreateTransObject(CX_VALUE) -> value
"1 Tage" value Put
CreateTransObject(CX_PERIODIC_DATE) -> pdate
366 value 98 1 0 0 pdate Call(Import)

// Der ViewImport mittels Put funktioniert identisch, nur dass die Parameter als ein String übergeben werden 195275:

"366 \"1 Tage\" 98 1 0 0" pdate Put

 

Stack
Stack Position Objekttyp Kurzbeschreibung
Stack(In) Top CX_PERIODIC_DATE das periodische Datum(-sobjekt)
  Top-1 INTEGER Start
  Top-2 INTEGER Häufigkeit
  Top-3 INTEGER Bezugszeitraum
  Top-4 INTEGER Position
  Top-5 CX_VALUE Einzelperioden-Dauer
  Top-6 INTEGER Tag-Codierung
Stack(Out) Top - -

Die einzelnen Parameter haben dabei folgende Bedeutung:

Position Bedeutung des Parameters
Top das periodische Datumsobjekt, das verändert werden soll
Top-1 Unter Start ist ein Startdatum, -monat bzw. -tag für die Häufigkeit zu verstehen. Für ein periodisches Datum kann im Normalfall ein Startdatum gesetzt werden, ab dem es gültig sein soll. Dabei muss der Wert des Datums, der mit der Funktion ValueOfDate ermittelt werden kann, übergeben werden. Soll hingegen eine Periode wie "jeder n.te in einem Jahr" codiert werden, so muss ein Startmonat gewählt werden, auf den sich die relative Angabe beziehen kann. Soll beispielsweise "jeder zweite 15.te in einem Jahr" codiert werden und wird in diesem Beispiel der Januar (= "1") als Startmonat gewählt, so erhält man die Periode: "15.1, 15.3, ..., 15.11". Wählt man im Gegensatz dazu den Februar (= "2") als Startmonat, so hat die Periode folgendes Aussehen: "15.2, 15.4, ..., 15.12". Wird die Periode "jeder zweite Montag im Monat" codiert, so wird äquivalent vorgegangen, wobei sich die Angabe nicht mehr auf einen Monat, sondern auf einen Wochentag bezieht. Dieser Parameter enthält also entweder einen Starttag, Startmonat oder ein Startdatum, das in der internen Darstellung als INTEGER-Wert übergeben werden muss.
Top-2

Unter der Häufigkeit ist die relative Position eines Tages zu verstehen.
Wenn eine genaue Position angegeben wurde, muss dieser Parameter eine "0" enthalten.
In diesem Feld werden Aussagen der Art "jeder n.te" codiert. Soll beispielsweise "jeder zweite 15.te ab Januar" gespeichert werden, so wird in diesem Parameter eine "2" übergeben.

Top-3 Der Bezugszeitraum, auf die sich die Häufigkeit bzw. Position beziehen soll, darf einen der folgenden Werte annehmen: "0" = Startdatum, "1" = Monat, "2" = Jahr.
Top-4 Die genaue Position des Tages, wobei gleichzeitig keine relative Position (= Häufigkeit) angegeben werden darf, d.h. dieser Parameter muss eine "0" enthalten. Soll beispielsweise "der dritte 15.te eines Jahres" gespeichert werden, so wird in diesem Parameter eine "3" übergeben. Als zusätzliche Codierung stehen "der letzte einer Periode" und "der vorletzte einer Periode" zur Verfügung, so dass Aussagen wie "der letzte Montag in jedem Montag" beschreibbar sind. Der "letzte" wird dabei durch die "99", der "vorletzte" durch die "98", repräsentiert.
Top-5 Unter der Einzelperioden-Dauer ist die Anzahl der zusätzlichen Tage ab dem Starttag zu verstehen. Soll z.B. "der 15.te bis 17.te" abgebildet werden, so wird der 15.te mit einer Dauer von 2 (zusätzlichen) Tagen gespeichert. Da die Dauer als CX_VALUE übergeben wird, kann auch eine andere Einheit als "Tag", wie z.B. "Woche", gewählt werden.
Top-6

Die Codierung des Tages: (Siehe Seitenende für eine übersichtliche Tabelle).
Liegt der Wert zwischen 0 und 365, so repräsentiert er einen genauen Tag.
0 steht dabei für den Monatsletzten (= Ultimo ).
Alle Werte zwischen 366 und 748 stellen Kombinationen von Wochentagen dar. .
Die Wochentage werden wie folgt codiert:
Montag = 1, Dienstag = 2, Mittwoch = 4, Donnerstag = 8, Freitag = 16, Samstag = 32, Sonntag = 64.
D.h. es wird einer (oder mehrere) dieser Werte zu 365 hinzuaddiert, um eine Wochentagsangabe zu erzeugen.
So stellt der Wert 370 (= 365 + 1 + 4 ) die Kombination der Wochentage "Montag und Mittwoch" dar.
Des weiteren existieren noch Codierungen für Feiertage :
"Oder"-Feiertag = 512, "Und"-Feiertag = 1024, "Oder nicht"-Feiertag = 2048, "Und nicht"-Feiertag = 4096.
Die Kombinationen 878 (= 365 + 512 + 1) und 1390 (= 365 + 1024 + 1) unterscheiden sich darin, dass die erste das Datum "jeder Montag oder Feiertag" darstellt, während die zweite "jeder Montag, der zugleich auch ein Feiertag ist" abbildet.

Diese Codierungen gelten dabei in dieser Form nur im Zusammenspiel mit Wochentagen. Um ein Datum wie z.B. "jeder 15.te oder Feiertag" umzusetzen, muss zusätzlich noch der Wert "10000" hinzuaddiert werden, um Zweideutigkeiten in der Repräsentation des periodischen Datums zu verhindern. So wird das periodische Datum "jeder 15.te oder Feiertag" durch den Wert 10527 (= 15 + 512 + 10000) abgebildet.

Alle periodischen Daten, die mit Hilfe dieser Parameter abgebildet werden können, sind der folgenden Tabelle zu entnehmen. Dabei wurde der Parameter Einzelperioden-Dauer nicht einbezogen, da er keine Auswirkung auf den Typ eines periodischen Datums hat.

Datumstyp Start Häufig-
keit
Bezugs-
zeitraum
Position Tag
jeder n.te Tag ab dem Datum Datum n > 0 0 0 0..28 + [10512 | 11024 | 12048 | 14096]
jeder n.te Tag im Jahr ab dem k.ten Monat im Jahr 1<=k<=12 n > 0 2 0 0..28 + [10512 | 11024 | 12048 | 14096]
der m.te Tag in jedem Jahr (Tag > 28nur dann, falls m=1) - 0 2 1<=m<=12 0..365 + [10512 | 11024 | 12048 | 14096]
jeder n.te Wochentag ab dem Datum Datum n > 0 0 0 366..492 + [512 | 1024 | 2048 | 4096]
jeder n.te Wochentag im Monat ab dem k .ten gleichen Wochentag in demselben Monat 1<=k<=5 n > 0 1 0 366..492 + [512 | 1024 | 2048 | 4096]
jeder n.te Wochentag im Jahr ab dem k.ten gleichen Wochentag in demselben Jahr 1<=k<=53 n > 0 2 0 366..492 + [512 | 1024 | 2048 | 4096]
der m.te Wochentag in jedem Monat - 0 1 1<=m<=5 366..492 + [512 | 1024 | 2048 | 4096]
der m.te Wochentag in jedem Jahr - 0 2 1<=m<=53 366..492 + [512 | 1024 | 2048 | 4096]
der (vor-)letzte Wochentag im m.ten Monat 1<=m<=12 0 1 98, 99 366=Mo 367=Di 
369=Mi  373=Do 
381=Fr  397=Sa 429=So
"Feiertags" 1 1 0 0 1516

Ist in der Spalte Start ein "-" eingetragen ist, so bedeutet dieses, dass nur ein Pseudo-Wert übergeben werden muss, da der Parameter nicht zur Abbildung des periodischen Datums benötigt wird.

Der letzte Eintrag der Tabelle "Feiertags" stellt einen Spezialfall dar. Dieses periodische Datum wurde als "An jedem Tag der Woche, der auch ein Feiertag ist" codiert.

Erläuterungen zu den Parametern

Für die Parameter sind die erlaubten Werte entweder direkt oder als Bereich angegeben. Im Fall der Tag-Codierung erfolgt ein formelmäßige Beschreibung, mit dem Konstrukt Start..Ende + [ Wert 1 | Wert 2 | Wert 3 | Wert 4 ]. Dabei repräsentieren Start und Ende den Bereich, aus dem die Tag-Codierung einen Wert annehmen kann.

Die Werte in den eckigen Klammern stellen optionale Größen dar, die bei Einbezug von Feiertagen in das periodische Datum zum gewählten Wert hinzuaddiert werden müssen, wobei nur einer dieser Werte hinzugezählt werden darf.

 

Tabelle zur Codierung des Tages

Werte Bedeutung
1 Montag
2 Dienstag
4 Mittwoch
8 Donnerstag
16 Freitag
32 Samstag
64 Sonntag
Werte Bedeutung
512 und 10512*  "Oder"-Feiertag
1024 und 11024* "Und"-Feiertag
2048 und 12048* "Oder nicht"-Feiertag
4096 und 14096* "Und nicht"-Feiertag

 

*Die Wahl des richtigen der beiden Werte erfolgt in der Positions-Erklärung unter Top-6.


Funktionsaufruf: Call(Import)