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