Rheinwerk < openbook > SAP-Wissen aus erster Hand
SAP-Wissen aus erster Hand.
 
Inhaltsverzeichnis
Vorwort zur vierten Auflage
1 ABAP und die ersten Schritte im SAP-System
2 ABAP Dictionary
3 Programmieren im ABAP Editor
4 Felder und Berechnungen
5 Modifikation von Zeichenketten
6 Debugging von Programmen
7 Modifikation von transparenten Datenbanktabellen
8 Rechnen mit Datum und Zeit, Mengen und Währungen
9 Mit Daten in einer Datenbanktabelle arbeiten
10 Programmablaufsteuerung und logische Ausdrücke
11 Selektionsbildschirme
12 Interne Tabellen
13 Modularisierung von Programmen
14 Weiterführende Themen
A Icons auf einen Blick
B Abkürzungsverzeichnis
C Die Autoren
Stichwortverzeichnis

Download:
- Beispielprogramme, ca. 23 KB

Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Einstieg in ABAP von Karl-Heinz Kühnhauser, Thorsten Franz
Buch: Einstieg in ABAP

Einstieg in ABAP
Pfeil 8 Rechnen mit Datum und Zeit, Mengen und Währungen
Pfeil 8.1 Felddeklarationen
Pfeil 8.2 Rechnen mit Datumsfeldern
Pfeil 8.3 Rechnen mit Zeitfeldern
Pfeil 8.4 Rechnen mit Mengen- und Währungsfeldern
Pfeil 8.5 Codebeispiel zu Datums-, Zeit- und Währungsfeldern
 
Zum Seitenanfang

8.3    Rechnen mit Zeitfeldern Zur vorigen ÜberschriftZur nächsten Überschrift

Durch die Beispiele zum Rechnen mit Datumsfeldern sollten Sie schon ein Gefühl für die eigenartige, aber auch sehr praktische Mischung aus arithmetischen Operationen und String-Operationen bekommen haben, mit denen Sie Datumsfelder bearbeiten können. Auch Zeitfelder sind mit beiden Operationsarten modifizierbar – hierzu schauen wir uns wieder kleine Beispiele an.

[zB]  Beispiel 1: Tägliche Arbeitszeit

Der Arbeitsbeginn an einem bestimmten Tag ist festgelegt auf 08:15 Uhr und das Arbeitsende auf 18:00 Uhr. Wie viel Zeit liegt dazwischen?

Die Lösungsschritte könnten folgendermaßen aussehen:

  1. Die Felder ARBEITSBEGINN und ARBEITSENDE werden mit dem Datentyp t oder mit einem Verweis auf SY-UZEIT deklariert.

    DATA arbeitsbeginn TYPE t.
    DATA arbeitsende LIKE sy-uzeit.
  2. Im Programmablauf weisen Sie den tatsächlichen Arbeitsbeginn dem Zeitfeld ARBEITSBEGINN zu; das Arbeitsende schreiben Sie in das Zeitfeld ARBEITSENDE.

    arbeitsbeginn = '081500'.
    arbeitsende = '180000'.
  3. Die Zeitdifferenz zwischen ARBEITSENDE und ARBEITSBEGINN wird in Sekunden ausgedrückt. Das Zielfeld könnte daher durchaus ein Integerfeld vom Typ i sein.

    zeitdifferenz_sec  = arbeitsende
    - arbeitsbeginn.
  4. Benötigen Sie für die weitere Verarbeitung die Zeitdifferenz in Minuten oder Stunden, dürfte ein Zielfeld vom Typ p mit mindestens zwei Dezimalstellen praktischer sein, da Sie Bruchteile von Stunden und Minuten über Nachkommastellen als Dezimalwert ausdrücken können, wie es bei Industrieminuten üblich ist. Benötigen Sie den Zeitwert in Minuten, schreiben Sie die Anweisung:

    zeitdifferenz_min = ( arbeitssende - arbeitsbeginn ) / 60.

    Soll die Zeitdifferenz in Stunden und Minuten als Dezimalzahl ausgedrückt werden, lautet die Anweisung:

    zeitdifferenz_std =
    ( arbeitsende - arbeitsbeginn ) / 3600.

Nach diesen Verarbeitungsschritten stehen die Zeitdaten in Feldern vom Typ i bzw. p. Wenn Sie davon ausgehen, dass das Feld ZEITDIFFERENZ_STD vom Typ p ist und mindestens zwei Dezimalstellen hat, können Sie problemlos eine Mittagspause von 45 Minuten einbauen, d. h. 0,75 Stunden, indem Sie dem Feld PAUSE vom Typ p mit zwei Dezimalstellen den Wert 0.75 zuweisen. Anschließend subtrahieren Sie die Pausenzeit von der Zeitdifferenz und erhalten die Arbeitszeit.

pause = '0.75'.
arbeitszeit = zeitdifferenz_std - pause.
[zB]  Beispiel 2: Verbleibende Tageszeit

Es soll berechnet werden, wie viel Zeit von der aktuellen Uhrzeit bis Mitternacht verbleibt. Die verbleibende Zeit soll in Stunden, Minuten und Sekunden in jeweils eigenen Feldern berechnet werden.

  1. Zunächst müssen Sie die aktuelle Uhrzeit wieder aus der Systemzeit lesen und in das Feld MITTERNACHT die Zeit 24 Uhr eintragen:

    aktuelle_uhrzeit = sy-uzeit.
    mitternacht = '240000'.
  2. Anschließend berechnen Sie die Restzeit bis Mitternacht in Sekunden:

    restzeit = mitternacht - aktuelle_uhrzeit.
  3. Für die Anzahl der vollen Stunden deklarieren Sie das Feld RESTSTUNDEN mit dem Datentyp i und berechnen den Wert für die Stunden mit der Anweisung:

    reststunden = ( mitternacht - aktuelle_uhrzeit ) div 3600.
  4. Um die verbleibenden Minuten zu bestimmen, verwenden Sie den Rest der ganzzahligen Division, der in Sekunden ausgedrückt wird, und teilen ihn durch 60:

    restminuten =
    ( ( mitternacht - aktuelle_uhrzeit )
    mod 3600 ) div 60.
  5. Um die wiederum übrig bleibenden Sekunden zu bestimmen, berechnen Sie den Rest für die ganzzahlige Division der Zeitdifferenz durch die Minuten:

    restsekunden =
    ( mitternacht - aktuelle_uhrzeit ) mod 60.

