04数据输出,A3-物料基本信息及在订单中的销售统计

图4-A3 物料基本信息及在订单中的销售统计

需求分析:

1、具体需求

本《物料基本信息及在订单中的销售统计》有如下需求:

  1. 除输出物料基本信息(物料、物料名称、物料类型)外,还需要获得此物料在多少个订单中有销售,在不同订单中销售的情况(总计销售数量、最大销售数量、最小销售数量、平均销售数量),因此,本实践所需数据除了物料表,还需要用到订单明细表;
  2. 物料列表按物料编号升序排序,同时输出序号;
  3. 对于销售总数量为0的物料,不需要显示。
2、开发分析

要达成本实践目标,需要通过Open SQL,实现对多表的连接和聚合处理,以对数据进行合计、取最小最大值等。

实践步骤:

本实践通过程序编辑器(SE38)即可完成,编写的代码将有如下几部分组成,按开发人员风格不同,其组成部分并非强制一致。

No 部分 说明
1 程序声明 声明本程序执行后是否包含标准标题,数据输出宽度和每页的行数量为多少,另需考虑页脚输出
2 对象定义 通过定义类型池以在程序中使用相应的图标,通过定义要使用的以变量或常量或要使用的表结构等,以在程序执行过程中计算和存储临时值
3 页眉页脚 通过代码设置输出页眉页脚
4 获取数据 从表中获得要输出的数据数据并存储到内表中以待后续输出
5 输出数据 将内表中的数据按要求输出,本代码可有2种方式实现:条件、AT NEW事件。
1、程序声明

程序声明部分的代码如下:

REPORT zu0403_mat_aggregate NO STANDARD PAGE HEADING
       LINE-SIZE 100 LINE-COUNT 80.

通过如上代码定义,程序输出时,页面宽度为100(能容纳100个数字或英文字符),每页输出区域为80行。

2、对象定义

对象定义部分的代码如下:

*****对象定义
TYPES: BEGIN OF mat_ag_type,                              " mat_ag_type-类型名称
         materialid   TYPE ztmaterial-materialid,
         materialname TYPE ztmaterial-materialname,
         materialtype TYPE ztmaterial-materialtype,
         count        TYPE i,
         total        TYPE ztorders_i-oquantity,
         max          TYPE ztorders_i-oquantity,
         min          TYPE ztorders_i-oquantity,
         average      TYPE ztorders_i-oquantity,
       END OF mat_ag_type.

DATA:mat_ag_itab TYPE STANDARD TABLE OF mat_ag_type     " 含工作区的内表
                 WITH HEADER LINE.

如上代码,使用类型MAT_AG_TYPE定义了一个含工作区的标准内表,如此,在输出时,可以将内表数据遍历后放到内表自己的工作区中,而不需要另外一个结构存储。在实际开发中,偏向于使用不含工作区的内表,如此增加代码的可读性。

3、页眉输出

页眉输出部分的代码如下:

*&----------------------------------------------------------------------*
*& 输出页眉
*&----------------------------------------------------------------------*
TOP-OF-PAGE.                                            "页眉事件
  FORMAT RESET.
  WRITE:/5(95) sy-uline,
        /5 '序号', 10(5) '物料', 15(20) '物料名称',
         35(12) '物料类型', 48(6) '项目数',
         55(10) '总计' , 65(10) '最大',
         75(10) '最小', 85(10) '平均值',
        /5(95) sy-uline.

如上代码定义了页眉的输出。

4、获取数据

获取数据部分的代码如下:

*&----------------------------------------------------------------------*
*& START-OF-SELECTION
*&----------------------------------------------------------------------*
START-OF-SELECTION.                                    "数据处理事件
*****获得客户信息
  SELECT
    mt~materialid mt~materialname mt~materialtype
       COUNT( * )          AS count
       SUM( oi~oquantity ) AS total
       MAX( oi~oquantity ) AS max
       MIN( oi~oquantity ) AS min
       AVG( oi~oquantity ) AS average
    INTO TABLE mat_ag_itab
    FROM ( ztmaterial AS mt
           INNER JOIN ztorders_i AS oi
           ON oi~materialid = mt~materialid )
    GROUP BY mt~materialid mt~materialname mt~materialtype
    HAVING SUM( oi~oquantity ) <> 0.
  SORT mat_ag_itab BY materialid.

如上代码通过select语句,将多个表(ztmaterial、ztorders_i)的数据获取后存储到内表,此select语句需符合Open SQL的语法,而其与传统的SQL类似也有差异;同时在语句中用到了聚合函数用来统计物料的销售数量;并因为MAT_AG_ITAB不是排序内表,因此为了在数据输出时按物料编号排序,通过SORT语句对内表的数据进行相应排序处理。

5、输出数据

输出数据部分的代码如下:

  LOOP AT mat_ag_itab.
    WRITE:
        /5(5) sy-tabix, 10(5) mat_ag_itab-materialid, 15(20) mat_ag_itab-materialname,
         35(15) mat_ag_itab-materialtype, 48(6) mat_ag_itab-count,
         55(10) mat_ag_itab-total, 65(10) mat_ag_itab-max,
         75(10) mat_ag_itab-min,85(10) mat_ag_itab-average.
  ENDLOOP.

因为内表含工作区,因此LOOP AT后不需带INTO,所遍历的数据将逐行存储到内表MAT_AG_ITAB相同名称的结构中,并可按要求进行输出。

本实践小结:

内表是我们在数据处理中经常使用的ABAP对象,其主要用于临时存储从表或数据中读取的数据并进行后续的处理,本小结将对内表的定义和处理进行说明。

1、内表的类型及定义方式
内表类型及定义
不同类型内表的差异
2、内表的管理和操作

(实践A3 End)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容