* Transaktion: SCAL (Fabrikkalender mit CUA-Oberfläche)
* Tabelle: TFACD (Fabrikkalenderdefinitionen)
* Werk
PARAMETERS: p_werks TYPE t001w-werks DEFAULT '10'.
* zu prüfendes Datum
PARAMETERS: p_date TYPE scal-date DEFAULT '20190101'.
* Kennzeichen, wie Arbeitstag berechnet werden soll:
* '+' nächster Arbeitstag
* '-' vorheriger Arbeitstag
PARAMETERS: p_corr TYPE scal-indicator DEFAULT '+'.
START-OF-SELECTION.
* Fabrikkalender zum Werk ermitteln
SELECT SINGLE *
INTO @DATA(lv_t001w)
FROM t001w WHERE werks = @p_werks.
IF sy-subrc = 0.
DATA: lv_fabkldate TYPE scal-date.
DATA: lv_factorydate TYPE scal-facdate.
DATA: lv_workingday_indicator TYPE scal-indicator.
* Kalenderfunktion Fabrikkalenderdatum zu einem Datum geben
CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
EXPORTING
factory_calendar_id = lv_t001w-fabkl " Schlüssel des Fabrikkalenders
correct_option = p_corr " Kennzeichen, wie Arbeitstag berechnet werden soll
date = p_date " Datum, das in Fabrikkalenderdatum umzuwandeln ist
IMPORTING
date = lv_fabkldate " Fabrikkalenderdatum
factorydate = lv_factorydate " Nummer des Arbeitstags im angegebenen Kalender
workingday_indicator = lv_workingday_indicator " Kennzeichen, ob Datum ein Arbeitstag ist
EXCEPTIONS
calendar_buffer_not_loadable = 1
correct_option_invalid = 2
date_after_range = 3
date_before_range = 4
date_invalid = 5
factory_calendar_not_found = 6
OTHERS = 7.
IF sy-subrc = 0.
WRITE: / 'Werk:', p_werks.
WRITE: / 'ID Fabrikkalender:', lv_t001w-fabkl.
WRITE: / 'Datum:', p_date.
WRITE: / 'Fabrikkalenderdatum:', lv_fabkldate.
WRITE: / 'Nummer des Arbeitstags:', lv_factorydate.
WRITE: / 'Datum ist Arbeitstag:', lv_workingday_indicator.
ENDIF.
ELSE.
WRITE: / |Kein Fabrikkalender zum Werk { p_werks } verfügbar.|.
ENDIF.