본문 바로가기
ABAP

RFC 6

by clode 2023. 2. 16.
728x90
반응형

시작일은 시스템 일자 기준부터 다음날이다. (+1)
종료일은 시작일부터 WORKING DAY 7일 이후이다.

이런경우 주말과 공휴일을 제외하고 날짜를 세는 펑션을 사용한다. 여러 펑션을 사용할수 있는데 기능이 조금씩 다르다.

펑션 종류

    1. WDKAL_DATE_ADD_FKDAYS : +일자만 가능한 펑션
    1. BKK_ADD_WORKINGDAY : +,- 일자 둘다 가능
    1. HOLIDAY_CHECK_AND_GET_INFO : 공휴일 여부 펑션, DATE_COMPUTE_DAY : 일자에 해당하는 요일 펑션

3번 펑션 두가지를 사용해 RFC 펑션을 만들어본다.

HOLIDAY_CHECK_AND_GET_INFO

DATE_COMPUTE_DAY

[SOURCE CODE]

DATA: l_cnt     TYPE i,
        l_date    TYPE datum,
        l_holiday TYPE scal-indicator,
        l_day     TYPE scal-indicator.

  CLEAR l_cnt.
  l_date = i_begda.

  CHECK i_wday > 0.

  WHILE l_cnt <= i_wday.
    CLEAR: l_holiday, l_day.
*공휴일 여부
    CALL FUNCTION 'HOLIDAY_CHECK_AND_GET_INFO'
      EXPORTING
        date                    = l_date
        holiday_calendar_id     = i_fabkl
        with_holiday_attributes = 'X'
      IMPORTING
        holiday_found           = l_holiday.

*일자에 해당하는 요일
    CALL FUNCTION 'DATE_COMPUTE_DAY'
      EXPORTING
        date = l_date
      IMPORTING
        day  = l_day.

*공휴일도 주말도 아닐 경우 카운트 1증가
    IF l_holiday NE 'X' AND l_day NE '6' AND l_day NE '7'.
      ADD 1 TO l_cnt.
    ENDIF.

    IF l_cnt EQ i_wday.     "요구한 working day 도달 시 일자반환 후 exit
      e_endda = l_date.
      EXIT.
    ENDIF.
    ADD 1 TO l_date.      "1일 증가
  ENDWHILE.

[프로그램에서 사용]

SELECT-OPTIONS:  s_psttr FOR plaf-psttr, "계획오더 시작일

  DATA: l_begda TYPE begda,
        l_endda TYPE endda.
  l_begda = sy-datum + 1.

  CALL FUNCTION 'ZS1D_MINI_FM00_001'
    EXPORTING
      i_wday  = 7
      i_begda = l_begda
      i_fabkl = 'KR'
    IMPORTING
      e_endda = l_endda.

  so_psttr-low = l_begda.
  so_psttr-high = l_endda.
  so_psttr-sign = 'I'.
  so_psttr-option = 'EQ'.
  APPEND s_psttr.



WDKAL_DATE_ADD_FKDAYS


  CALL FUNCTION 'WDKAL_DATE_ADD_FKDAYS'
    EXPORTING
      i_date  = i_begda "시작날짜
      i_fkday = i_wday    
      i_fabkl = i_fabkl
    IMPORTING
      e_date  = e_endda.


BKK_ADD_WORKINGDAY

SELECT-OPTIONS:  s_pedtr FOR plaf-pedtr, "계획오더 시작일

  DATA : lv_datum TYPE sy-datum.
  CALL FUNCTION 'BKK_ADD_WORKINGDAY'
    EXPORTING
      i_date      = sy-datum
      i_days      = 7
      i_calendar1 = 'KR'
    IMPORTING
      e_date      = lv_datum.

  s_pedtr-low = sy-datum.
  s_pedtr-high = lv_datum.
  APPEND s_pedtr. CLEAR s_pedtr.
728x90
반응형

'ABAP' 카테고리의 다른 글

Field-symbols 2  (0) 2023.02.16
Field-symbols 1  (0) 2023.02.16
RFC 5  (0) 2023.02.16
RFC 4  (0) 2023.02.14
RFC 3  (0) 2023.02.14

댓글