DOCUcontrol: TIMESPAN und der letzte Tag des Vormonats

DOCUframe und DOCUcontrol

DOCUcontrol ist die (Makro-)Programmiersprache der Softwarelösung DOCUframe vom Softwarehaus GSD. Mit DOCUframe lassen sich die kompletten Geschäftsprozesse eines kleinen oder mittelständischen Unternehmens steuern. DOCUcontrol bietet die notwendige Flexibilität, um DOCUframe an die jeweiligen Geschäftsprozesse und Kundenanforderungen anzupassen.

Basisdatentypen TIME und TIMESPAN

DOCUcontrol bietet verschiedene gängige Basistypen wie z.B. Ganzzahlen (INT), Boolsche Werte (BOOL), oder auch Zeichenketten (STRING). Es stehen aber auch zwei Basistypen zur Verfügung, die das Thema „Zeit“ abbilden: TIME als absolute Zeit und TIMESPAN als Zeitspanne. DOCUcontrol bietet die Möglichkeit eine Variable vom Typ TIME mit einer Variable vom Typ TIMESPAN mathematisch zu verknüpfen, also um z.B. eine Zeitspanne zu einer Zeit zu addieren oder abzuziehen. So lässt sich z.B. sehr einfach der letzte Tag des Vormonats berechnen, wie wir später sehen werden.


DOCUcontrol, TIMESPAN und der letzte Tag des Vormonats

Microsoft Excel als Vorlage

In Excel würde man für diese Aufgabenstellung die folgende Formel einsetzen:

=A1-TAG(A1)

In A1 steht ein Datum des aktuellen Monats. Die Funktion „TAG“ ermittelt die Anzahl der Tage im aktuellen Monat. Diese werden nun vom aktuellen Datum abgezogen, so dass man jetzt eigentlich den Nullten des aktuellen Monats erhalten würde. Da Excel aber Datumsangaben als fortlaufende Zahl speichert ( 1 entspricht dem 1.1.1900) und es keinen Nullten Tag im aktuellen Monat gibt, wird als Ergebnis der davor liegende Tag ausgegeben und das ist immer der letzte des Vormonats.

Die „Urzeit“ bei DOCUcontrol

Bei DOCUControl beginnt die Zeitrechnung nicht erst beim 1.1.1900 sondern bereits früher und zwar am 1.1.1601. Die „Urzeit“ 01.01.1601 0 Uhr ist in DOCUcontrol auch die „leere“ Zeit. Eine Zeitvariable kann man mit der Makrofunktion TimeEmpty leeren.

Doch nun zurück zum Ausgangsproblem. Wie kann man anlog zu Excel den letzten Tag des Vormonats ermitteln ? Jahreswechsel, Schaltjahre etc. sollen dabei immer automatisch berücksichtigt werden.

Die Idee dahinter ist ähnlich wie bei Excel. Man zieht vom aktuellen Datum den aktuellen Tag ab und erhält den letzten des Vormonats.

In DOCUcontrol-Syntax sieht es folgendermaßen aus:


TIME AktDatum = TimeGetCurrTime( TRUE ); 
TIME LetzterTagVormonat;
  
LetzterTagVormonat = AktDatum - TimeSpanCreate( TimeGetDay( AktDatum ));
Trace( "Letzter Tag des Vormonats: %1", TimeFormatDate( LetzterTagVormonat, TRUE ));

Die Makrofunktionen TimeFormatDate und Trace dienen nur zur Ausgabe des Ergebnisses.

Alternativ und evtl. auch etwas einleuchtender kann das gewünschte Ergebnis auch folgendermaßen erreicht werden:

Man nimmt den ersten Tag des aktuellen Monats und zieht einen Tag ab. So erhält man den letzten Tag des Vormonats.

Damit sieht der DOCUcontrol-Programmcode wie folgt aus:

TIME AktDatum = TimeGetCurrTime( TRUE ); 
TIME LetzterTagVormonat;

LetzterTagVormonat = TimeCreate( TimeGetYear( AktDatum ), TimeGetMonth( AktDatum ), 1 ) - TimeSpanCreate( 1 );
Trace( "Letzter Tag des Vormonats: %1",TimeFormatDate( LetzterTagVormonat , TRUE ));


DOCUcontrol Datentypen TIME und TIMESPAN

[of_autor]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert