Wieviel ganze Jahre zwischen zwei Datumsangaben?

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

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
32 Beiträge • Seite 1 von 3 (current) Nächste
32 Beiträge Seite 1 von 3 (current) Nächste

Wieviel ganze Jahre zwischen zwei Datumsangaben?

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Moin,

ich muss ermitteln, wie viele GANZE JAHRE zwischen zwei Datumsangaben liegen.

Also:

01.04.23 -- 01.01.24 -- 0 Jahre
01.05.22 -- 01.05.25 -- 3 Jahre
01.01.21 -- 01.02.22 -- 1 Jahr

Muss ich mir das selbst programmieren oder gibt es da schon sowas?


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

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


Re: Wieviel ganze Jahre zwischen zwei Datumsangaben?

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Ich antworte mir mal selbst: cl_reca_date=>get_date_diff( ) gibt in ED_YEARS die Zahl der Jahre zurück..... 😉

Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing


Re: Wieviel ganze Jahre zwischen zwei Datumsangaben?

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
@Ralf:
Angenommen du würdest daraus jetzt eine Methode schreiben, die 2 Datümer entgegennimmt und die Anzahl der Jahre als Returnparameter zurückgibt ( also einen Utilitywrapper für die von dir angesprochene Klasse ).
Da du ja immer UnitTests propagierst: Wie würde ein Test aussehen, der testet, ob die richtige Anzahl Jahre für 2.10.2022 und 1.10.2023 von der Methode gefunden wird.
Und die allerspannendste Frage: Woher weißt du eigentlich das richtige Ergebnis, das du dem Unittest zum Vergleich mitgibst? Was wäre es denn in diesem Fall? 😇
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Wieviel ganze Jahre zwischen zwei Datumsangaben?

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Das ist kein volles Jahr. Und wie so ein Test aussehen würde? Ich würde mir ein paar Fälle raussuchen, wo ich weiß, was rauskommen muss und die Methode aufrufen und das Ergebnis mit dieser "Musterlösung" vergleichen. Gerade Grenzfälle würden sich da anbieten, also die, wo man nicht auf den ersten Blick sieht "ist das ein Jahr oder nicht?". Idealerweise hat der Anwender solche Grenzfälle auf Lager, weil er mir ja auch erklären muss, was in seinem Kopf ein volles Jahr im Sinne der Anforderung ist.

Und ja: Ich habe genau so einen Wrapper geschrieben 😉 Aber ohne Unit-Test, weil das wirklich trivial ist.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Wieviel ganze Jahre zwischen zwei Datumsangaben?

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Also, wenn man SENDEN klickt und denkt, da passiert nichts und klickt das nochmal, wird doppelt gepostet. Kann man das abstellen? Sowas wie "wenn SENDEN geklickt, akzeptiere 5 Sek. lang kein weiteres SENDEN mehr"?

Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Wieviel ganze Jahre zwischen zwei Datumsangaben?

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
ralf.wenzel hat geschrieben:
25.09.2024 11:10
Und ja: Ich habe genau so einen Wrapper geschrieben 😉 Aber ohne Unit-Test, weil das wirklich trivial ist.
Schreib mal einen Unit-Test für genau diesen Fall bzw. teste mal deine Methode aus was die in diesem Fall zurück liefert. Ich habe die Frage nicht ohne Hintergedanken gestellt!
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Wieviel ganze Jahre zwischen zwei Datumsangaben?

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Ausgehend von dieser statischen Methode (die ich schon allein deshalb schreiben würde, weil ich sie Dank Returning-Parameter funktional einsetzen kann):

Code: Alles auswählen.

  class-methods CALC_DIFF_FULL_YEARS
    importing
      !I_FROM_DATE type D
      !I_TO_DATE type D
    returning
      value(R_FULL_YEARS) type I .

Code: Alles auswählen.

  METHOD calc_diff_full_years.
    cl_reca_date=>get_date_diff(
      EXPORTING
        id_date_from     = i_from_date
        id_date_to       = i_to_date
      IMPORTING
        ed_years         = r_full_years
    ).
  ENDMETHOD.
Könnte ein Unit-Test-Rohling ungefähr so aussehen:

Code: Alles auswählen.

CLASS ltc_developertests DEFINITION 
  FOR TESTING
  DURATION SHORT
  RISK LEVEL HARMLESS.

  PUBLIC SECTION.
  PROTECTED SECTION.
  PRIVATE SECTION.
    METHODS test_01 FOR TESTING.
ENDCLASS.

CLASS ltc_developertests IMPLEMENTATION.
  METHOD test_01.
    cl_abap_unit_assert=>assert_equals( 
      act   = (classname)=>calc_diff_full_years( 
                i_from_date = '00000000' 
                  i_to_date = '00000000' 
              )
      exp   = '0'
      msg   = 'Sinnvolle Fehlermeldung ausgeben'
      level = if_aunit_constants=>critical
      quit  = if_aunit_constants=>method
    ).
  ENDMETHOD.
ENDCLASS.
Den Klassennamen habe ich entfernt, weil Klassennamen Kundeninterna sind. Da kannst du eigentlich jede Klasse nehmen, sogar eine lokale Klasse.

Diesen Rohling könnte man zu beliebig vielen Tests ausweiten, indem man zwei Datumsangaben einträgt und den zu erwartenden, "richtigen" Wert für die Zahl der Jahre.


