IT WORK/SAP FI and ABAP

[ABAP] 기간 구해서 한글로 표시하는 펑션

Bathildis 2025. 12. 11. 13:04
반응형
FUNCTION YGET_PERIOD.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(I_SDATE) TYPE  DATUM DEFAULT SY-DATUM
*"     VALUE(I_EDATE) TYPE  DATUM DEFAULT SY-DATUM
*"  EXPORTING
*"     REFERENCE(E_PERIOD) TYPE  CHAR10
*"----------------------------------------------------------------------


DATA: LV_EDATE TYPE DATUM.

  DATA: LV_YEARS  TYPE I,
        LV_MONTHS TYPE I,
        LV_DAYS   TYPE I.

  DATA: LV_YEAR1  TYPE I,
        LV_YEAR2  TYPE I,
        LV_MONTH1 TYPE I,
        LV_MONTH2 TYPE I,
        LV_DAY1   TYPE I,
        LV_DAY2   TYPE I.

  " 시작일 년/월/일로 분리
  LV_YEAR1  = I_SDATE+0(4).
  LV_MONTH1 = I_SDATE+4(2).
  LV_DAY1   = I_SDATE+6(2).

  " 종료일 년/월/일로 분리 -> 종료일 없으면 현재일자로 치환
  CLEAR LV_EDATE.
  IF I_EDATE IS INITIAL.
    LV_EDATE = SY-DATUM.
  ELSE.
    LV_EDATE = I_EDATE.
  ENDIF.

  LV_YEAR2  = LV_EDATE+0(4).
  LV_MONTH2 = LV_EDATE+4(2).
  LV_DAY2   = LV_EDATE+6(2).

  " 연도 차이 계산
  LV_YEARS = LV_YEAR2 - LV_YEAR1.

  " 월 차이 계산
  LV_MONTHS = LV_MONTH2 - LV_MONTH1.

  " 일 차이 계산
  LV_DAYS = LV_DAY2 - LV_DAY1.

  "일 차이가 0 이상이면 월에 +1 (즉, 시작읿루터 종료일까지를 포함하여 계산)
  IF LV_DAYS >= 0.
    LV_MONTHS = LV_MONTHS + 1.
  ENDIF.

  "월수가 음수이면 연도에서 1 빼고 월에 12 더하기
  IF LV_MONTHS < 0.
    LV_YEARS = LV_YEARS - 1.
    LV_MONTHS = LV_MONTHS + 12.
  ENDIF.

  "년이 음수가 되지 않도록 보정
  IF LV_YEARS < 0.
    LV_YEARS = 0.
    LV_MONTHS = 0.
  ENDIF.

  E_PERIOD = CONV STRING( |{ LV_YEARS }년 { LV_MONTHS }개월| ).

ENDFUNCTION.

 

 

반응형