Die Ausgabe der drei Felder in einer Liste mit erklärenden Texten könnte folgendermaßen aussehen:

WRITE: / 'Restzeit bis Mitternacht:',
reststunden, 'Stunden,', restminuten,
'Minuten und', restsekunden, 'Sekunden'.
[zB]  Beispiel 3: Zeitspanne mit Datumswechsel

Das Ende einer Arbeitsschicht liegt erst in den Morgenstunden des nächsten Tages. Wie viele Stunden, Minuten und Sekunden liegen zwischen der aktuellen Uhrzeit am Nachmittag oder am Abend und dem Schichtende? Auch hier sollen für die Ausgabe Stunden, Minuten und Sekunden in jeweils eigenen Feldern geführt werden.

Es fängt wieder ganz harmlos an: Sie übernehmen die aktuelle Uhrzeit aus der Systemzeit und setzen für das Schichtende die Zeit 05:20:10 Uhr ein. Zugegebenermaßen ist diese Zeit nicht sehr realistisch für das Schichtende, aber damit Sie auch einmal mit »krummen Sekunden« arbeiten, werden alle Schichtarbeiter um Nachsicht gebeten.

aktuelle_uhrzeit = sy-uzeit.
schichtende = '052010'.

Zum nächsten Schritt sind vielleicht einige Vorbemerkungen nützlich. Der Tag hat 86.400 Sekunden. Diese Tatsache ist zwar offensichtlich, aber die Zahl hat verständlicherweise nicht jeder Mensch permanent im Kopf. Darüber hinaus ist der Wert für das Schichtende im Beispiel kleiner als die aktuelle Uhrzeit, was zu negativen Zeiten führen würde. Gehen Sie beispielsweise von einer aktuellen Uhrzeit von 21:00 Uhr aus und davon, dass das Schichtende um 03:00 Uhr morgens wäre, hätten Sie eine Zeitdifferenz von sechs Stunden. Für Menschen leicht zu erkennen, für Computer aber nicht.

Deshalb zerlegen Sie den Prozess in zwei Schritte. Zunächst bilden Sie wie bisher die Differenz zwischen Ende und Beginn:

3 – 21 = –18

Im zweiten Schritt berechnen Sie den Betrag für den Rest von –18 auf 24. Es mag trivial für Sie sein, aber durch diesen Trick erreichen Sie einerseits, dass Sie die richtige Zeitdifferenz auf 24 Stunden erhalten, und andererseits, dass diese Zeitdifferenz positiv ist, wie jeder andere Betrag auch.

| 24 – 18 | = 6

Die dazugehörige ABAP-Anweisung fasst beide Schritte in einem Kommando zusammen und lautet:

restzeit =
( schichtende - aktuelle_uhrzeit )
MOD 86400.

Aus der so ermittelten Restzeit berechnen Sie die vollen Stunden:

reststunden = restzeit DIV 3600.

Aus dem Rest der ganzzahligen Division für die Stunden berechnen Sie wieder die Restminuten:

restminuten = ( restzeit MOD 3600 ) div 60.

Wie im zuvor ausgeführten Beispiel ermitteln Sie aus dem Rest der ganzzahligen »Minutendivision« die Restsekunden:

restsekunden = restzeit MOD 60.

Im letzten Schritt geben Sie die Werte noch in einer Liste aus:

WRITE: / 'Restzeit bis Schichtende:',
reststunden, 'Stunden', restminuten,
'Minuten', restsekunden, 'Sekunden'.
[+]  Wichtig für die Praxis

Das Arbeiten mit Datums- und Zeitfeldern wird in der Praxis häufiger benötigt, als Sie denken. Es ist auch nicht auf ein bestimmtes Arbeitsgebiet beschränkt, sondern taucht in allen möglichen SAP-Modulen an den verschiedensten Stellen auf. Daher werden Ihnen die besprochenen Beispiele auch später in der Praxis noch nützliche Dienste erweisen.

 


Ihre Meinung?

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Einstieg in ABAP Einstieg in ABAP
Jetzt Buch bestellen

 Buchempfehlungen
Zum Rheinwerk-Shop: SAP – Der technische Einstieg
SAP – Der technische Einstieg


Zum Rheinwerk-Shop: ABAP Objects – Das umfassende Handbuch
ABAP Objects – Das umfassende Handbuch


Zum Rheinwerk-Shop: ABAP-Entwicklung für SAP S/4HANA
ABAP-Entwicklung für SAP S/4HANA


Zum Rheinwerk-Shop: Kundeneigene Erweiterungen mit ABAP
Kundeneigene Erweiterungen mit ABAP


Zum Rheinwerk-Shop: Schrödinger programmiert ABAP
Schrödinger programmiert ABAP


Zum Rheinwerk-Shop: Migration nach SAP S/4HANA
Migration nach SAP S/4HANA


Zum Rheinwerk-Shop: Design Thinking mit SAP
Design Thinking mit SAP


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und in die Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2020
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 
[Rheinwerk]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern