DATA l_idx LIKE sy-tabix.
DATA lv_date TYPE /bi0/oicalday.
DATA lv_calweek TYPE /bi0/oicalweek.
DATA lv_fiscper_in TYPE /bi0/oifiscper.
DATA lv_fiscper_out TYPE /bi0/oifiscper.
DATA lv_first_flag TYPE c.
DATA lv_first_p_c TYPE rvari_val_255.
DATA lv_first_p TYPE /bi0/oifiscper.
DATA l_s_range TYPE rssdlrange.
lv_date = sy-datum.
CALL FUNCTION 'DATE_GET_WEEK'
EXPORTING
date = lv_date
IMPORTING
week = lv_calweek
EXCEPTIONS
date_invalid = 1
OTHERS = 2.
CONCATENATE lv_calweek(4) '0' lv_calweek+4(2) INTO lv_fiscper_in.
* Subtract one period to the calculated fiscper
CALL FUNCTION 'RST_TOBJ_SHIFT'
EXPORTING
i_timnm = '0FISCPER'
i_timvl = lv_fiscper_in
i_shift = '-1'
i_fiscvarnt = 'WD'
IMPORTING
e_timvl = lv_fiscper_out.
*------------------------*
* add the fiscal variant
*------------------------*
READ TABLE l_t_range WITH KEY
fieldname = 'FISCVARNT'.
l_idx = sy-tabix.
IF l_idx <> 0.
l_t_range-sign = 'I'.
l_t_range-option = 'EQ'.
l_t_range-low = 'WD'.
MODIFY l_t_range INDEX l_idx.
ELSE.
CLEAR l_s_range.
l_s_range-iobjnm = '0FISCVARNT'.
l_s_range-fieldname = 'FISCVARNT'.
l_s_range-sign = 'I'.
l_s_range-option = 'EQ'.
l_s_range-low = 'WD'.
APPEND l_s_range TO l_t_range.
ENDIF.
*-------------------------------------*
*add the filter for the fiscal period
*-------------------------------------*
READ TABLE l_t_range WITH KEY
fieldname = 'FISCPER'.
l_idx = sy-tabix.
IF l_idx <> 0.
l_t_range-sign = 'I'.
l_t_range-option = 'EQ'.
l_t_range-low = lv_fiscper_out.
MODIFY l_t_range INDEX l_idx.
ELSE.
CLEAR l_s_range.
l_s_range-iobjnm = '0FISCPER'.
l_s_range-fieldname = 'FISCPER'.
l_s_range-sign = 'I'.
l_s_range-option = 'EQ'.
l_s_range-low = lv_fiscper_out.
APPEND l_s_range TO l_t_range.
ENDIF.
p_subrc = 0.