日期定界
1、SAP版本
REPORT zrmm0186. DATA:BEGIN OF ls_tab , KEY TYPE I, zos TYPE sy-datum, zoe TYPE sy-datum, END OF ls_tab. DATA: days(6) TYPE p, datab_dec LIKE sy-datum, datbi_inc LIKE sy-datum, delete_ctr TYPE p, xkondat_tabix LIKE sy-tabix, ykondat_tabix LIKE sy-tabix. DATA lt_tab LIKE TABLE OF ls_tab. DATA lt_newdata LIKE TABLE OF ls_tab WITH HEADER LINE. lt_tab = VALUE #( ( KEY = '1' zos = '20220101' zoe = '20220514' ) ( KEY = '2' zos = '20220516' zoe = '20220715' ) ( KEY = '3' zos = '20220719' zoe = '20220930' ) ( KEY = '4' zos = '20221002' zoe = '20221015' ) ( KEY = '5' zos = '20221017' zoe = '20221231' ) ). PARAMETERS:p_ns TYPE sy-datum DEFAULT '20220101', p_ne TYPE sy-datum DEFAULT '20220515'. days = p_ns. datab_dec = days - 1. days = p_ne. datbi_inc = days + 1. lt_newdata-zos = p_ns. lt_newdata-zoe = p_ne. APPEND lt_newdata. LOOP AT lt_tab INTO ls_tab. MOVE-CORRESPONDING ls_tab TO lt_newdata. PERFORM frm_handle_date TABLES lt_newdata USING ls_tab-zos ls_tab-zoe p_ns p_ne datab_dec datbi_inc. ENDLOOP. SORT lt_newdata . BREAK-POINT . *&---------------------------------------------------------------------* *& Form FRM_HANDLE_DATE *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> LS_ZTMM0025_ZBEGDA *& --> LS_ZTMM0025_ZENDDA *& --> PS_OUT_ZBEGDA *& --> PS_OUT_ZENDDA *&---------------------------------------------------------------------* FORM frm_handle_date TABLES ptab STRUCTURE ls_tab USING p_os p_oe p_ns p_ne datab_dec datbi_inc. DATA:pt_tab_temp LIKE ls_tab. * ① 新区间从旧区间内开始,在旧区间之后结束。 * ② 新区间在旧区间之前开始,在旧区间内结束。 * ③ 新区间在旧区间之前开始,在旧区间后结束。 * ④ 新区间从旧区间内开始,在旧区间之前结束。 IF p_os < p_ns AND p_oe >= p_ns AND p_oe <= p_ne . * -> 新区间从旧区间内开始,在旧区间之后结束。 * P_OE = datab_dec. ptab-zoe = datab_dec. APPEND ptab. * /-------------------/ * /----------------------------/ Satz limmitiert ELSEIF p_os >= p_ns AND p_os <= p_ne AND p_oe > p_ne . * -> 新区间在旧区间之前开始,在旧区间内结束。 * p_os = datbi_inc. ptab-zos = datbi_inc. APPEND ptab. * /-------------------/ * /-------------------/ Satz geloechet ELSEIF p_os >= p_ns AND p_os <= p_ne. * -> 新区间在旧区间之前开始,在旧区间后结束。 * CLEAR: p_os, p_os. CLEAR: ptab-zos, ptab-zoe. APPEND ptab. * /-------------------/ Satz gesplittet * /--------------/ ELSEIF p_os < p_ns AND p_oe > p_ne. * -> 新区间从旧区间内开始,在旧区间之前结束。 MOVE-CORRESPONDING ptab TO pt_tab_temp. pt_tab_temp-zoe = datab_dec. APPEND pt_tab_temp TO ptab. MOVE-CORRESPONDING ptab TO pt_tab_temp. pt_tab_temp-zos = datbi_inc. APPEND pt_tab_temp TO ptab. ELSE. APPEND ptab. ENDIF. ENDFORM.
2、自测版本
REPORT 1. *DATA: p_ns TYPE sy-datum VALUE '20220201', * p_ne TYPE sy-datum VALUE '20230101'. DATA: p_ns TYPE sy-datum VALUE '20221001', p_ne TYPE sy-datum VALUE '20221114'. DATA: BEGIN OF ls_tab, KEY TYPE I, zos TYPE d, zoe TYPE d, END OF ls_tab, lt_tab LIKE TABLE OF ls_tab. DATA: lt_tab_new LIKE lt_tab. lt_tab = VALUE #( ( KEY = 1 zos = '20220101' zoe = '20220514' ) ( KEY = 2 zos = '20220515' zoe = '20220715' ) ( KEY = 3 zos = '20220716' zoe = '20220930' ) ( KEY = 4 zos = '20221001' zoe = '20221015' ) ( KEY = 5 zos = '20221016' zoe = '20221231' ) ). SORT lt_tab BY zos. DATA: lv_flag_s TYPE C, lv_flag_e TYPE C. DATA: lv_s TYPE d, lv_e TYPE d. DATA: lv_just TYPE C. "调整 lv_s = p_ns - 1. IF lt_tab IS INITIAL. lv_flag_s = 'X'. ELSEIF lv_s < lt_tab[ 1 ]-zos. lv_flag_s = 'X'. ENDIF. LOOP AT lt_tab INTO ls_tab. IF lv_s BETWEEN ls_tab-zos AND ls_tab-zoe. lv_flag_s = 'X'. APPEND VALUE #( KEY = ls_tab-KEY zos = ls_tab-zos zoe = lv_s ) TO lt_tab_new. ENDIF. IF p_ne BETWEEN ls_tab-zos AND ls_tab-zoe. APPEND VALUE #( zos = p_ns zoe = p_ne ) TO lt_tab_new. lv_flag_e = 'X'. lv_e = p_ne + 1. lv_just = 'X'. ENDIF. IF lv_flag_s = ''. APPEND ls_tab TO lt_tab_new. ENDIF. IF lv_flag_e = 'X'. IF lv_just = 'X'. APPEND VALUE #( KEY = ls_tab-KEY zos = lv_e zoe = ls_tab-zoe ) TO lt_tab_new. lv_just = ''. ELSE. APPEND ls_tab TO lt_tab_new. ENDIF. ENDIF. ENDLOOP. IF ls_tab-zoe < p_ne. APPEND VALUE #( zos = p_ns zoe = p_ne ) TO lt_tab_new. ENDIF. cl_demo_output=>display( lt_tab_new ).
post SAP-Garson
原文链接:https://www.cnblogs.com/ckstock/p/16839951.html文章来自于网络,如果侵犯了您的权益,请联系站长删除!