IT WORK/SAP FI and ABAP

[SAP ABAP] 근무일 수 구하기

Bathildis 2025. 9. 9. 14:23
반응형
PARAMETERS: P_SDATE TYPE DATUM,
            P_EDATE TYPE DATUM.

DATA: DATE1                LIKE  SCAL-DATE,
      DATE2                LIKE  SCAL-DATE,
      FACTORYDATE1         LIKE  SCAL-FACDATE,
      FACTORYDATE2         LIKE  SCAL-FACDATE,
      WORKINGDAY_INDICATOR LIKE  SCAL-INDICATOR.

CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
  EXPORTING
    CORRECT_OPTION               = '+'
    DATE                         = P_SDATE
    FACTORY_CALENDAR_ID          = 'KR'
  IMPORTING
    DATE                         = DATE1
    FACTORYDATE                  = FACTORYDATE1
    WORKINGDAY_INDICATOR         = WORKINGDAY_INDICATOR
  EXCEPTIONS
    CALENDAR_BUFFER_NOT_LOADABLE = 1
    CORRECT_OPTION_INVALID       = 2
    DATE_AFTER_RANGE             = 3
    DATE_BEFORE_RANGE            = 4
    DATE_INVALID                 = 5
    FACTORY_CALENDAR_NOT_FOUND   = 6
    OTHERS                       = 7.

CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
  EXPORTING
    CORRECT_OPTION               = '-'
    DATE                         = P_EDATE
    FACTORY_CALENDAR_ID          = 'KR'
  IMPORTING
    DATE                         = DATE2
    FACTORYDATE                  = FACTORYDATE2
    WORKINGDAY_INDICATOR         = WORKINGDAY_INDICATOR
  EXCEPTIONS
    CALENDAR_BUFFER_NOT_LOADABLE = 1
    CORRECT_OPTION_INVALID       = 2
    DATE_AFTER_RANGE             = 3
    DATE_BEFORE_RANGE            = 4
    DATE_INVALID                 = 5
    FACTORY_CALENDAR_NOT_FOUND   = 6
    OTHERS                       = 7.

DATA(LV_TEMP) = FACTORYDATE2 - FACTORYDATE1.

WRITE: / P_SDATE , ' : ' , DATE1 , ' AND FACTORY DATE: ' , FACTORYDATE1,
       / P_EDATE , ' : ' , DATE2 , ' AND FACTORY DATE: ' , FACTORYDATE2,
       / 'FACTORYDATE2 - FACTORYDATE1 = ', LV_TEMP.

LV_TEMP = LV_TEMP + 1.

WRITE: / 'FACTORYDATE2 - FACTORYDATE1 + 1 = ', LV_TEMP.

 

 

원래 DO나 LOOP을 돌면서 근무일 여부 체크해서 더해줬는데 

단순히 시작일과 끝날의 factorydate를 구해서 빼주고 + 1을 해주면 실제 근무일을 구해줄 수 있다.

factorydate는 지정된 달력의 근무일수 index 번호이다.

 

그리고 CORRECT_OPTION은 시작일은 +, 종료일은 -로 해주어야 근무일 수를 정확하게 구할 수 있다.

예를 들면 시작일이 2025.06.01일 경우 일요일인데 그렇다면 다음 근무일인 2025.06.02가 나와야 하니 +이고,

종료일이 2025.05.31일 경우 토요일이기 때문에 그 전날 근무일인 2025.05.30까지 계산되어야 하므로 -를 해주어야 한다.

반응형