Code: Alles auswählen.
do.
if sy-fdayw = 5.
*nimm das datum*
exit.
else.
datum = datum - 1.
endif.
enddo.
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 .
Ja. probier's aus.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?
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?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.
Ich glaube kaum, dass das besser ist.cosmo hat geschrieben:Gast hat folgendes geschriebenHier könnte man zwar noch die ersten zwei Zeilen mit concatenate in einen Befehl packencosmo 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.
Code: Alles auswählen.
CONCATENATE h_date(6) '01' INTO h_date
An der Ultimo-Berechnung lässt sich wohl nichts mehr sparen.aber wie kann ich den ULTIMO-Thread nutzen, um noch mehr Coding zu sparen?
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.
Es geht auch ganz ohne FB-Aufruf.Frank Dittrich hat geschrieben:Aber die DO-Schleife ist überflüssig.
Man kommt mit einem FB-Aufruf aus.
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.