* 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 '+'.
* Anzahl Arbeitstage, die zum Fabrikkalenderdatum dazugerechnet werden sollen
PARAMETERS: p_days TYPE i DEFAULT 3.
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: / 'Ursprgl. Datum:', p_date.
WRITE: / 'Fabrikkalenderdatum:', lv_fabkldate.
WRITE: / 'Nummer des Arbeitstags:', lv_factorydate.
* Anzahl Tage zu Fabrikkalenderdatum hinzuzurechnen
lv_factorydate = lv_factorydate + p_days.
WRITE: / 'Korrigierter Arbeitstag:', lv_factorydate.
DATA: lv_new_date TYPE scal-date.
* Kalenderfunktion Datum zu einem Fabrikkalenderdatum geben
CALL FUNCTION 'FACTORYDATE_CONVERT_TO_DATE'
EXPORTING
factorydate = lv_factorydate
factory_calendar_id = lv_t001w-fabkl
IMPORTING
date = lv_new_date
EXCEPTIONS
calendar_buffer_not_loadable = 1
factorydate_after_range = 2
factorydate_before_range = 3
factorydate_invalid = 4
factory_calendar_id_missing = 5
factory_calendar_not_found = 6
OTHERS = 7.
IF sy-subrc = 0.
WRITE: / 'Neues Fabrikkalenderdatum:', lv_new_date.
ENDIF.
ENDIF.
ELSE.
WRITE: / |Kein Fabrikkalender zum Werk { p_werks } verfügbar.|.
ENDIF.