Datum + 5 Jahre - 1 Tag

Die Frage ist als "gelĂśst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAPÂŽ: Funktionsbausteine, Listen, ALV
23 Beiträge • Seite 1 von 2 (current) Nächste
23 Beiträge Seite 1 von 2 (current) Nächste

Datum + 5 Jahre - 1 Tag

Beitrag von ralf.wenzel (Top Expert / 4004 / 208 / 282 ) »
Moin,

wenn ich Fragen stelle, sind die besonders doo.... äh... einfach 😉

Ich habe ein Datumsfeld und mĂśchte in einer Anweisung fĂźnf Jahre aufschlagen und einen Tag abziehen.

Also sowas wie:

Code: Alles auswählen.

datum(4) = datum(4) + 5. datum = datum - 1
Aber eben in einer Anweisung. Jegliche Mischformen, die ich versucht habe, funktionieren nicht wegen Syntaxproblemen, Beispiel:

Code: Alles auswählen.

datum = ( ( datum(4) + 5 ) && ( datum+4(4) + 1 ) ).
Wer kann mir helfen?
Bild
Ralf Wenzel • Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
Publikationen • Ungarische Notation • Xing

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei fĂźr Ausbildungsberufe und Werksstudenten


Re: Datum + 5 Jahre - 1 Tag

Beitrag von MAJOR_TOM (ForumUser / 20 / 1 / 1 ) »

Code: Alles auswählen.

DATA(lv_datum) = CONV d( CONV d( |{ sy-datum(4) + 5 }{ sy-datum+4(4) }| ) - 1 ).

Re: Datum + 5 Jahre - 1 Tag

Beitrag von ralf.wenzel (Top Expert / 4004 / 208 / 282 ) »
Jo, das isses - mit datum an allen drei Stellen, wo ein Datum steht.
Bild
Ralf Wenzel • Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
Publikationen • Ungarische Notation • Xing

Re: Datum + 5 Jahre - 1 Tag

Beitrag von MAJOR_TOM (ForumUser / 20 / 1 / 1 ) »
ralf.wenzel hat geschrieben: ↑
04.12.2025 11:31
Jo, das isses - mit datum an allen drei Stellen, wo ein Datum steht.
Wie bitte? :)

Re: Datum + 5 Jahre - 1 Tag

Beitrag von ralf.wenzel (Top Expert / 4004 / 208 / 282 ) »

Code: Alles auswählen.

datum = CONV d( CONV d( |{ datum(4) + 5 }{ datum+4(4) }| ) - 1 ).
Bild
Ralf Wenzel • Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
Publikationen • Ungarische Notation • Xing

Re: Datum + 5 Jahre - 1 Tag

Beitrag von Thomas R. (Expert / 766 / 83 / 40 ) »
Hallo zusammen:

Auch auf die Gefahr hin den Leu zu wecken:
Ist das alte

Code: Alles auswählen.

datum(4) = datum(4) + 5. 
datum = datum - 1.
nicht viel einfacher nachzuvollziehen als das modernere

Code: Alles auswählen.

datum = CONV d( CONV d( |{ datum(4) + 5 }{ datum+4(4) }| ) - 1 ).
Bei beiden "Codestrecken" muss man wissen wie ABAP ein Datum intern abspeichert.

Oder bin einfach ich zu alt?
Thomas R.

Folgende Benutzer bedankten sich beim Autor Thomas R. fĂźr den Beitrag (Insgesamt 2):
PeterPalettiblack_adept


Re: Datum + 5 Jahre - 1 Tag

Beitrag von PeterPaletti (Specialist / 376 / 35 / 104 ) »
Man kĂśnnte aber auch eine Methode benutzen:

Code: Alles auswählen.

WRITE: / CONV d( cl_reca_date=>add_months_to_date( EXPORTING id_date = sy-datum id_months = 60 )  - 1 ).

Re: Datum + 5 Jahre - 1 Tag

Beitrag von ralf.wenzel (Top Expert / 4004 / 208 / 282 ) »
Was habt ihr alle bloß immer mit sy-datum? Das steht in keinem meiner Postings 😉 Wahrscheinlich ist Peters Lösung die schönste.
Bild
Ralf Wenzel • Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
Publikationen • Ungarische Notation • Xing

Re: Datum + 5 Jahre - 1 Tag

Beitrag von DeathAndPain (Top Expert / 2010 / 271 / 425 ) »
Na ja, Major Toms Lösung sieht auch nur deshalb so kompliziert aus, weil er es mit einer Inline-Deklaration des Zielfeldes verbindet, was Ralf aber anscheinend gar nicht braucht. Ohne diese kann man sich den äußeren CONV d sparen, weil er sich aus dem Datentyp von datum ergibt. Außerdem finde ich die Verkettungs-Syntax mit den Betragsstrichen nur günstig, wenn man mehr als zwei Elemente verkettet.

Dementsprechend hätte ich geschrieben:

Code: Alles auswählen.

datum = CONV d( datum(4) + 5 && datum+4 ) - 1.
Allerdings habe ich jetzt nicht ausprobiert, ob das so funktioniert oder ob er mir eine numerische Berechnung als erstes Argument einer &&-Verkettung syntaktisch um die Ohren haut.

Wenn man Thomas R.'s Ansatz verfolgt, dann wßrde ich aber fßr optimale Verständlichkeit den richtig klassischen Ansatz wählen und schreiben:

Code: Alles auswählen.

