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 / 3943 / 105 / 886 ) »
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

4
Antw.
3070
Views
SELECT der letzten ID
von the-FoX » 18.01.2005 18:11 • Verfasst in ABAP® Core
0
Antw.
1537
Views
Selektieren des letzten timestamps
von barbara » 02.08.2006 15:10 • Verfasst in ABAP® für Anfänger
2
Antw.
3386
Views
SELECT-OPTION -> Datum und Datum - 7 Tage
von etalon » 08.09.2004 10:48 • Verfasst in ABAP® Core
7
Antw.
5768
Views
Convert Gregorianisches Datum -> Julianisches Datum
von michael baum » 06.06.2005 09:25 • Verfasst in ABAP® Core
4
Antw.
2412
Views
Letzten Wert im Loop ausgeben
von le_fuka » 22.03.2012 22:15 • Verfasst in ABAP® für Anfänger

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

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141