Sunday, November 14, 2010

Subroutine to Add or Subtract specified number of months from a period (YYYYMM)

*&---------------------------------------------------------------------*
*& Form add_sub_period Adds or Subtracts specified number of
*& months from a period
*&---------------------------------------------------------------------*
* Adds or Subtracts specified number of months from a period
*----------------------------------------------------------------------*
* -->P_OPERATION + Add or - Subtract
* -->P_NO_MOS Number of Months
* -->P_PERIOD Period (YYYYMM)
*----------------------------------------------------------------------*
FORM add_sub_period
USING p_operation TYPE c
p_no_mos TYPE i
CHANGING p_period TYPE spmon.

*-Local Data Declaration
DATA:
lv_month TYPE n LENGTH 2,
lv_year TYPE n LENGTH 4,
lv_mod TYPE i,
lv_div TYPE i.

*-Copy Month & Year
lv_month = p_period+4(2).
lv_year = p_period(4).

*-Number of months to add or subtract
DO p_no_mos TIMES.

* -Add Months
IF p_operation EQ '+'.
IF lv_month EQ 12.
ADD 1 TO lv_year.
lv_month = 1.
ELSE.
ADD 1 TO lv_month.
ENDIF.
* -Subtract Months
ELSEIF p_operation EQ '-'.
IF lv_month EQ 1.
SUBTRACT 1 FROM lv_year.
lv_month = 12.
ELSE.
SUBTRACT 1 FROM lv_month.
ENDIF.
ENDIF.

ENDDO.

*-Pass Year and Month back to parameters
p_period(4) = lv_year.
p_period+4(2) = lv_month.

ENDFORM. "add_sub_period