Get 'Datum des letzten Freitag vor jeden Monatsersten'

Getting started ... Alles für einen gelungenen Start.
10 Beiträge • Seite 1 von 1
10 Beiträge Seite 1 von 1

Get 'Datum des letzten Freitag vor jeden Monatsersten'

Beitrag von Marki (ForumUser / 19 / 0 / 0 ) »
Hy,
ich hänge da mal wieder an einer 'kleinen' Challenge.
Gibt es eine Möglichkeit den im Titel genannten Wert zu bekommen? Mir würde nur ein Ansatz einfallen, der aber leider nicht ganz funktioniert.

Code: Alles auswählen.

do.
  if sy-fdayw = 5.
   *nimm das datum*
   exit.
  else.
   datum = datum - 1.
  endif.
enddo.
Aber leider kann ich sy-fdayw ja nicht verwenden. Hat jmd eine bessere Idee?

Grüsse,

Marki

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


Beitrag von cosmo (Specialist / 175 / 0 / 0 ) »
Versuchs mal hiermit:

Code: Alles auswählen.

FORM last_friday_in_month USING monat TYPE spmon.
* SPMON hat das Format 'YYYYMM'

  DATA h_date TYPE d.
  DATA h_tagnr TYPE p.

  h_date(6) = monat.
  h_date+6 = '01'.
  ADD 31 TO h_date.
  SUBTRACT h_date+6 FROM h_date.
* Jetzt bist Du auf dem Monatsletzten.
  DO.
*   Dieser FuBa ermittelt den Tag zum Datum
    CALL FUNCTION 'DAY_IN_WEEK'
         EXPORTING
              datum = h_date
         IMPORTING
              wotnr = h_tagnr.

    IF h_tagnr = 5. " der 5. ist der Freitag
      WRITE 'Letzter Freitag ist'.
      WRITE h_date DD/MM/YYYY.
      EXIT.
    ELSE.
      SUBTRACT 1 FROM h_date.
    ENDIF.
  ENDDO.
ENDFORM             .
Gruß Jörg

Beitrag von Marki (ForumUser / 19 / 0 / 0 ) »
Hy Jörg,
ich hab's "hiermit" mal versucht... :)

FULL ACK! Ich füttere den FuBa zwar mit meinen Daten, aber sonst hab ich Deine Lösung übernommen.
Dann war mein Ansatz ja gar nicht so verkehrt :P

Danke & Grüsse,

Marki

Beitrag von Gast ( / / 0 / 3 ) »
cosmo hat geschrieben:

Code: Alles auswählen.

  h_date(6) = monat.
  h_date+6 = '01'.
  ADD 31 TO h_date.
  SUBTRACT h_date+6 FROM h_date.
* Jetzt bist Du auf dem Monatsletzten.
Umständlich.

Wie's besser geht, hatten wir schon mal.
(Im Forum nach ULTIMO suchen)

Beitrag von Marki (ForumUser / 19 / 0 / 0 ) »
Und was passiert, wenn Du z.B. im Februar bist?
Der hat ja nur 28 bzw. 29 Tage.
Checkt das System das, wenn Du auf den ersten Februar 31 addierst?

Beitrag von Gast ( / / 0 / 3 ) »
Marki hat geschrieben:Und was passiert, wenn Du z.B. im Februar bist?
Der hat ja nur 28 bzw. 29 Tage.
Checkt das System das, wenn Du auf den ersten Februar 31 addierst?
Ja. probier's aus.
Dann ist der 3. oder 4. März, und es werden anschließend 3 oder 4 Tage abgezogen, um auf den 28. oder 29. Februar zu kommen.

Beitrag von cosmo (Specialist / 175 / 0 / 0 ) »
Gast hat folgendes geschrieben
cosmo hat folgendes geschrieben::

Code: Alles auswählen.

  h_date(6) = monat. 
  h_date+6 = '01'. 
  ADD 31 TO h_date. 
  SUBTRACT h_date+6 FROM h_date. 
* Jetzt bist Du auf dem Monatsletzten. 


