美文网首页
04数据输出,A1-按地区城市排序输出客户列表

04数据输出,A1-按地区城市排序输出客户列表

作者: 真言真语SAP | 来源:发表于2017-12-20 15:26 被阅读0次
    图4-A1 按地区城市排序输出客户列表

    实践A1-按地区城市排序输出客户列表

    需求分析:

    1、具体需求

    本《按地区城市排序输出客户列表》有如下需求:

    1. 从客户表中取部分字段而不是所有字段进行输出;
    2. 输出的客户列表,首先要按照地区排序、然后按城市排序;
    3. 需要输出标题行以对每一列进行说明;
    4. 各列的文字颜色和背景色有不同要求,如客户列有背景色,客户名称列为红色……。
      整体需求可见图。
    图4- 1 整体需求
    2、开发分析

    要达成本实践目标,需要综合ABAP的数据输出实现方式:

    1. ABAP可通过Open SQL从表中获得要输出的数据存储到内表;
    2. 通过Write语句可以将数据输出到屏幕,而在输出时需要考虑每列数据输出起始位置及所占字符长度;
    3. 可以通过Format语句控制输出颜色。

    实践步骤:

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

    No 部分 说明
    1 程序声明 声明本程序执行后是否包含标准标题,数据输出宽度和每页的行数量为多少
    2 对象定义 通过定义变量或常量或要使用的表结构等,以在程序执行过程中计算和存储临时值
    3 页眉输出 如不指定标准标题,则可以通过代码设置输出的页眉
    4 获取数据 从表中获得要输出的数据数据并存储到内表中以待后续输出
    5 输出数据 将内表中的数据按要求输出
    1、程序声明

    程序声明部分代码如下:

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

    REPORT 程序名称:是对程序的定义,表明此程序代码不是FUNCTION MODULE(功能函数),不是CLASS(类),而是可以执行的可以输出数据的此程序;这是对程序最基本的声明,且必须存在的部分。
    NO STANDARD PAGE HEADING:标准的标题定义,可在程序编辑器中通过菜单“转到文本元素”中的“列表标题”进行定义;而如果设置为此,则表示此程序不使用标准的“列表标题”。
    LINE-SIZE 100 LINE-COUNT 80:对页面的宽度高度进行定义,其中LINE-SIZE为按英文字母长度定义的页面宽度(如此定义为100表示能容纳100个数字或字母,而如果是中文则按一个中文按2个字符算);LINE-COUNT则是页面的高度(如此定义为80,则表示每一页面最多能容纳80行,超过则在下一页显示)。

    2、对象定义

    对象定义部分代码如下:

    *****对象定义
    TYPES: BEGIN OF cust_type,                              " CUST_TYPE-类型名称
             customerid   TYPE ztcustomer-customerid,
             customername TYPE ztcustomer-customername,
             region       TYPE ztcustomer-region,
             city         TYPE ztcustomer-city,
             address      TYPE ztcustomer-address,
             contact      TYPE ztcustomer-contact,
             cphone       TYPE ztcustomer-cphone,
           END OF cust_type.
    
    DATA:cust_stru TYPE cust_type,
         cust_itab TYPE STANDARD TABLE OF cust_type.
    

    如上代码,首先通过TYPES定义了一个名称为CUST_TYPE的类型,此类型包含了要输出的字段:customerid(客户编号)、customername(客户名称)、region(地区)、city(城市)、address(地址)、contact(联系人)、cphone(电话);此类型也可在数据字典中定义好后,由此在不同的程序代码中都可以使用。
    然后,通过DATA,使用CUST_TYPE定义了一个结构CUST_STRU,此结构可以在后面的程序中存储要输出的数据;也使用此CUST_TYPE定义了一个内表CUST_ITAB,此内表是一个标准的不含Work Area(工作区)的内表,这个内表用来存储从表中获得的数据。
    定义的类型、结构及内表在数据处理过程中的关系如图4-2。

    图4- 2 数据处理的过程
    3、输出页眉

    输出页眉部分代码如下:

    *&----------------------------------------------------------------------*
    *& 输出页眉
    *&----------------------------------------------------------------------*
    TOP-OF-PAGE.                                           "页眉事件
      FORMAT RESET.
      WRITE:/5(90) sy-uline,
            /5 '客户ID', 15 '客户地址', 30 '地区', 35 '城市', 40 '地址' , 60 '联系人', 70 '电话号码',
            /5(90) sy-uline.
    

    页眉部分代码,要通过TOP-OF-PAGE定义,在此部分可以定义每一页上方输出的标题行。
    在如上代码中首先通过FORMAT RESET,重置输出数据的颜色,因为后面的数据输出时设置了颜色。
    然后,通过WRITE进行数据的输出,其中:
    /5(90) sy-uline,表示每次执行时换行输出,且前面空4个字符,从第5位开始输出,输出的内容是长度为90的横线(sy-uline)。
    /5 '客户ID', 15 '客户地址',……,则是按要求输出标题文字。
    输出效果如图4-3。

    图4- 3 页眉输出
    4、获得数据

    获得数据部分代码如下:

    *&----------------------------------------------------------------------*
    *& START-OF-SELECTION
    *&----------------------------------------------------------------------*
    START-OF-SELECTION.                                    "数据处理事件
    *****获得客户信息
      SELECT                          "通过SELECT 语句从表ZTCUSTOMER中获得数据并赋值到内表
        customerid customername region city address contact cphone
        INTO TABLE cust_itab
        FROM ztcustomer
        ORDER BY region city.          "默认升序:ASCENDING,降序则为:DESCENDING
    

    通过START-OF-SELECTION区分页眉部分的处理,后面的代码则可进行数据的处理,包括获得数据和输出数据。
    如上SELECT代码为ABAP的Open SQL,是为了满足SAP系统在不同底层数据库时的使用,其语句规范接近标准的SQL又有所差异;有了Open SQL,ABAPer只需要熟悉和掌握其语法则可从相应表中获得数据,而不用考虑使用的底层数据库是Oracle还是DB2还是MysqlServer。
    如上代码执行完成后,则可将数据从ZTCUSTOMER表中,获得所需的各个字段的数据并存储到内表CUST_ITAB中,并按REGION(地区)、CITY(城市)列升序,其中也可增加WHERE条件以筛选数据(本实践中略)。

    5、输出数据

    输出数据部分代码如下:

    *****循环输出客户信息
      LOOP AT cust_itab INTO cust_stru .
        FORMAT INVERSE OFF COLOR COL_KEY.   "设置输出格式为含背景色,且为蓝色
        WRITE:
            /5 cust_stru-customerid,        "按FORMAT语句的设置输出
            15 cust_stru-customername INVERSE ON COLOR COL_NEGATIVE, "无背景色,文字为红色
            30 cust_stru-region INVERSE ON,                          "无背景色,文字为蓝色
            35 cust_stru-city INVERSE ON COLOR COL_POSITIVE,         "无背景色,文字为绿色
            40 cust_stru-address INVERSE ON COLOR COL_GROUP,         "无背景色,文字为橙色
            60 cust_stru-contact,
            70 cust_stru-cphone.
    
      ENDLOOP.
    

    如上代码,是将逐条从内表CUST_ITAB中获取数据并赋值给结构CUST_STRU后输出。
    同时通过FORMAT语句设置后续数据输出的默认格式,其中INVERSE OFF表示为背景色,COLOR COL_KEY表示为蓝色;同时WRITE语句中也可控制不同内容的格式。
    输出效果如图4-4。

    图4- 4 数据明细输出

    如上从上到下各部分代码则是组成实现本实践的全部代码,编写完成后激活,则可进行程序的测试发布。

    输出小结:

    1、程序的输出声明
    项目 说明
    NO STANDARD PAGE HEADING 不使用标准的页眉
    LINE-SIZE width 页眉宽度(能容纳的英文字符或数字)
    LINE-COUNT page_lines
    [(footer_lines)]
    页面高度(一个页面能容纳的行数)
    如指定footer_lines,则页面中保留行给页脚以给END-OF-PAGE使用
    2 、WRITE语句
    基本语法
    / 反斜杠为换行显示
    n 从第n个字符开始输出
    (n) 如不指定(n),则按变量常量或字符的长度输出,按此指定后,则按此指定长度输出,如变量常量或字符的长度超过则被截取
    WRITE AT 如使用WRITE AT,则字符起始输出位置n及输出长度(n)都可以为变量常量,否则只能使用数值
    例子 WRITE /5(90) sy-uline.
    从第5位开始,输出长度为90的横线
    显示格式
    对齐 LEFT-JUSTIFIED 左对齐(字符类型默认)
    CENTERED 中对齐
    RIGHT-JUSTIFIED 右对齐(数字类型默认)
    UNDER <g> 对齐到另一个输出对象<g>
    输出 NO-GAP 不保留字段间空格
    NO-ZERO 不显示前导0
    NO-SIGN 不显示正负号
    USING EDIT MASK <m> 按掩码指定输出
    USING NO EDIT MASK 不按掩码指定输出
    CURRENCY <c> 输出代码c对应的货币
    小数 DECIMALS <d> 显示d位小数
    EXPONENT <e> F(浮点数)exponent的值
    ROUND <r> 四舍五入至r位小数
    日期 DD/MM/YY MM/DD/YY
    DD/MM/YYYY MM/DD/YYYY
    DDMMYY MMDDYY YYMMDD
    按不同格式指定日期输出
    例子 WRITE / 'C10007' using edit mask _:_____. "输出为C:10007
    WRITE / sy-datum mmddyy. "输出当前日期为10/21/17
    WRITE / 'Hello', 'World' NO-GAP. "HelloWorld间无空格
    3、空行输出
    项目 说明
    SKIP [<n>] 从当前行开始,空n行后再输出
    SKIP TO LINE <n> 跳到第n后输出
    4、颜色控制
    FORMAT语句
    FORMAT RESET 颜色重置
    FORMAT INVERSE OFF 背景色
    FORMAT INVERSE ON 前景色
    颜色
    数字(COLOR=n) 代码(COL_代码) 颜色 用途
    1 HEADING 灰蓝色 一般用途
    2 NORMAL 浅灰色 列表内容
    3 TOTAL 黄色 汇总
    4 KEY 蓝色 关键字
    5 POSITIVE 绿色 正确
    6 NEGATIVE 红色 错误
    7 GROUP 橙色 控制

    (实践A1 End)

    相关文章

      网友评论

          本文标题:04数据输出,A1-按地区城市排序输出客户列表

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