排序(sort)、小计(subtotal)

摘要:
排序也是ALV中的一个重要功能。当有总计时(请参阅--˃SALV教程11-聚合应用程序-总计、小计、平均值),排序可以实现排序字段的小计具体实现方法:1.Get_Sort方法获取CL_SALV_类对SORTS的引用,2,通过adding_Sort方法添加排序字段。如果需要小计,请输入参数小计

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

具体实现方法:

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

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

2016-09-21_16-04-14

完整代码

 
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_reportDEFINITION.
*
  PUBLIC SECTION.
*
*   定义SALV输出内表
    TYPES:BEGIN OF ty_vbak,
             vbelnTYPE vbak-vbeln,
             posnrTYPE vbap-posnr,
             erdatTYPE erdat,
             auartTYPE auart,
             kunnrTYPE kunnr,
             netwrTYPE netwr,
           END OF ty_vbak.
*
    DATA: t_vbakTYPESTANDARD TABLE OF ty_vbak.
*
*   ALV reference
    DATA: o_alvTYPEREF TO cl_salv_table.
*
    METHODS:
*     抽取数据
      get_data,
*
*     生成输出内容
      generate_output.
*
*$*$*.....CODE_ADD_1 - Begin..................................1..*$*$*
*
* 定义private method来设定SALV不同特性
  PRIVATE SECTION.
    METHODS:
      set_pf_statusCHANGING co_alvTYPEREF TO cl_salv_table.
 
    METHODS:
      set_aggregationsCHANGING co_alv  TYPEREF TO cl_salv_table.
 
    METHODS:
      set_sortsCHANGING co_alvTYPEREF TO cl_salv_table.
*$*$*.....CODE_ADD_1 - End....................................1..*$*$*
 
ENDCLASS.                    "lcl_report DEFINITION
 
*----------------------------------------------------------------------*
*       CLASS lcl_report IMPLEMENTATION
*----------------------------------------------------------------------*
* 类实现
CLASS lcl_reportIMPLEMENTATION.
*
  METHOD get_data.
*   抽取数据
    SELECT vbak~vbeln
           vbap~posnr
           vbak~erdat
           vbak~auart
           vbak~kunnr
           vbap~netwr
      INTOTABLE t_vbak
      FROM vbak
     INNERJOIN vbap ON vbap~vbeln= vbak~vbeln
           UP TO20ROWS.
*
  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_msgTYPEREF TO cx_salv_msg.
    TRY.
        cl_salv_table=>factory(
          IMPORTING
            r_salv_table= o_alv
          CHANGING
            t_table      = t_vbak).
      CATCH cx_salv_msgINTO 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_functionsTYPEREF TO cl_salv_functions_list.
*   设置默认的标准状态栏
    lo_functions= co_alv->get_functions().
    lo_functions->set_default( abap_true).
 
  ENDMETHOD.
* 排序方法实现
  METHOD set_sorts.
*
    DATA: lo_sortTYPEREF 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_aggrsTYPEREF 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_reportTYPEREF TO lcl_report.
 
  CREATE OBJECT lo_report.
* 抽取数据
  lo_report->get_data().
* 生成SALV
  lo_report->generate_output().

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

2016-09-21_15-53-21

以上。

免责声明:文章转载自《排序(sort)、小计(subtotal)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS: iOS各种设备信息获取sublime text 使用技巧下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

c#操作MangoDB 之MangoDB CSharp Driver驱动详解

序言MangoDB CSharp Driver是c#操作mongodb的官方驱动。 官方Api文档:http://api.mongodb.org/csharp/2.2/html/R_Project_CSharpDriverDocs.htm#! 驱动的具体介绍:https://docs.mongodb.org/ecosystem/drivers/csharp...

Redis使用

一、定义 redis是nosql产品之一,nosql就是无需编写复杂的sql语句。是Remote Dictionary Server(远程字典数据服务)的缩写。 由意大利人 antirez(Salvatore Sanfilippo)  开发的一款 内存高速缓存数据库。该软件使用C语言编写,它的数据模型为 key-value。 它支持丰富的数据结构(类型),...

linux命令 对日志文件的IP出现的次数进行统计 并显示次数最多的前六名

遇到的一个面试题: 对日志文件的IP值次数进行统计 并显示次数最多的前六名 解决方法: grep -i -o -E "([0-9]{1,3}\.){3}[0-9]{1,3}" test1.txt | sort -n | uniq -c | sort -n-r | head -6 参数详情: grep命令 用于文本搜索 -E:用于使用正则匹配 -o:只显示匹...

MySQL排序原理与MySQL5.6案例分析【转】

本文来自:http://www.cnblogs.com/cchust/p/5304594.html,其中对于自己觉得是重点的加了标记,方便自己查阅。更多详细的说明可以看沃趣科技的文章说明。 前言      排序是数据库中的一个基本功能,MySQL也不例外。用户通过Order by语句即能达到将指定的结果集排序的目的,其实不仅仅是Order by语句,Gr...

关于layui中tablle 渲染数据后 sort排序问题

table.render({ id:'test',elem: '#test' //,height: 350 ,url: "/admin/members/list/" , request:{ pageName: 'page' //页码的参数名称,默认:...

排序sort && 取消重复行uniq

sort格式: sort 选项 文件名 选项-f 忽略大小写-t 指定分隔符,默认是制表符-b 忽略每行前面的空白部分-n 以数值排序,默认字符串排序-r 反向排序-u 删除重复行 实验sort 对文件etc/passwd进行排序 [root@linux Desktop]# sort /etc/passwd abrt:x:173:173::/etc/a...