• Working days


    form FRM_GET_WORKING_DAYS
      TABLES pt_days
      CHANGING  pv_duration.
    
    
      DATA:ls_xt001w TYPE t001w,
           lv_sdate TYPE sy-datum,
           lv_edate TYPE sy-datum.
    
    * Get the factory calendar for specific plant
      SELECT SINGLE * FROM t001w INTO ls_xt001w
                         WHERE werks IN s_plant.   " Use your plant
    
    *   Set start date
      CONCATENATE sy-datum+0(6) '01' INTO lv_sdate.
    
    *   End date
      CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
        EXPORTING
          date      = lv_sdate
          days      = 0
          months    = 1
          signum    = '+'
          years     = 0
        IMPORTING
          calc_date = lv_edate
        EXCEPTIONS
          OTHERS    = 2.
    
    * Get working days in between
    
      CALL FUNCTION 'DURATION_DETERMINE'
        EXPORTING
          factory_calendar           = ls_xt001w-fabkl
        IMPORTING
          duration                   = pv_duration     " In days
        CHANGING
          start_date                 = lv_sdate
          end_date                   = lv_edate
        EXCEPTIONS
          factory_calendar_not_found = 1
          date_out_of_calendar_range = 2
          date_not_valid             = 3
          unit_conversion_error      = 4
          si_unit_missing            = 5
          parameters_not_valid       = 6
          OTHERS                     = 7.
    
      WHILE lv_sdate < lv_edate.
        CALL FUNCTION 'DATE_CHECK_WORKINGDAY'
          EXPORTING
            date                             = lv_sdate
            factory_calendar_id              = ls_xt001w-fabkl
            message_type                     = 'I'
         EXCEPTIONS
           DATE_AFTER_RANGE                 = 1
           DATE_BEFORE_RANGE                = 2
           DATE_INVALID                     = 3
           DATE_NO_WORKINGDAY               = 4
           FACTORY_CALENDAR_NOT_FOUND       = 5
           MESSAGE_TYPE_INVALID             = 6
           OTHERS                           = 7
                  .
        IF sy-subrc eq 0.
          append lv_sdate to pt_days.
        ENDIF.
    
      CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
        EXPORTING
          date      = lv_sdate
          days      = 1
          months    = 0
          signum    = '+'
          years     = 0
        IMPORTING
          calc_date = lv_sdate
        EXCEPTIONS
          OTHERS    = 2.
    
      ENDWHILE.
    endform.
    

    We can get working days easily by 'describe table lines ' of pt_days ,this is merely a demo of FM usage,not making an unnecessary move

  • 相关阅读:
    Diffusion Particle Resolver
    GPU Jacobi Iterator
    Remark for ColorSpectrum Rendering
    关于Windows的命令行多语言输出
    DPR Sphere in Cloud
    看到一篇有意思的东西,记录一下
    GFS的系统架构
    jsp实现树状结构
    工作笔记
    批量删除
  • 原文地址:https://www.cnblogs.com/aurora-cj/p/10422128.html
Copyright © 2020-2023  润新知