需求分析:
1、具体需求
本《按输入销售订单输出销售信息》有如下需求:
- 程序的初始界面可以输入销售订单信息,订单号、产品编号、数量、价格、折扣率;
- 输入后执行将输出输入的销售订单信息;
- 根据输入的数量、价格和折扣,得到销售金额:数量*价格*(1-折扣);
- 将销售数量和销售金额的单位进行转换,数量以斤为输出,销售金额以美元输出。
2、开发分析
要达成本实践目标,需要综合ABAP的数据输出实现方式:
- 输入信息包括订单号、数量、价格等是用户输入的界面字段,可以通过选择字段PARAMETERS进行定义;
- 销售金额、转换后的数量、转换后的金额,将会根据输入的信息变动,如此可以在程序中定义为变量,以存储及输出要处理的数据;
- 通过对数据的运算,包括加减乘除,计算出销售金额、转换后的数量等;
- 通过Write语句可以将数据输出到屏幕,而在输出时需要考虑每列数据输出起始位置及所占字符长度;
实践步骤:
本实践通过程序编辑器(SE38)即可完成,编写的代码将有如下几部分组成,按开发人员风格不同,其组成部分并非强制一致。
No | 部分 | 说明 |
---|---|---|
1 | 程序声明 | 声明本程序执行后是否包含标准标题,数据输出宽度和每页的行数量为多少 |
2 | 对象定义 | 通过定义变量或常量等,以在程序执行过程中计算和存储临时值 |
3 | 数据处理 | 根据需求对数据进行处理 |
4 | 文本元素 | 通过文本元素定义程序输出时的文字内容以及初始界面中的字段 |
5 | 输出数据 | 将计算结果数据按要求输出 |
1、程序声明
程序声明部分代码如下:
REPORT zu0301_num_cal.
本语句是对程序的定义,表明此程序代码不是FUNCTION MODULE(功能函数),不是CLASS(类),而是可以执行的可以输出数据的此程序;这是对程序最基本的声明,且必须存在的部分。
2、对象定义
对象定义部分代码如下:
*****对象定义
DATA: oamount TYPE f, "销售金额
qualityc TYPE p DECIMALS 1, "公斤转换为斤后的数量
pricec TYPE p DECIMALS 1, "转换为斤后的价格
oamountc TYPE f, "转换为美元后的销售金额
strng TYPE string. "输出信息
CONSTANTS crate TYPE p DECIMALS 4 "假设汇率为固定值,此处定义为常量
VALUE '0.1512'.
PARAMETERS: orderno(6) TYPE n, "定义类型为N(数字字符)的订单编号变量
product(10) TYPE c, "定义类型为C(字符)的产品编号变量
quality TYPE i DEFAULT 10, "定义类型为I(整数)默认值为10的数量变量
price(4) TYPE p DECIMALS 2, "定义类型为P(定点)小数位数2的数量变量
discount(4) TYPE p DECIMALS 1. "定义类型为P(定点)小数位数1的折扣变量
如上代码,首先通过DATA定义在程序中要存储和输出数据的变量及其类型,包含:oamount(销售金额,浮点小数)、qualityc(斤数量,小数位数1的定点小数)、pricec(斤价格,小数位数1的定点小数)、oamountc(美元销售金额,浮点小数)。随后通过CONSTANTS定义1个常量crate(汇率人民币与美元汇率),此常量类型是4位小数的定点小数,并将汇率赋值0.1512,通过此常量定义后表示在程序执行过程中不需要改变。
然后,按需求通过PARAMETER定义初始界面中要输入的订单编号、产品编号、数量、价格、折扣率,并根据需要设置了其类型。
3、数据处理
通过字符处理、计算、得到各变量的值以进行下一步的程序处理:
*----------------------------------------------------------------------*
*****数值计算
oamount = quality * price
* ( 1 - discount / 100 ). "计算销售金额
qualityc = quality * 2. "1公斤 = 2斤
pricec = price / 2.
oamountc = oamount * crate . "指定汇率为1人民币=0.1512美元
*****输入信息显示
WRITE: /5 TEXT-001, "WRITE输出数据,/5 换行从第5位开始输出
/10 '订单号:', 20 orderno, "订单号值从第20位开始输出
/10 '产 品:', 20 product,
/10 '数 量:', 20(10) quality, '公斤',
/10 '价 格:', 20(10) price,'元/公斤',
/10 '折扣率:', 20(10) discount && '%' . "%显示效果
注意运算符包括+、-、*、/还有括号等左右需要留空,不留空的话其意义不同,如不留空时,+在字符中为截取字符,-表示一个结构包含的字段,/在WRITE中为换行。
4、文本元素
对如上部分代码输入并保存后,通过菜单“转到”-->“文本元素”,设置文本符号(图3-1)、标题(图3-2),以为后续输出数据部分使用。
5、输出数据
根据要求,通过Write进行输出。
*****输出信息显示
SKIP 1. "空一行输出
WRITE: /5 TEXT-002.
strng = oamount && ','. "通过&&合并金额(浮点型)和,
CONCATENATE TEXT-003 strng INTO strng. "通过CONCATENATE合并多个字符到STRNG
WRITE: /10 strng.
strng = TEXT-005 && qualityc && '斤,'
&& TEXT-006 && pricec && '元/斤,'.
WRITE: /10 TEXT-004,
/10 strng.
strng = TEXT-008 && oamountc && '美元。'.
WRITE: /10 TEXT-007,
/10 strng.
如上通过WRITE语句进行数据的输出,其中strng根据输出的需求,进行了多次的赋值。
将如上4部分代码按顺序组合在一起,则是此开发实践的完整实现代码,输入后可通过程序美化器自动编排,由此完成程序的开发。