FIMA_DAYS_AND_MONTHS_AND_YEARS: 기간 사이의 개월 수 구하기(일수, 연수 구하기도 가능)
기간 24개월 조회만 가능하도록 제한할 때 구현
"기간 사이의 개월 수 구하기
CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS'
EXPORTING
I_DATE_FROM = GV_MON_LOW "시작 날짜 (TYPE SY-DATUM 20220101)
I_DATE_TO = GV_MON_HIGH "종료 날짜
IMPORTING
"E_MONTHS = "일수
E_MONTHS = GV_MONTH. "개월 수 (TYPE I)
"E_YEARS = "연수
RP_CALC_DATE_IN_INTERVAL: 기준일자에 대해 날짜 계산하기
날짜 값에서 -6개월할 때 구현
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
DATE = LV_DATE_LOW "계산할 날짜 (TYPE SY-DATUM)
DAYS = 0 "일 계산값
MONTHS = 6 "6개월 (월 계산값)
SIGNUM = '-' "빼주기 (부호 +, -)
YEARS = 0 "연 계산값
IMPORTING
CALC_DATE = LV_6MON_LOWD. "날짜 결과값 (TYPE SY-DATUM)
RH_PM_CONVERT_DATE_TO_MONTH: 일자 사이의 개월 수 계산
CALL FUNCTION 'RH_PM_CONVERT_DATE_TO_MONTH'
EXPORTING
BEGDA = P_SDATE "시작 날짜
ENDDA = P_EDATE "종료 날짜
IMPORTING
MONTHS = P_NUM. "개월 수
RE_ADD_MONTH_TO_DATE: MONTHS에 -, +, 숫자를 주면 원하는 OLDDATE부터 앞, 뒤의 월을 계산
CALL FUNCTION 'RE_ADD_MONTH_TO_DATE'
EXPORTING
MONTHS = P_GB " +1
OLDDATE = P_INDATE "기준일 (TYPE SY-DATUM)
IMPORTING
NEWDATE = P_OUTDATE. "결과값 (TYPE SY-DATUM)
→ 기준일에 +1개월 된 값이 P_OUTDATE에 들어감.
날짜기간 범위값 테이블 만드는 방법
날짜 조회 기간 범위의 모든 날짜값을 나열한 테이블을 만드는 방법
DATA: LV_SDATE TYPE SY-DATUM,
LV_EDATE TYPE SY-DATUM,
LV_CHDATE TYPE SY-DATUM,
LV_NUM TYPE NUM2.
RANGES: LR_MONTH FOR S066-SPMON.
CLEAR: LV_SDATE, LV_EDATE, LV_CHDATE, LV_NUM, LR_MONTH.
"잔액 필드 설정 준비(기간 값 받아오기)
LV_SDATE = S_MONTH-LOW && '01'.
IF S_MONTH-HIGH IS NOT INITIAL.
LV_EDATE = S_MONTH-HIGH && '01'.
ENDIF.
TRY.
IF S_MONTH-HIGH IS NOT INITIAL.
"일자 사이의 개월 수 계산
PERFORM CONVERT_DATE_TO_MONTH USING LV_SDATE LV_EDATE CHANGING LV_NUM.
LV_NUM = LV_NUM - 1.
LR_MONTH-SIGN = 'I'.
LR_MONTH-OPTION = 'EQ'.
LR_MONTH-LOW = LV_SDATE(6).
LR_MONTH-HIGH = ''.
APPEND LR_MONTH.
LR_MONTH-SIGN = 'I'.
LR_MONTH-OPTION = 'EQ'.
LR_MONTH-LOW = LV_EDATE(6).
LR_MONTH-HIGH = ''.
APPEND LR_MONTH.
ELSE.
LR_MONTH-SIGN = 'I'.
LR_MONTH-OPTION = 'EQ'.
LR_MONTH-LOW = LV_SDATE(6).
LR_MONTH-HIGH = ''.
APPEND LR_MONTH.
LV_NUM = 0.
ENDIF.
CATCH CX_ROOT.
LV_NUM = 0.
ENDTRY.
IF LV_NUM NE 0.
LV_CHDATE = LV_SDATE.
DO LV_NUM TIMES. "개월 수만큼 루프
"일자 +1개월 값을 계산하여 조회범위 내의 값을 모두 생성
PERFORM ADD_MONTH_TO_DATE USING '+1' LV_CHDATE CHANGING LV_CHDATE.
IF LV_CHDATE < LV_EDATE.
LR_MONTH-SIGN = 'I'.
LR_MONTH-OPTION = 'EQ'.
LR_MONTH-LOW = LV_CHDATE(6).
LR_MONTH-HIGH = ''.
APPEND LR_MONTH.
ENDIF.
ENDDO.
ENDIF.
DELETE ADJACENT DUPLICATES FROM LR_MONTH COMPARING LOW.
SORT LR_MONTH BY LOW.
'SAP > ABAP' 카테고리의 다른 글
[ABAP] RFC (0) | 2024.08.09 |
---|---|
[ABAP] FIELD-SYMBOL 필드 심볼 (0) | 2024.08.05 |
[ABAP] MOVE-CORRESPONDING, KEEPING TARGET LINES (0) | 2024.08.01 |
[ABAP] FOR ALL ENTRIES IN 인터널 테이블과의 조인 (0) | 2024.07.30 |