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

图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)

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

推荐阅读更多精彩内容