본문 바로가기
SAP/SAP-ABAP

::SAP-ABAP::휴일 여부를 점검하여 다음 근무일 계산하는 로직

by 피키로그 2022. 7. 12.

안녕하세요. 피키로그입니다.

오늘은 특정 일자가 휴일인지 점검하여, 다음 근무일을 계산하는 로직을 가져왔습니다!

 

대금 지급일자과 같은 주요 일자가 휴일인 경우,

다음 근무일에 지급이 수행돼야 하기 때문에 아래와 같은 로직으로 User Exit (GGB1), 대체(GGB0) 등에서 활용할 수 있습니다.

 

1] 계산 로직

1-1. 일자의 요일을 구하는 DAY_IN_WEEK 펑션을 사용하여, 해당 일자의 요일을 구합니다.

: 반환 값이 6이면 토요일, 7이면 일요일입니다.

 

1-2. THOC을 조회하여 지급일자가 SAP 공휴일 달력에 기록된 공휴일인지 점검 합니다.

 

1-3. 지급일자가 주말 또는 공휴일인 경우 +1일을 추가하여, 다시 점검을 수행하도록 Do문을 10 times 수행합니다.

  DATA: l_wkgub TYPE p,              "요일 구분
        l_ftgid LIKE thoc-ftgid,     "공휴일 키
        l_hlgub LIKE scal-indicator. "휴일여부

  pv_paydt = sy-datum. "이월처리 하는 날짜 입력

  DO 10 TIMES.
    "1. 다음 지급일의 요일 계산
    CLEAR: l_wkgub, l_ftgid, l_hlgub.
    CALL FUNCTION 'DAY_IN_WEEK'
      EXPORTING
        datum  = pv_paydt
      IMPORTING
        wotnr  = l_wkgub
      EXCEPTIONS
        OTHERS = 1.

    "2. 지급기산일이 휴일인지 점검
    SELECT SINGLE ftgid
      INTO l_ftgid
      FROM thoc           "공휴일 달력
     WHERE ident = 'KR'   "PMC FI Cal.
       AND datum = pv_paydt.

    IF sy-subrc = 0.
      l_hlgub = 'X'.
    ENDIF.

    "3. 토,일,공휴일인지에 따른 처리
    IF l_wkgub = 6 OR "토요일
       l_wkgub = 7 OR "일요일
       l_hlgub = 'X'. "공휴일(HR)

       "토,일,공휴일이면 다음 지급일을 1씩 증가해서 재실행
       pv_paydt = pv_paydt + 1.

    ELSE.
       "토,일,공휴일이 아니면 루프를 빠져나옴
       EXIT.

    ENDIF.

  ENDDO.

 

 

2] SAP 공휴일 달력 Table : THOC

공휴일 달력(IDENT)와 일자(DATUM)를 조건으로 입력하면 아래와 같이 공휴일로 지정된 날짜를 확인하실 수 있습니다.

댓글