我在 SAP 中创建了下表:
如何仅打印员工已登录 (KOMMEN) 但未注销 (GEHEN) 的这些行?
在这个例子中,我只想打印最后一行。
我在 SAP 中创建了下表:
如何仅打印员工已登录 (KOMMEN) 但未注销 (GEHEN) 的这些行?
在这个例子中,我只想打印最后一行。
您使用的输出方法称为 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 子句是过滤内部表的最高效方法之一。
此外,由于您没有发布代码,因此您需要将我在代码片段中使用的名称转移到您的代码中。
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 中有你想要的所有行。
假设表的结构与您提供的屏幕一样简单,您可以使用简单GROUP
子句来计算未配对登录 ( KOMMEN
) 事件:
SELECT PNR
FROM table
INTO TABLE @DATA(itab)
GROUP BY PNR
HAVING COUNT(*) = 1.
如果用户结束了他的会话,则此解决方案工作的先决条件是偶数记录,如果他没有(仅登录)则为奇数。