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

23 篇文章 1 订阅

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值