Umständlich.
Jetzt hast Du mich neugierig gemacht, Gast. Hier könnte man zwar noch die ersten zwei Zeilen mit concatenate in einen Befehl packen, aber wie kann ich den ULTIMO-Thread nutzen, um noch mehr Coding zu sparen?
Jörg Krause, Anwendungsentwickler und SAP-Betreuer MM/PP

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) »
cosmo hat geschrieben:Gast hat folgendes geschrieben
cosmo hat folgendes geschrieben::

Code: Alles auswählen.

  h_date(6) = monat. 
  h_date+6 = '01'. 
  ADD 31 TO h_date. 
  SUBTRACT h_date+6 FROM h_date. 
* Jetzt bist Du auf dem Monatsletzten. 


Umständlich.
Hier könnte man zwar noch die ersten zwei Zeilen mit concatenate in einen Befehl packen
Ich glaube kaum, dass das besser ist.
Denn CONCATENATE müsste bei

Code: Alles auswählen.

CONCATENATE h_date(6) '01' INTO h_date
erst "errechnen", ab welchem Offset die '01' eingefügt werden soll, obwohl der Offset ja schon feststeht.
aber wie kann ich den ULTIMO-Thread nutzen, um noch mehr Coding zu sparen?
An der Ultimo-Berechnung lässt sich wohl nichts mehr sparen.
Aber die DO-Schleife ist überflüssig.
Man kommt mit einem FB-Aufruf aus.

Code: Alles auswählen.

* h_date - h_tagnr ergibt den Sonntag der vorhergehenden Woche
IF h_tagnr LT 5." den wahrscheinlichsten Fall zuerst
  h_date = h_date - h_tagnr - 2.
ELSEIF h_tagnr GT 5.
  h_date = h_date - h_tagnr + 5.
* ELSE ist überflüssig, h_date ist korrekt
ENDIF.

Beitrag von Jupp (ForumUser / 47 / 0 / 2 ) »
Und man darf nicht den allerletzten Freitag im Dezember 9999 suchen.
Denn da geht die Ultimoberechnung von Cosmo leider auf die Bretter.
Always Better Alternatives Possible.

Beitrag von black_adept (Top Expert / 4158 / 136 / 959 ) »
Frank Dittrich hat geschrieben:Aber die DO-Schleife ist überflüssig.
Man kommt mit einem FB-Aufruf aus.
Es geht auch ganz ohne FB-Aufruf.

Code: Alles auswählen.

FORM last_friday_before_month USING monat TYPE spmon.
  DATA: h_date TYPE sydatum VALUE '00000001'.

  h_date(6) = monat.
  h_date    = h_date - h_date+6(2).  " Ultimo
  h_date    = h_date - ( ( h_date - sy-datum - 5 + sy-fdayw ) MOD 7 ).
  
  WRITE:/ h_date.
ENDFORM.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Seite 1 von 1

Vergleichbare Themen

0
Antw.
2107
Views
Selektieren des letzten timestamps
von barbara » 02.08.2006 15:10 • Verfasst in ABAP® für Anfänger
4
Antw.
3295
Views
Letzten Wert im Loop ausgeben
von le_fuka » 22.03.2012 22:15 • Verfasst in ABAP® für Anfänger
4
Antw.
4524
Views
Erster und letzten Datensatz eines Reports
von sacair » 25.06.2009 10:09 • Verfasst in ABAP® für Anfänger
4
Antw.
2340
Views
Analyse was der User in den letzten Tagen gemacht hat
von Kleenmex » 07.11.2006 10:24 • Verfasst in ABAP® für Anfänger
7
Antw.
4622
Views
Anhand des Stichtags die letzten Datensätze ermitteln
von kaim77 » 27.12.2022 17:26 • Verfasst in ABAP® Core

Aktuelle Forenbeiträge

ATC Finding in Smartforms
vor 2 Tagen von sap_enthusiast 2 / 289
LSMW-Problem
vor 3 Tagen von rob_abc 4 / 345

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

ATC Finding in Smartforms
vor 2 Tagen von sap_enthusiast 2 / 289
LSMW-Problem
vor 3 Tagen von rob_abc 4 / 345

Unbeantwortete Forenbeiträge

SFP/SEGW - Fehler beim Rendering
letzen Monat von Manfred K. 1 / 70395
Benutzerdefinierte Felder PSP
January 2026 von Rabea1103 1 / 123260