I have a program that, among other things, retrieves data from table RESB
based on the bdter
field, a DATS type. On the selection screen the user either specifies a range or a standard range (start of month - today) is used.
However, if I try to re-use the select-option I created for date in those cases where it isn't filled (the user entered no date range), my changes to this work area don't seem to be recognized when I use it in my select statement.
Relevant code segments follow. After some testing I've concluded that:
if
s_bdter
is not modified by the user and subsequently set in code, no records are filteredif
s_bdter
is modified by the user, records are correctly filteredif
s_bdter
is modified by the user and subsequently modified in code, records are correctly filteredSELECT-OPTIONS: s_bdter FOR ls_itab-bdter MODIF ID sbd. START-OF-SELECTION. " Set the interval. s_bdter-sign = 'I'. s_bdter-option = 'BT'. s_bdter-low = lc_bdter_start. s_bdter-high = sy-datum + 30. " This select doesn't filter on bdter unless the selection parameter was set by the user. SELECT r~aufnr p~psphi FROM resb AS r INNER JOIN afpo AS o ON o~aufnr = r~aufnr INNER JOIN prps AS p ON p~pspnr = o~projn INTO TABLE lt_resb_ss WHERE r~bdter IN s_bdter.
Is this known and documented behaviour? I resolved it by creating my own RANGE
table, is this what you're always supposed to do? Is there then no way to re-use unset select-options to prevent code duplication?
You only fill the header line of
s_bdter
. You must also append it:With this, you don't check, if it isn't filled. This check must be done explicit:
I hope my code has the correct syntax and sy-tfill is the correct value. I can't check it actual. But the principle should be clear.