0

pa0000/pa0001中的记录有两条记录如下:

贝格达恩达

[03.07.2017 - 31.12.9999]

[03.01.2017 - 02.07.2017]

选择屏幕的日期范围:低:01/07/2017 和高:31/07/2017

ABAP 代码写成如下:

 Select data from Pa0001 table
  SELECT PERNR
        ENDDA
         BEGDA
         PERSG
         PERSK
    FROM PA0001
    INTO TABLE T_PA0001
    WHERE PERNR IN S_PERNR[] AND
          BEGDA <= S_BUDAT-LOW AND
          ENDDA >= S_BUDAT-HIGH AND
          PERSG IN S_EMPGR[] AND
          PERSK IN S_EMPSG[] AND
          GSBER IN S_WERKS AND
         BTRTL = 'FURC' .

上述两条记录均未捕获。

我想通过使用“排除所有错误选项”而不是当前方法“列出所有可接受的选项”来重写代码,如下所示。

WHERE NOT ( pa0001-begda > s_budat-high or pa0001-endda < s_budat-low)

在这方面的任何帮助将不胜感激。

4

2 回答 2

2

它可能不起作用,因为它S_BUDAT是带有标题行的内部表的标题,S_BUDAT[]所以换句话说它是一个结构。您应该将选择选项拆分S_BUDAT为两个参数,例如。P_LOWP_HIGH改写您的查询。

另一种选择是简单地编写NOT IN S_BUDAT[].

于 2017-09-27T07:38:31.733 回答
0

您现在的选择将仅匹配在从 S_BUDAT-LOW 到 S_BUDAT-HIGH 的所有日子里都处于活动状态的员工。从您的问题看来,您实际上想要选择在该范围内至少有一天的所有员工。要获得最后一个选择,您可以使用:

BEGDA LE S_BUDAT-HIGH AND
ENDDA GE S_BUDAT-LOW
于 2017-09-27T13:11:27.917 回答