ADD 1 TO datum(4).
SUBTRACT 1 FROM datum.

Re: Datum + 5 Jahre - 1 Tag

Beitrag von ralf.wenzel (Top Expert / 4004 / 208 / 282 ) »
Moin, dein erster Satz stimmt (ein CONV kann man sich sparen), aber:
DeathAndPain hat geschrieben: ↑
04.12.2025 21:37
Dementsprechend hätte ich geschrieben:

Code: Alles auswählen.

datum = CONV d( datum(4) + 5 && datum+4 ) - 1.
Das entspricht fast meinem Beispiel aus dem OP, Syntaxfehler. "Die Angabe && DATUM+4 ist nicht vorgesehen"
Bild
Ralf Wenzel • Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
Publikationen • Ungarische Notation • Xing

Re: Datum + 5 Jahre - 1 Tag

Beitrag von DeathAndPain (Top Expert / 2010 / 271 / 425 ) »
Ok, dann wird aber sicherlich nicht datum+4, sondern der Teil vor dem && das Problem sein und von einem CONV numc4( ) umschlossen werden mĂźssen. Damit wird es natĂźrlich optisch wieder etwas unschĂśner.

Re: Datum + 5 Jahre - 1 Tag

Beitrag von black_adept (Top Expert / 4156 / 136 / 958 ) »
Eigentlich ist nur Peters Lösung sinnvoll, da ausschließlich hier der 29. Februar berücksichtigt wird. Denn die Methode hat eine recht sinnvolle/pragmatische Idee damit umzugehen.
live long and prosper
Stefan SchmĂścker

email: stefan@schmoecker.de

Re: Datum + 5 Jahre - 1 Tag

Beitrag von ralf.wenzel (Top Expert / 4004 / 208 / 282 ) »
black_adept hat geschrieben: ↑
08.12.2025 15:29
Eigentlich ist nur Peters Lösung sinnvoll, da ausschließlich hier der 29. Februar berücksichtigt wird. Denn die Methode hat eine recht sinnvolle/pragmatische Idee damit umzugehen.
Gewählt habe ich dann:

Code: Alles auswählen.

datum = cl_reca_date=>add_to_date( id_date = datum id_years = 5 )  - 1.
und das macht in Bezug auf den 29.2. genau das Richtige. Ich hatte erst befßrchtet, dass das durch das nachträgliche Abziehen eines Tages schief gehen kÜnnte.
Bild
Ralf Wenzel • Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
Publikationen • Ungarische Notation • Xing

Re: Datum + 5 Jahre - 1 Tag

Beitrag von black_adept (Top Expert / 4156 / 136 / 958 ) »
DeathAndPain hat geschrieben: ↑
04.12.2025 21:37
Wenn man Thomas R.'s Ansatz verfolgt, dann wßrde ich aber fßr optimale Verständlichkeit den richtig klassischen Ansatz wählen und schreiben:

Code: Alles auswählen.

ADD 1 TO datum(4).
SUBTRACT 1 FROM datum.
Ich finde diese Schreibweise erschreckend gut lesbar und verwende sie auf den meisten Systemen tatsächlich. Aber in hinreichend modernen Systemen meckert der Syntaxcheck ( ich glaube SLIN ), dass ADD und SUBTRACT obsolet seien und man doch bitte += oder -= verwenden sollte, was ich dann notgedrungen auch tue.
live long and prosper
Stefan SchmĂścker

email: stefan@schmoecker.de

Re: Datum + 5 Jahre - 1 Tag

Beitrag von ralf.wenzel (Top Expert / 4004 / 208 / 282 ) »
Du wirst dich jetzt wundern: Das ist auch in meinen Augen lesbarer als

Code: Alles auswählen.

datum(4) = datum(4) + 1.
datum = datum - 1.
Aber mich fragt ja keiner 😉

Hintergrund ist wohl, dass das fßr Sonderfälle leichter lesbar ist, man aber lieber einheitlich bleiben will, weil komplexere Rechnung deutlich schneller unlesbar wird mit diesen SchlßsselwÜrtern.

Ralf
Bild
Ralf Wenzel • Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
Publikationen • Ungarische Notation • Xing

Vergleichbare Themen

6
Antw.
6158
Views
Datum + 5 Jahre - 1 Tag
von ralf.wenzel » 04.12.2025 11:03 • Verfasst in ABAPÂŽ Core
1
Antw.
3261
Views
Keine Sachkonten mit LOEVM älter 2 Jahre
von hai_friedrich » 22.07.2008 15:13 • Verfasst in ABAPÂŽ fĂźr Anfänger
2
Antw.
4204
Views
Report Painter Bericht Ăźber mehrere JAhre
von vhoffe » 30.11.2006 11:14 • Verfasst in Financials
31
Antw.
27132
Views
Wieviel ganze Jahre zwischen zwei Datumsangaben?
von ralf.wenzel » 24.09.2024 16:02 • Verfasst in ABAPÂŽ Core
0
Antw.
4391
Views

Über diesen Beitrag


Die Frage ist als "gelĂśst" markiert. Den entsprechend Beitrag findest du hier.

UnterstĂźtze die Community und teile den Beitrag fĂźr mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! WÜchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren WiderrufsmÜglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Benutzerdefinierte Felder PSP
letzen Monat von Rabea1103 1 / 46729
Spool vereinen OTF und PDF
letzen Monat von anna2205 1 / 63067
XSLT und Loipro05 Transformation
December 2025 von Torsten1965 1 / 72349