ABAP – 회사 달력에서 특정 기간 동안 지정된 공휴일을 모두 가져오는 방법


ABAP 프로그램을 개발하다 보면 회사 달력(공장 달력)에서 특정 기간 동안 지정된 공휴일을 모두 가져와서 처리해야 하는 경우가 있습니다.
때로는 특정 일자가 회사 달력에 공휴일로 지정된 날인지 판단해야 할 경우도 생기게 됩니다.

공휴일을 제외한 실제 근무 일수나 작업 일수를 계산해야 하는 경우에도 회사 달력의 공휴일 체크는 반드시 필요한 작업입니다.

이번 글에서는 ABAP 프로그램에서 Function 모듈의 함수를 사용하여 회사 달력의 공휴일을 가져오는 방법에 대해 알아보겠습니다.

ABAP 회사 달력에서 특정 기간 동안 지정된 공휴일을 모두 가져오기

▼ 아래 ABAP 프로그램 소스는 HOLIDAY_GET Function을 사용하여 지정한 기간의 모든 공휴일을 인터널테이블로 가져오는 로직입니다.

DATA: IT_HOLI LIKE ISCAL_DAY OCCURS 0 WITH HEADER LINE.
 
LV_ALTIME = DATE_TO – DATE_FROM.
 
CALL FUNCTION ‘HOLIDAY_GET’
  EXPORTING
    HOLIDAY_CALENDAR = ‘E3’     “회사달력지정
    FACTORY_CALENDAR = ‘E3’    “회사달력지정
    DATE_FROM = DATE_FROM      “FROM DATE
    DATE_TO   = DATE_TO        “TO DATE
* IMPORTING
*  YEAR_OF_VALID_FROM =
*  YEAR_OF_VALID_TO =
*  RETURNCODE =
  TABLES
    HOLIDAYS = IT_HOLI.   “공휴일만 저장된 ITAB.
* EXCEPTIONS
*  FACTORY_CALENDAR_NOT_FOUND = 1
*  HOLIDAY_CALENDAR_NOT_FOUND = 2
*  DATE_HAS_INVALID_FORMAT = 3
*  DATE_INCONSISTENCY = 4
*  OTHERS = 5
 
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*   WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
 
DESCRIBE TABLE IT_HOLI LINES LINE.  “LINE = 공휴일수
IF LINE <> 0.
  LV_ALTIME = LV_ALTIME – LINE. “휴무일을 뺀 순수 작업일수
ENDIF.
 

▼ 실행 결과 예제 입니다.

ABAP - 회사 달력에서 특정 기간 동안 지정된 공휴일을 모두 가져오는 방법

조회 기간이 2023.08.01에서 2023.10.31 동안 공휴일을 모두 가져오는 실행 결과입니다.
총 28일의 공휴일을 가져왔음을 알 수 있습니다. 이 기간 동안 주말인 토요일과 일요일 뿐만 아니라 광복절, 개천절 등의 공휴일이 포함됩니다.

HOLIDAY_GET의 매개변수 설명

Import 매개변수

  • HOLIDAY_CALENDAR : 공휴일이 정의된 공휴일 달력의 ID를 입력합니다.
  • FACTORY_CALENDAR : SAP 시스템에서 사용 중인 공장 달력 ID를 입력합니다.
  • DATE_FROM : 조회 기간의 시작 일자를 입력합니다.
  • DATE_TO : 조회 기간의 종료 일자를 입력합니다.

Tables 매개변수

  • HOLIDAYS : 시작 일자와 종료 일자 사이에 포함된 모든 공휴일을 인터널테이블로 가져옵니다.

※ 공휴일 달력, 공장 달력에 대한 유지보수는 SAP IMG의 달력유지보수에서 공휴일, 공휴일 달력, 공장 달력을 유지보수 하는 방법에서 확인하실 수 있습니다.

HOLIDAY_GET을 사용하여 특정 일자가 공휴일인지 확인하는 방법

HOLIDAY_GET은 기본적으로 DATE_FROM과 DATE_TO 매개변수를 사용하여 지정된 기간동안 포함된 공휴일을 가져오는 Function 모듈입니다.

만약 특정 일자가 공휴일인지 여부를 체크하려면 어떻게 하면 될까요?

방법은 간단합니다. DATE_FROM과 DATE_TO에 동일한 특정 일자를 입력하고 실행하면 됩니다.

DESCRIBE TABLE IT_HOLI LINES LINE.  “LINE = 공휴일수
LINE가 0이면 근무일, LINE이 1이면 해당 일자는 공휴일이 됩니다.

HOLIDAY_GET을 사용하여 특정 기간의 실제 근무일 수를 구하는 방법

LV_ALTIME = DATE_TO – DATE_FROM.
DESCRIBE TABLE IT_HOLI LINES LINE.  “LINE = 공휴일수
IF LINE <> 0.
  LV_ALTIME = LV_ALTIME – LINE. “공휴일을 뺀 순수 근무일 수
ENDIF.

위의 예제처럼 간단하게 근무 일수를 계산할 수 있습니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기