Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ABAP SQL捕获活动员工日期范围的记录_Abap_Opensql_Sap Hr - Fatal编程技术网

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

ABAP SQL捕获活动员工日期范围的记录,abap,opensql,sap-hr,Abap,Opensql,Sap Hr,pa0000/pa0001中的记录有两条记录,如下所示: 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

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

 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' .
贝格达恩达酒店

[2017年7月3日-1999年12月31日]

[2017年1月3日-2017年7月2日]

选择屏幕的日期范围为:低: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' .
从Pa0001表格中选择数据
选择PERNR
恩达
贝格达
珀格
珀斯克
来自PA0001
进入表T_PA0001
S_PERNR[]中的PERNR在哪里,以及
BEGDA=S_BUDAT-HIGH和
S_EMPGR[]和
S_EMPSG[]和
S_WERKS和
BTRTL='FURC'。
上述两项记录未被捕获

我希望使用“排除所有错误选项”方法重新编写代码,而不是使用当前的方法“登记所有可接受的选项”,如下所示

WHERE NOT ( pa0001-begda > s_budat-high or pa0001-endda < s_budat-low)
不在其中(pa0001 begda>s_budat-high或pa0001 endda

非常感谢您在这方面提供的任何帮助。

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


另一种选择是简单地编写
而不是在S_BUDAT[]

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


另一种选择是只写
而不写S_BUDAT[]

您现在的选择将只匹配从S_BUDAT-LOW到S_BUDAT-HIGH的所有工作日的员工。从您的问题来看,您实际上希望选择至少有一天在该范围内的所有员工。 要获取最后一个选择,您可以使用:

BEGDA LE S_BUDAT-HIGH AND
ENDDA GE S_BUDAT-LOW

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

BEGDA LE S_BUDAT-HIGH AND
ENDDA GE S_BUDAT-LOW