Code:
function <censored>_date_subtract_month.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(DATE) LIKE SY-DATUM
*" REFERENCE(MONTHS)
*" EXPORTING
*" VALUE(DATE_E) LIKE SY-DATUM
*" EXCEPTIONS
*" DATE_ERROR
*"----------------------------------------------------------------------
* 46C ** *1.*3.*002 FM <censored>_DATE_SUBTRACT_MONTH copied to current FM
* copied from <censored> to <censored>
data: year type i.
data: month type i.
data: month_sub type i.
data: year_sub type i.
year = date(4).
month = date+4(2).
year_sub = months div 12.
month_sub = months mod 12.
year = year - year_sub.
if month_sub >= month.
year = year - 1.
if month_sub = month.
month = 12.
else.
month = ( 12 - month_sub ) + month.
endif.
elseif month_sub > 0.
month = month - month_sub.
endif.
if year <= 0.
message e*54(**) raising date_error. "copied from 154(<censored>)
endif.
date_e = date.
date_e(4) = year.
date_e+4(2) = month.
endfunction.