将日期与两个表中的日期范围进行比较

Comparing date with a date range in two tables

我正在尝试使用 table 更改另一个 table。我需要使用一个使用固定日期(工作日期)的 table(我们称之为 tab1)。另一个 table (tab2) 在两个 table 条目(开始日期和结束日期)中使用时间范围。

我想使用 tab1 根据日期检查 tab2 中的条目是否存在。如果tab2中没有tab1,则更改tab1的状态。

我的想法是在 READ 之外使用 LOOP AT TABLE,但我遗漏了一些重要的东西。

问候 Sruscht

编辑:抱歉,我的问题不清楚。这是我的代码,我试过一次,但它在删除时设置了所有状态。

LOOP AT lt_tab1 ASSIGNING <fs_tab1>
  WHERE workdate GE lt_tab2-enddate
  AND  workdate LE lt_tab2-startdate.

  ENDLOOP.

 IF sy-subrc NE 0.
"set lt_tab1-status on delete
  ENDIF.

如果条目在 table tab2 中被删除,它们在 table tab1 中不会改变。换句话说,tab1 没有更新。 然后必须改变tab1中的状态,使系统在其他程序中不显示and/or applications.As 已经说过,tab1使用固定日期,tab2使用时间范围,描述为开始和结束日期。

我的想法是遍历itab1 并在itab2 中查找条目。如果条目不在itab2中,那么itab1的状态就改变了。

抱歉,问题太长了,但我对这个案例有很大的疑问。

我所说的重要事情是解决方案。

它必须是这样的:

LOOP AT tab2
     WHERE startdate LE tab1-fixdate
       AND enddate GE tab1-fixdate
     ASSIGNING ...
...                                   "entry found
ENDLOOP.
IF sy-subrc NE 0.
  ...                                 "there was no corresponding entry
ENDIF.

您必须使用两个嵌套循环来完成此操作。一个用于 lt_tab1 中的所有条目,一个内部循环扫描 lt_tab2 以查找与 tab1 中的当前条目匹配的任何条目。然后您可以使用标志来指示是否找到了匹配的条目。

DATA lv_found_match TYPE abap_bool.

LOOP AT lt_tab1 ASSIGNING <fs_tab1>.

   " find out if there is a matching entry in table 2 for this entry
   lv_found_match = abap_false.
   LOOP AT lt_itab2 ASSIGNING <fs_tab2>.
     IF <fs_tab2>-startdate <= <fs_tab1>-workdate AND
        <fs_tab2>-enddate >= <fs_tab1>-workdate.
       lv_found_match = abap_true.
       EXIT. " the LOOP AT
     ENDIF.
   ENDLOOP.

   IF lv_found_match = abap_true.
       " there is a match
   ELSE.
       " there isn't a match
   ENDIF.

ENDLOOP.