根據工廠日曆獲取兩日期之間的工作天數的函數

找了一下午的SAP自帶的日期常用函數也沒有找到符合自己需要的函數,如果便自己寫了一個。有哪位大俠找到了告訴小弟一聲,下次就不用那麼麻煩自己寫了。寫的函數代碼如下:

FUNCTION zposo_get_work_days.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(B_DATE) TYPE  SY-DATUM
*"     VALUE(E_DATE) TYPE  SY-DATUM
*"  EXPORTING
*"     REFERENCE(DAYS) TYPE  I
*"----------------------------------------------------------------------
  DATA:work(1),
       p_date LIKE sy-datum.
  CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS'
    EXPORTING
      i_date_from b_date
      i_date_to   e_date
    IMPORTING
      e_days      days.             "獲取兩日期之間天數,不排除假期

  p_date b_date.
  DO days TIMES.      "遞增日期並轉換爲工廠日曆判斷是否爲假期
    CLEAR work.
    CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
      EXPORTING
        date      p_date
        days      '01'
        months    '00'
        years     '00'
      IMPORTING
        calc_date p_date.

    CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
      EXPORTING
        date                 p_date
        factory_calendar_id  'PS'
      IMPORTING
        workingday_indicator work.
    IF work NE ''.
      days days 1.
    ENDIF.
  ENDDO.
  CLEAR work.
  CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'   "轉換爲工廠日曆可判斷開始日期是否爲假期
    EXPORTING
      date                 b_date
      factory_calendar_id  'PS'
    IMPORTING
      workingday_indicator work.
  IF work NE ''.
    days days 1.
  ENDIF.
  IF e_date NE p_date.
    CLEAR work.
    CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE' "判斷結束日期是否爲假期
      EXPORTING
        date                 e_date
        factory_calendar_id  'PS'
      IMPORTING
        workingday_indicator work.
    IF work NE ''.
      days days 1.
    ENDIF.
  ENDIF.

  days days + 1.
ENDFUNCTION.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章