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

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

作者: 真言真语SAP | 来源:发表于2017-12-25 17:40 被阅读0次
    图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)

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/juzlgxtx.html