Ralf

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
rob_abc

Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Wieviel ganze Jahre zwischen zwei Datumsangaben?

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
Mach das ganze bitte mal für die Datümer 2.10.2022 und 1.10.2023 und staune.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Wieviel ganze Jahre zwischen zwei Datumsangaben?

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
OK, der Fall ist bei uns nicht aufgefallen, weil wir tatsächlich nur mit Monatsersten rechnen. Ich spreche mal mit dem Anwender, aber ich halte den Fall für die Praxis nicht für relevant.

Interessant ist der Effekt aber trotzdem. Die Frage ist, wie man damit umgeht.

Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Wieviel ganze Jahre zwischen zwei Datumsangaben?

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
M.E. ist das ein Fehler in der Methode. Ich bin drauf gestoßen, weil mich die von dir angesprochenen Grenzfälle ( Schaltjahre) interessiert hatten. Das wollte ich dann mit einem Nicht-Schaltjahrfall ( 2022 nach2023 ) vergleichen und da ist es mir aufgefallen, dass hier ein völlig unerwartetes Ergebnis rauskommt.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Wieviel ganze Jahre zwischen zwei Datumsangaben?

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Das ist echt bitter, weil man sowas Kleines kaum der SAP melden kann. Ich kann es nicht, weil ich keinen S-User habe und der Kunde wird mir sagen "nicht relevant für uns, da stecken wir keinen Aufwand rein".

Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Wieviel ganze Jahre zwischen zwei Datumsangaben?

Beitrag von msfox (Specialist / 366 / 56 / 76 ) »
Wir nehmen den Fuba FIMA_DAYS_AND_MONTHS_AND_YEARS.

Dieser liefert für 02.10.2022 - 01.10.23
E_DAYS 364
E_MONTHS 11
E_YEARS 0

Dieser liefert für 02.10.2023 - 01.10.24
E_DAYS 365 (Schaltjahr)
E_MONTHS 11
E_YEARS 0

für 01.10.2022 - 01.10.23
E_DAYS 365
E_MONTHS 12
E_YEARS 1

für 01.10.2023 - 01.10.24
E_DAYS 366 (Schaltjahr)
E_MONTHS 12
E_YEARS 1
--
OT: Bei uns ist immer noch wichtig, wie der Kunde ein Jahr definiert - hauptsächlich bei der Abrechnung von Beträgen. Taggenau 360, wenn jeder Monat mit 30 Tagen definiert und Jahresbeträge somit gleichmäßig auf Monate aufgeteilt werden sollen. Oder taggenau365.
--
Edit: Ich habe zwar einen S-Nutzer und hätte auch eine OSS-Meldung bei der SAP aufgemacht. ABER: Mein letzte OSS-Meldung ist glaube über 5 Jahre her. Unter support.sap.com finde ich keine Möglichkeit, eine Meldun zu öffnen. Keine Ahnung, wie das aktuell geht. Irgendwie landet man immer wieder bei me.sap.com....
--
EDIT 26.09.
Man darf am Fuba FIMA_DAYS_AND_MONTHS_AND_YEARS das Flag I_FLG_ROUND_UP nicht setzen. Sonst sind z.B. der 30.09.2022 - 02.10.2023 auch ein Jahr.
Zuletzt geändert von msfox am 26.09.2024 07:45, insgesamt 2-mal geändert.

Re: Wieviel ganze Jahre zwischen zwei Datumsangaben?

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Ich hoffe du hast dich beim Monat des Von-Datums regelmäßig verschrieben, sonst würd da immer was Unerklärliches rauskommen 😉


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Wieviel ganze Jahre zwischen zwei Datumsangaben?

Beitrag von msfox (Specialist / 366 / 56 / 76 ) »
Ja, Copy&Paste -Fehler. Hab's angepasst.
Hab gefunden wo man eine OSS-Meldung bei der SAP öffnet und auch für die Methode cl_reca_date=>get_date_diff() eine erstellt.
--
Aber ist das wirklich ein Fehler?
Wenn ich z.B. vom 01.01. - 31.12. nehmen würde, da ist das ja 1 Jahr.
Der Fuba FIMA_DAYS_AND_MONTHS_AND_YEARS liefert das hingegen nicht, wenn man das Flag I_FLG_ROUND_UP nicht setzt.
Zuletzt geändert von msfox am 26.09.2024 07:46, insgesamt 1-mal geändert.

Vergleichbare Themen

3
Antw.
6828
Views
Nullwert von Datumsangaben
von m.schwertle » 05.12.2007 15:28 • Verfasst in ABAP® für Anfänger
4
Antw.
8371
Views
Differenz in Jahren zwischen 2 Datumsangaben
von sap-known » 17.06.2007 17:26 • Verfasst in ABAP® für Anfänger
1
Antw.
1364
Views
Keine Sachkonten mit LOEVM älter 2 Jahre
von hai_friedrich » 22.07.2008 15:13 • Verfasst in ABAP® für Anfänger
0
Antw.
1210
Views
Veranstaltung löscht sich beim Verschieben von Datumsangaben
von F_Lee » 10.06.2008 12:47 • Verfasst in Human Resources
2
Antw.
2039
Views
Report Painter Bericht über mehrere JAhre
von vhoffe » 30.11.2006 11:14 • Verfasst in Financials

Ü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

Aktuelle Forenbeiträge

Daten an Tabelle binden
vor 12 Stunden von Bright4.5 3 / 1485
Regex in where
vor 14 Stunden von tar 6 / 158

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.

Aktuelle Forenbeiträge

Daten an Tabelle binden
vor 12 Stunden von Bright4.5 3 / 1485
Regex in where
vor 14 Stunden von tar 6 / 158

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821