排序(sort)小计(subtotal)
Posted lvdong18847870057
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序(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( ).
|
运行,按销售订单号升序排序,并且每个订单有小计,
以上。
以上是关于排序(sort)小计(subtotal)的主要内容,如果未能解决你的问题,请参考以下文章