排序(sort)、小计(subtotal)

排序在ALV中也是一个比较重要的功能,在有合计(参照-->SALV教程11-Aggregations应用-合计(total)、小计(subtotal)、平均值(average))的场合下,排序能实现排序字段的小计(subtotal).

具体实现方法:

1,通过get_sorts方法得到类CL_SALV_SORTS的引用,

2,通过add_sort方法添加排序的字段,如果还要小计,输入参数subtotal就要传入’X‘

完整代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

*&---------------------------------------------------------------------*

*& 一个简单的通过类CL_SALV_TABLE生成SALV的例子

*&---------------------------------------------------------------------*

REPORT z_salv_12.

*

*----------------------------------------------------------------------*

*       CLASS lcl_report DEFINITION

*----------------------------------------------------------------------*

CLASS lcl_report DEFINITION.

*

PUBLIC SECTION.

*

*   定义SALV输出内表

TYPES: BEGIN OF ty_vbak,

vbeln TYPE vbak-vbeln,

posnr TYPE vbap-posnr,

erdat TYPE erdat,

auart TYPE auart,

kunnr TYPE kunnr,

netwr TYPE netwr,

END OF ty_vbak.

*

DATA: t_vbak TYPE STANDARD TABLE OF ty_vbak.

*

*   ALV reference

DATA: o_alv TYPE REF TO cl_salv_table.

*

METHODS:

*     抽取数据

get_data,

*

*     生成输出内容

generate_output.

*

*$*$*.....CODE_ADD_1 - Begin..................................1..*$*$*

*

* 定义private method来设定SALV不同特性

PRIVATE SECTION.

METHODS:

set_pf_status CHANGING co_alv TYPE REF TO cl_salv_table.

METHODS:

set_aggregations CHANGING co_alv  TYPE REF TO cl_salv_table.

METHODS:

set_sorts CHANGING co_alv TYPE REF TO cl_salv_table.

*$*$*.....CODE_ADD_1 - End....................................1..*$*$*

ENDCLASS.                    "lcl_report DEFINITION

*----------------------------------------------------------------------*

*       CLASS lcl_report IMPLEMENTATION

*----------------------------------------------------------------------*

* 类实现

CLASS lcl_report IMPLEMENTATION.

*

METHOD get_data.

*   抽取数据

SELECT vbak~vbeln

vbap~posnr

vbak~erdat

vbak~auart

vbak~kunnr

vbap~netwr

INTO TABLE t_vbak

FROM vbak

INNER JOIN vbap ON vbap~vbeln = vbak~vbeln

UP TO 20 ROWS.

*

ENDMETHOD.                    "get_data

*.......................................................................

METHOD generate_output.

*   New ALV instance

*   We are calling the static Factory method which will give back

*   the ALV object reference.

*

* exception class

DATA: lx_msg TYPE REF TO cx_salv_msg.

TRY.

cl_salv_table=>factory(

IMPORTING

r_salv_table = o_alv

CHANGING

t_table      = t_vbak ).

CATCH cx_salv_msg INTO lx_msg.

ENDTRY.

*

*$*$*.....CODE_ADD_2 - Begin..................................2..*$*$*

*

*    In this area we will call the methods which will set the

*      different properties to the ALV

*   调用status设置方法

CALL METHOD set_pf_status

CHANGING

co_alv = o_alv.

*   排序

CALL METHOD set_sorts

CHANGING

co_alv = o_alv.

*   调用合计的设置方法

CALL METHOD set_aggregations

CHANGING

co_alv = o_alv.

*$*$*.....CODE_ADD_2 - End....................................2..*$*$*

*

*

*   调用Display方法将数据输出到屏幕上

o_alv->display( ).

*

ENDMETHOD.                    "generate_output

*

*$*$*.....CODE_ADD_3 - Begin..................................3..*$*$*

*

*    In this area we will implement the methods which are defined in

*      the class definition

* status设置方法实现

METHOD set_pf_status.

DATA: lo_functions TYPE REF TO cl_salv_functions_list.

*   设置默认的标准状态栏

lo_functions = co_alv->get_functions( ).

lo_functions->set_default( abap_true ).

ENDMETHOD.

* 排序方法实现

METHOD set_sorts.

*

DATA: lo_sort TYPE REF TO cl_salv_sorts.

*

*   get Sort object

lo_sort = co_alv->get_sorts( ).

*

*   对销售订单号进行排序,由于有总计,所以每个销售订单也会有小计

TRY.

CALL METHOD lo_sort->add_sort

EXPORTING

columnname = ‘VBELN‘

subtotal   = if_salv_c_bool_sap=>true.

CATCH cx_salv_not_found .                         "#EC NO_HANDLER

CATCH cx_salv_existing .                          "#EC NO_HANDLER

CATCH cx_salv_data_error .                        "#EC NO_HANDLER

ENDTRY.

*

ENDMETHOD.                    "set_sorts

* 合计方法的实现

METHOD set_aggregations.

*

DATA: lo_aggrs TYPE REF TO cl_salv_aggregations.

*

lo_aggrs = co_alv->get_aggregations( ).

*

*   给NETWR添加列

TRY.

CALL METHOD lo_aggrs->add_aggregation

EXPORTING

columnname  = ‘NETWR‘

aggregation = if_salv_c_aggregation=>total.

CATCH cx_salv_data_error .                        "#EC NO_HANDLER

CATCH cx_salv_not_found .                         "#EC NO_HANDLER

