1

我在 SAP 中创建了下表:

我的桌子

如何仅打印员工已登录 (KOMMEN) 但未注销 (GEHEN) 的这些行?

在这个例子中,我只想打印最后一行。

4

3 回答 3

0

您使用的输出方法称为 ABAP 列表输出。ABAP 中有许多不同的输出方法。列表输出只有一个。在您的情况下,此列表输出的缺点是,添加过滤器取决于开发人员。即,ABAP 列表输出没有用于过滤某些值的默认功能。这种输出方法真的很简单。

就像评论中所说的那样,您应该更改 ABAP 代码并在循环中“手动”进行过滤。举个例子:

LOOP AT lt_employees INTO ls_employee
  WHERE komgeh = 'KOMMEN'.
  WRITE: / ls_employee-mandt, 
           ls_employee-id,
           ls_employee-pnr,
           ls_employee-komgeh,
           ls_employee-datum,
           ls_employee-uhrzeit.
ENDLOOP.

请注意,还有其他可能性来过滤内部表中的“KOMMEN”值。您可以在 LOOP 中考虑一个 IF 语句。无论如何,在 LOOP 语句中应用 WHERE 子句是过滤内部表的最高效方法之一。

此外,由于您没有发布代码,因此您需要将我在代码片段中使用的名称转移到您的代码中。

于 2017-06-07T07:18:15.177 回答
0
   SORT lt_data BY datum ASCENDING
                   PNR   ASCENDING
                   K_G   DESCENDING.

    LOOP AT lt_data ASSIGNING FIELD-SYMBOL(<line>) WHERE k_g = 'KOMMEN'.
      lv_tabix = sy-tabix + 1.

      READ TABLE lt_data ASSIGNING FIELD-SYMBOL(<temp>) index lv_tabix.

      IF sy-subrc IS NOT INITIAL
      OR <line>-datum <> <temp>-datum
      OR <line>-pnr   <> <temp>-pnr.
        APPEND <line> TO lt_output.
      ENDIF.
    ENDLOOP.

然后你在 lt_output 中有你想要的所有行。

于 2017-07-30T14:29:17.050 回答
0

假设表的结构与您提供的屏幕一样简单,您可以使用简单GROUP子句来计算未配对登录 ( KOMMEN) 事件:

SELECT PNR
  FROM table
  INTO TABLE @DATA(itab)
 GROUP BY PNR
 HAVING COUNT(*) = 1.

如果用户结束了他的会话,则此解决方案工作的先决条件是偶数记录,如果他没有(仅登录)则为奇数。

于 2017-07-30T09:22:35.093 回答