Abap 将ALV中未排序的行分组

Abap 将ALV中未排序的行分组,abap,alv,Abap,Alv,是否可以在ALV中自动将未排序字段上的行分组?例如,假设我有以下输出: 1 T_PM1 0271 6025984 1271 602721 1 T_PM1 0271 6025984 1765 602721 1 T_PM1 0271 6025984 764 602721 1 T_PM1 0271 6025984 1242 602721 1 T_PM1 0271 602598

是否可以在ALV中自动将未排序字段上的行分组?例如,假设我有以下输出:

1   T_PM1   0271    6025984     1271    602721
1   T_PM1   0271    6025984     1765    602721
1   T_PM1   0271    6025984     764     602721
1   T_PM1   0271    6025984     1242    602721
1   T_PM1   0271    6025984     1243    602721
1   T_PM1   0271    6025984     484     602721
假设我现在对前两列和第五列进行排序。前两列将分组为
1
T_PM1
,而第五列将被排序。但是,第三列、第四列和第六列都包含从前两列派生的数据,因此这些数据是相同的。我现在应该如何在这些字段上强制分组?(请注意,我使用的是创建ALV的OO方法。)


显而易见的解决方案是对这些列进行排序,但尽管我无法立即想到这样会导致排序错误的场景,我担心插入无用的排序会降低代码的可读性,而这些排序会带来不必要的开销,因为每增加一列都需要对数据进行一次额外的单次传递,以验证它是否已排序。

据我所知,无法将ALV网格中的值分组到未排序的列中。请注意,排序将由ALV网格执行,因此将列添加到
SORT
语句应该是完全不必要的-事实上,整个
SORT
语句应该是不必要的


用于对表进行排序的列数通常对总排序时间的影响很小-大多数情况下,您不必担心这一点。

我不理解您的最后一段-您在说什么“不必要的排序”以及什么类型的“额外单次传递”显然,您是否认为必须进行排序?在我看来,要将第三列、第四列和第六列进行分组,我必须将它们的列名添加到
SORT
语句中,而它们已经排序,因此不必提及它们。我进一步假设,对于这些列中的每一列,未排序记录的剩余子集(在本例中为所有未排序记录)的排序逻辑将被迭代,以检查这些字段是否已排序。当然,我可能会弄错,这可能是因为这个逻辑是自动优化的。正如我所怀疑的,我将添加所有必需的排序。正如您所说,我错误地引用了
SORT
语句,而我使用的实际方法是通过
cl#u salv#u sorts
和相应的语句
lou sorts->add_SORT(columnname='.
)。最初的测试似乎证实,任何性能影响都可以忽略不计,当然,与DB访问时间相比。