Basically, to get working schedule we just have to use FM ‘HR_PERSONAL_WORK_SCHEDULE’.
But when we are not using ABAP HR (Logical Database) this FM become not that simple to use.
Now, here I share my method to get working schedule
TYPES: BEGIN OF ty_work,
pernr TYPE pernr-pernr,
datum TYPE datum,
kurzt TYPE t246-kurzt, " day name
tprog TYPE tprog, " FREE = off
END OF ty_work,
tt_work TYPE TABLE OF ty_work WITH EMPTY KEY.
CLASS lcl_main DEFINITION.
PUBLIC SECTION.
METHODS:
get_work_schedule
RETURNING VALUE(rt_psp) TYPE tt_work.
ENDCLASS.
CLASS lcl_main IMPLEMENTATION.
METHOD get_work_schedule.
DATA:
lo_data TYPE REF TO data,
lr_pernr TYPE RANGE OF p_pernr,
lv_begda TYPE datum VALUE '20230101', " begin date
lv_endda TYPE datum VALUE '20230131'. " end date
FIELD-SYMBOLS:
<lfs_t_data> TYPE ANY TABLE.
" get all employees
SELECT pernr
FROM pa0000
INTO TABLE t_0000
WHERE ( begda <= sy-datum AND endda >= sy-datum ) AND stat2 = '3'.
lr_pernr = VALUE #( FOR w IN t_0000 ( low = w-pernr sign = 'I' option = 'EQ' ) ).
cl_salv_bs_runtime_info=>set( EXPORTING display = abap_false
metadata = abap_false
data = abap_true ).
SUBMIT rptpsh10
WITH pnppernr IN lr_pernr
WITH pnpbegda EQ lv_begda
WITH pnpendda EQ lv_endda
WITH pnptimed EQ ''
AND RETURN.
TRY.
cl_salv_bs_runtime_info=>get_data_ref(
IMPORTING r_data = lo_data ).
ASSIGN lo_data->* TO <lfs_t_data>.
rt_psp = CORRESPONDING #( <lfs_t_data> ).
CATCH cx_salv_bs_sc_runtime_info ##NO_HANDLER.
MESSAGE 'Unable to retrieve ALV data' TYPE 'E'.
ENDTRY.
cl_salv_bs_runtime_info=>clear_all( ).
ENDMETHOD. " get_work_schedule
ENDCLASS.
references:
https://saptrick.blogspot.com/2015/11/submit-for-hrhcm-related-reports-abap.html?m=1
https://abapmemo.com/get-alv-reports-output-into-internal-table-mb52/