CAFE

ABAP

[FUNC]날짜 관련 함수(공휴일, 휴일 알아내기)

작성자우승권|작성시간08.10.27|조회수5,395 목록 댓글 0

날짜랑 캘린더아이디랑 넘겨주면 그날이 뭔 휴일인지 알려주는 펑션임다.
제가 요즘 급여프로그램을 만지고 있는데 추석이랑 구정에 근무한 사람에게 
일당 12000원씩 주게 해달라고 하더군요.
근데 그 두 휴일이 음력이잖아요.. 골치아프게시리..
그래서 계획근무시간 프로그램 소스코드를 뒤지니 이런 좋은 펑션이 있네요.
HR쪽 개발하시는분들.. 참고하세요.

Call Function 'HOLIDAY_CHECK_AND_GET_INFO'
       Exporting
             Date                    = '날짜'
             Holiday_Calendar_Id     = '캘린더아이디'
             With_Holiday_Attributes = 'X'
       Importing
             Holiday_Found           = '휴일이면 'X' 리턴'
       Tables
             Holiday_Attributes      = 휴일의 정보가 들어있는 internal table
       Exceptions
             Date_After_Range             = 1
             Date_Before_Range            = 2
             Date_Invalid                 = 3
             Holiday_Calendar_Id_Missing  = 4
             Calendar_Buffer_Not_Loadable = 6

위의 internal table은 DB table 'THOL'과 동일한 형식이고
DB table'THOLT'에서 휴일의 텍스트를 읽을수 있습니다.
좋죠? ^^

요함수도 쓸때가 있을까여?
날짜를 넣으면 그 날짜의 요일을 알려주는 함수입니다.

 


data: v_datum like sy-datum,
      daynr   like hrvsched-daynr,
      daytxt  like hrvsched-daytxt.
     
v_datum = '20010501'.

call function 'RH_GET_DATE_DAYNAME'
     EXPORTING
          LANGU = SY-LANGU
          DATE  = v_datum
     IMPORTING
          DAYNR = daynr
          DAYTXT = daytxt.

write: / daytxt.

화요일


공휴일 구하는 함수예요.

원래의 기능은 두 날짜 사이에 있는 공휴일/일요일 등
을 구해오는 함수지요.

쏘스를 동봉합니다.

 


REPORT YTEST2 .

DATA: ITAB LIKE ISCAL_DAY OCCURS 0 WITH HEADER LINE.
DATA: LINE TYPE I.

CALL FUNCTION 'HOLIDAY_GET'
    EXPORTING
         HOLIDAY_CALENDAR           = 'KR'
         FACTORY_CALENDAR           = 'KR'
         DATE_FROM                  = SY-DATUM
         DATE_TO                    = SY-DATUM
*    IMPORTING
*         YEAR_OF_VALID_FROM         =
*         YEAR_OF_VALID_TO           =
*         RETURNCODE                 =
     TABLES
          HOLIDAYS                   = 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.
ELSE.
  DESCRIBE TABLE ITAB LINES LINE.
  IF LINE <> 0.
    LOOP AT ITAB.
      WRITE: / ITAB-DATE,
               ITAB-FREEDAY,
               ITAB-HOLIDAY,
               ITAB-HOLIDAY_ID,
               ITAB-TXT_SHORT,
               ITAB-TXT_LONG.
    ENDLOOP.
  ELSE.
    WRITE: / '오늘은 공휴일 혹은 일요일이 아니니까 일하세요!'.
  ENDIF.
ENDIF.

===================================================================
날짜 계산 : RP_CALC_DATE_IN_INTERVAL

출처 : Tong - chaiis님의 sap통

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