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)
在这方面的任何帮助将受到高度赞赏。
答案 0 :(得分:2)
它可能不起作用,因为S_BUDAT
是带有标题行S_BUDAT[]
的内部表的标题,所以换句话说它是一个结构。您应该将选择选项S_BUDAT
拆分为两个参数,例如。 P_LOW
和P_HIGH
并重新提问您的查询。
另一种选择是简单地写NOT IN S_BUDAT[]
。
答案 1 :(得分:0)
您现在拥有的选项仅匹配从S_BUDAT-LOW到S_BUDAT-HIGH的所有日期都处于活动状态的员工。从您的问题看来,您实际上想要选择在该范围内至少有一天的所有员工。 要获得最后的选择,您可以使用:
BEGDA LE S_BUDAT-HIGH AND
ENDDA GE S_BUDAT-LOW