Deepoint написал(а):
В R/3 есть фм MONTH_PLUS_DETERMINE.
Можно скопировать его в Z в BW.
В CMOD примерно следующее. Писал в блокноте, сильно не ругайтесь на ошибки. Принцип, я думаю, тут понятен.
Code:
DATA: l_s_range type rsr_s_rangesid.
DATA: begdate type d.
DATA: enddate type d.
...
IF i_step = 1.
CASE i_vnam.
...
WHEN 'ZLAST_YEAR_MOUNTH'. " Ваша переменная
DATA: l_mounth_begin TYPE d,
l_mounth_end TYPE d,
l_lastmounth_begin TYPE d,
l_lastmounth_end TYPE d,
lastmth(10) TYPE c.
READ TABLE i_t_var_range
INTO loc_var_range
WITH KEY vnam = 'ZINPUT_MOUNTH'. " Введенный месяц
begdate = loc_var_range-high.
enddate = loc_var_range-low.
CALL FUNCTION 'ZMONTH_PLUS_DETERMINE'
EXPORTING
months = -12
olddate = begdate
IMPORTING
newdate = l_lastmounth_begin.
CALL FUNCTION 'ZMONTH_PLUS_DETERMINE'
EXPORTING
months = -12
olddate = enddate
IMPORTING
newdate = l_lastmounth_end.
l_s_range-low = l_lastmounth_begin.
l_s_range-high = l_lastmounth_end.
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
APPEND l_s_range TO e_t_range.
CLEAR l_s_range.
CLEAR: month.
ENDIF.
...
Спасибо большое за код. Но вот мне нужно немного иначе. Смотрите как я писала ранее, мне нужно создать переменную для стандартного признака 0CALMONTH "Календарный день/месяц". Но сама переменная должна определяться из другой переменной. И такая переменная есть, "Интервал месяцев". Т.е. пользователь вводит период с 01.2010 по 12.2010 - значения для переменной "Интервал месяцев", моя переменная вычисляется из этого периода 01.2010-12=01.2009 и 12.2010-12=12.2009. Я попробовала сделать свою переменную на основе не 0CALMONTH, а на основе 0CALYEAR "Календарный год" (код ниже). Но вот ничего не сработало. Не пойму, может код не верный. Получается моя переменная "Предыдущий год" и переменная из которой он рассчитывается "Интервал месяцев" основаны на разных признаках. Это имеет значение? Если правило что переменная которая рассчитывается из другой переменной и та переменная из которой рассчитывается должны быть основаны на одном и том же признаке?
*** Предыдущий год (из переменной "Интервал месяцев")
when 'ZVPYEAR'.
if i_step = 2.
loop at I_T_VAR_RANGE into zv_var.
if ( zv_var-vnam = 'ZVMONTHS' ).
zv_month = zv_var-low.
zv_year = zv_month(4).
zv_year = zv_year - 1.
L_S_RANGE-LOW = zv_year.
L_S_RANGE-SIGN = 'I'.
L_S_RANGE-OPT = 'EQ'.
append L_S_RANGE to E_T_RANGE.
exit.
endif.
endloop.
endif.