美文网首页
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-按地区城市排序输出客户列表

    实践A1-按地区城市排序输出客户列表 需求分析: 1、具体需求 本《按地区城市排序输出客户列表》有如下需求: 从客...

  • 04数据输出,A2-按地区分组输出客户列表

    需求分析: 1、具体需求 本《按地区分组输出客户列表》有如下需求: 从客户表获取数据后,按地区进行分组; 客户列表...

  • Lambda表达式应用之排序分组

    需求:将城市列表按照城市名称的首字母分组并排序后输出。例如:原数据源: 目标数据源: 按首字母排序,所以先给原数据...

  • 显示文件和目录列表

    ls —— 最基本的形式会显示当前目录下的文件和目录,输出的列表是按字母排序的(按列排序而不是按行排序)ls -F...

  • python set集合,排序输出

    python set集合,排序输出 列表-->集合-->列表-->list sort() == 集合-->列表--...

  • Day4 列表

    Day4 01.输入输出函数 02.列表 03.添加列表元素 04.删除列表元素 01.输入输出函数 1.输出函数...

  • 优化repeated DNA sequence

    按alphabatical order 排序输出 以及bit operation?

  • C++结构体案例2

    对英雄数组按年龄进行排序 输出结果

  • 计数排序

    计数排序 使用哈希表的原理,输出从顺序的结果列表

  • python之理解排序

    python之理解排序 排序是以某种顺序从集合中存放元素的过程。例如,单词列表可以按字母顺序或按长度排序。城市列表...

网友评论

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

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