ABAP SQL捕获活跃员工日期范围的记录

时间:2017-09-27 05:02:12

标签: sap abap opensql

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

Begda Endda

[03.07.2017 - 31.12.9999]

[03.01.2017 - 02.07.2017]

选择屏幕的日期范围:低:2017年7月1日和高:2017年7月31日

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)

在这方面的任何帮助将受到高度赞赏。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

BEGDA LE S_BUDAT-HIGH AND
ENDDA GE S_BUDAT-LOW