有时候会遇到需求查两个日期直接多少个工作日。
这里面除了周六日还涉及到法定节假日和调休等情况。
这些情况都是需要在工厂日历里维护的。
使用下面代码的前台是,工厂日历已经正确维护。
或者直接使用维护工厂日历 tcode:SCAL
具体维护过程自己上网一搜即可,这里不再赘述、
获取日期间工作日天数:
FUNCTION ZMM_GET_WORKDAYS.*"----------------------------------------------------------------------*"*"Local Interface:*" IMPORTING*" REFERENCE(IV_FROM) TYPE SY-DATUM DEFAULT SY-DATUM*" REFERENCE(IV_TO) TYPE SY-DATUM DEFAULT SY-DATUM*" REFERENCE(IV_FACTORY_CALENDAR) LIKE SCAL-FCALID DEFAULT 'CN'*" REFERENCE(IV_HOLIDAY_CALENDAR) LIKE SCAL-HCALID DEFAULT 'CN'*" REFERENCE(IV_NC_TODAY) TYPE FLAG DEFAULT 'X'*" EXPORTING*" REFERENCE(EV_DAYS) TYPE INT4*"----------------------------------------------------------------------DATA:LT_DAY_ATTRIBUTES TYPE TABLE OF CASDAYATTR.DATA:LS_DAY_ATTRIBUTES TYPE CASDAYATTR.CALL FUNCTION 'DAY_ATTRIBUTES_GET'EXPORTING
FACTORY_CALENDAR = IV_FACTORY_CALENDAR
HOLIDAY_CALENDAR = IV_HOLIDAY_CALENDAR
DATE_FROM = IV_FROM
DATE_TO = IV_TOTABLES
DAY_ATTRIBUTES = LT_DAY_ATTRIBUTESEXCEPTIONS
FACTORY_CALENDAR_NOT_FOUND = 1
HOLIDAY_CALENDAR_NOT_FOUND = 2
DATE_HAS_INVALID_FORMAT = 3
DATE_INCONSISTENCY = 4OTHERS = 5.IF SY-SUBRC <> 0.ENDIF.*&除去节假日DELETE LT_DAY_ATTRIBUTES WHERE FREEDAY = 'X'.DESCRIBE TABLE LT_DAY_ATTRIBUTES LINES EV_DAYS.IF IV_NC_TODAY = 'X'."如果to date 是工作日除去 当天READ TABLE LT_DAY_ATTRIBUTES TRANSPORTING NO FIELDSWITH KEY DATE = IV_TO.IF SY-SUBRC = 0.
EV_DAYS = EV_DAYS - 1.ENDIF.ENDIF.ENDFUNCTION.