Aller au contenu

Abap - Filtre abap pour dtp

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.