根据工厂日历获取两日期之间的工作天数的函数

来源:互联网 发布:易语言辅助源码 编辑:程序博客网 时间:2024/06/06 06:46

找了一下午的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.

原创粉丝点击