CATCH cx_salv_existing .                          "#EC NO_HANDLER

ENDTRY.

*

*   将合计放置到SALV的顶端

lo_aggrs->set_aggregation_before_items( ).

*

ENDMETHOD.                    "set_aggregations

*$*$*.....CODE_ADD_3 - End....................................3..*$*$*

*

ENDCLASS.                    "lcl_report IMPLEMENTATION

START-OF-SELECTION.

DATA: lo_report TYPE REF TO lcl_report.

CREATE OBJECT lo_report.

* 抽取数据

lo_report->get_data( ).

* 生成SALV

lo_report->generate_output( ).

运行,按销售订单号升序排序,并且每个订单有小计,

以上。

原文地址:https://www.cnblogs.com/lvdong18847870057/p/12546998.html

时间: 2024-08-28 05:20:15

排序(sort)、小计(subtotal)的相关文章

详细解说 STL 排序(Sort)(转)

作者Winter 详细解说 STL 排序(Sort) 0 前言: STL,为什么你必须掌握 1 STL提供的Sort 算法 1.1 所有sort算法介绍 1.2 sort 中的比较函数 1.3 sort 的稳定性 1.4 全排序 1.5 局部排序 1.6 nth_element 指定元素排序 1.7 partition 和stable_partition 2 Sort 和容器 3 选择合适的排序函数 4 小结 5 参考文档 一切复杂的排序操作,都可以通过STL方便实现 ! 0 前言: STL,为

JS数组去重,js中数组(Array)的排序(sort)

JS数组去重 var ddd = [1,2,4,5,2, 222,1,5,6]; var uq = {}; var rq = []; for(var i=0; i<9; i++){ if(!uq[ddd[i]]){ uq[ddd[i]] = true; rq.push(ddd[i]); } } return rq; js中数组(Array)的排序(sort)注意事项 var arrDemo = new Array(); arrDemo[0] = 10; arrDemo[1] = 50; arrD

oracle group by rollup decode grouping nvl等判断或者小计合计心得

在做oracle 047第12题时,遇到group by 语句,由此遇到group by  rollup,decode,grouping,nvl,nvl2,nullif,RATIO_TO_REPORT等. 1. decode  与if...then,case...when...这类流数据语句功能差不多 decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(值1) ELSIF 条件=值2 THEN RETU

详细解说 STL 排序(Sort)

http://www.cppblog.com/mzty/archive/2005/12/15/1770.html 详细解说 STL 排序(Sort) 0 前言: STL,为什么你必须掌握 1 STL提供的Sort 算法 1.1 所有sort算法介绍 1.2 sort 中的比较函数 1.3 sort 的稳定性 1.4 全排序 1.5 局部排序 1.6 nth_element 指定元素排序 1.7 partition 和stable_partition 2 Sort 和容器 3 选择合适的排序函数

第五天 文件权限设置acl attr 文件内容排序sort uniq diff

linux root组 不是管理员角色 root组并不是有root权限 useradd -r -m r一般配合m使用 服务器让每个uid最好一样,统一标准化管理 token(uid ,gid,groups) file uid =read write 先看uid再看权限 想看到最新 file uid =read write excute必须重新登录 rwx二进制文件一般读取没有实际意义 ,不是随便一个权限赋予读都有意义读和写一般给文本文件,读权限对二进制文件不受影响 file r看文件内容 w修改

汽车仪表是如何计算总计里程和小计里程的?

现在汽车仪表大部分的总计里程和小计里程都是显示在屏幕上的,这包括段码屏.点阵屏.TFT彩屏等,虽然显示形式不一样,但是从业务需求和软件应用层的实现策略来讲,原理应该都是通用的.本文不涉及具体车型,仅对一般的业务逻辑作介绍,一是为了自己总结记录,二是期望吸引同行或爱好者交流. 1.总计里程 ODO(Total Odometer )即总计里程,顾名思义,主要作用是记录汽车总的行驶里程,一般来讲,在用户使用过程中是无法对其修改或清零的,因为它是对二手汽车价值评估的一项重要数值,当然随意篡改这一数据也是

traits技法小计

在学习算法导论的时候,对于各数据结构,自然是实现一个才算掌握,工具当然是template编程,但是自己的demo经常存在很多问题,比如没有给出迭代器啊,操作符重载不够啊等等设计上的问题,而某些问题实际上是从设计之初就该考虑的大框架,而非小细节.对于C++而言,STL无疑是最佳的参考资料,侯捷先生的STL源码剖析一书给我们良好的示范,而直接从第四章开始看会云里雾里,无法得其精髓,因此在学习算法之余决定尾随侯捷先生脚步,学习STL traits技法,从而可以从STL中学到更多的数据结构实现. 收获自

设计模式小计——23种设计模式3

责任链模式Chain of Responsibility 使多个对象都有机会处理请求,从而避免请求的发送者和接受者间的耦合关系,并沿着这条链传递请求,直到有对象处理它为止 责任链模式关键是建立链接关系,在链中决定谁来处理请求 //抽象处理者 public abstract class Handle{ private Handle nextHandle;//链的下一个节点 public final Response handleMessage(Request request){ Response

设计模式小计——23种设计模式1

单例模式Singleton Pattern 确保类只有一个实例,而且自行实例化并向整个系统提供这个实例 public class Singleton{ private static final Singleton singleton = new Singleton(); private Singleton(){} public static Singleton getSingleton(){ return singleton; } } 节省内存开支,减少性能开销,应用启动产生单例对象,永久驻留内