版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、abap 初学 进阶 sap在sap中,每一个功能基本上都对应了一个事务代码,你可以输入相应的事务代码来执行相应的功能,事务代码在sap menu下面的输入框中输入。第一个程序,hello world:1. 用abap report来实现:很简单:(1.进入sap系统se38 。 (2.输入程序名z_hello,选择create 。注意:自己开发的程序一定要用z或者y开头,这是因为sap在升级的时候不会覆盖这些程序。 (3.这时会弹出一个对话框,输入title,选择type为executable program 。 (4.然后又会弹出一个对话框,让你选择开发类(package),如果你有自己的
2、开发类的话,输入就可以,没有直接点下面的local object 。 (5.abap编辑器出现了,输入代码: “write: 'hello,world!' .” 。 (6.按ctrl+f2:语法检查;ctrl+f3:激活;f8:执行。到这里,abap的第一个程序就写出来了,好简单!2. 用 abap dialog来实现:比较麻烦,在这里详细的介绍怎么建立screen,以后就不介绍了1. 建立一个dialog程序,步骤同上,只不过在type里选择module pool,假设程序名为:z_screen2. 执行se51,在program里输入程序名称:z_screen;在scree
3、n number里输入屏幕的号码:9000然后点create3. 在short description中输入你的描述:hello world screen4. 点layout,调出屏幕编辑器,建立一个标签,输入hello world5. 点激活,或者ctrl+f36. 执行se93:建立事务代码:输入z_hello,点create,会出现对话框,输入short text,选择program and screen,然后输入你建立的程序名以及屏幕号,这里是z_screen,90007. 点保存,然后会出现对话框,选择local object 好了,执行z_hello,看到了吧,不过这个程序还没有退
4、出的功能,后面会慢慢加上去的。 abap基础知识学习sap abap / 4 基础知识学习 数据类型c :字符串d :日期型格式为 yyyymmdd 例:'1999/12/03'f : 浮点数长度为8i :整数n :数值组成的字符串 如:011,'302'p : packed数用于小数点数值 如:12.00542t : 时间格式为:hhmmss 如:'14:03:00'x : 16进制数 如:'1a03'*-*变量声明data <f> <length> <type> <value>d
5、ecimals 小数点右边的位数decimals <f> 变量名称 <length><type> 变量类型及长度 <value> 初值 <decimals> 小数位数 exp: data : counter type p decimals 3, name(10) type c value 'delta', s_date type d value '19991203'.exp: data : begin of person, name(10) type c, age type i, weight type
6、 p decimals 2, end of person.另外,有关data声明的指令还有: constants(声明常数)、statics(临时变量声明).exp:constants pi type p decimals 5 value '3.14159'.statics 关键字声明的变量仅在目前的程序中使用, 结束后会自动释放 语法: statics <c> <length> <type> <value> <decimals>系统专用变量说明 系统内部专门创建了syst这个structure,里面的栏位存放系统变量
7、,常用的系统变量有: sy-subrc: 系统执行某指令后,表示执行成功与否的变量,'0'表示成功 sy-uname: 当前使用者登入sap的username; sy-datum: 当前系统日期; sy-uzeit: 当前系统时间; sy-tcode: 当前执行程序的transaction code sy-index: 当前loop循环过的次数 sy-tabix: 当前处理的是internal table 的第几笔 sy-tmaxl: internal table的总笔数 sy-srows: 屏幕总行数; sy-scols: 屏幕总列数; sy-mandt: client nu
8、mber sy-vline: 画竖线 sy-uline: 画横线 type 关键字 用来指定资料型态或声明自定资料型态 example: types: begin of mylist, name(10) type c, number type i, end of mylist. data list type mylist.like 关键字 跟type关键字使用格式相同, 如 data transcode like sy-tcode. 不同的是 like 用在已有值的资料项, 如系统变量, 而type关键字则是用在指定资料型态。tables 关键字用来声明 table work area 的数据
9、, 对应至 abap/4 资料文件(dictionary object), 由sql 指令加载所需数据语法:tables <dbtab>example:tables: spfl.select * from spfl.write: spfl-mandt, spfl-carrid,spfl-connection.endselect.从abap/4 dictionary 的 spfl 档载入mandt,carrid,connection 三个字段至spfl 此table work area *-*输出一. write 语句abap/4用来在屏幕上输出资料的指令是write指令,例如: w
10、rite: 'user name is:', sy-uname.二. 指定屏幕输出位置指定输出位置的语句格式为: write: at / <pos> (<len>) 资料项 <par>其中: / : 在下一行输出<pos>: 指定输出的行号;(<len>):指定输出位数(长度)<par>: 指定显示格式参数,参数有: left-justified 资料*左对齐 centered 资料*中间对齐 right-justified 资料*右对齐 under <g> 正对在资料项<g>的下面
11、显示 no-gap 紧接着显示,不留空格 using edit mask <m>: 使用内嵌子元显示, 如 12:03:20 using no edit mask: 不使用内嵌子元 no-zer 数字前面 0 的部分不显示 no-sign: 不显示正负号 decimals <d>: 显示 <d> 位小数 expoent <e>: f(浮点数)指数的值 round <r>: 四舍五入至小数点后<r>位 currency <c>: 币别显示 dd/mm/yy : 日期显示格式 mm/dd/yy: yy/mm/dd:
12、 yy/dd/mm mm/dd/yyyy: dd/mm/yyyy yyyy/mm/dd: yyyy/dd/mm:例如1: write: /10(6) 'abcdefghijk'.输出结果为: abcdef例如2: data: x type i value '11:20:30', a(5) type c value 'ab cde'. write: / x using edit mask '_:_:_'. write: / x using edit mask '$_,_'. write: / y no-gap.输出结
13、果为: 11:20:30 $112,030 abcdef例如3: data: len type i value 10, pos type i value 11, text(10) value '1234567890' write 'the text - appears in the text.'. write at pos(len) text.write to 语句的基本 形式要将值(文字)或源字段内容写入目标字段,可以使用 write to 语句:语法write <f1> to <f2> <option>.data: num
14、ber type f value '4.3', text(10), float type f, pack type p decimals 1.write number.write number to text exponent 2.write / text.write number to float.write / float.write number to pack.write / pack.move number to pack.write / pack.exp:data: name(10) value 'source', source(10) value
15、'antony', target(10).write (name) to target.write: target.exp :data: counter type i.compute counter = counter + 1.counter = counter + 1.add 1 to counter.在此,三条运算语句进行相同算术运算输出屏幕上的线和空行用下列语法,可以在输出屏幕上生成水平线:语法uline at /<pos>(<len>).它等同于write at /<pos>(<len>) sy-uline.at 后的格式
16、规范,与在在屏幕上定位 write 输出(页 28)中为 write 语句说明的格式规范完全一样。如果没有格式规范,系统则开始新的一行,并用水平线填充该行。否则,只按指定输出水平线。生成水平线的另一种方法,是在 write 语句中键入恰当数量的连字符,如下所示:write at /<pos>(<len>) '-.'.垂直线用下列语法 ,可以在输出屏幕上生成垂直线:语法write at /<pos> sy-vline.或write at /<pos> '|'.空行用下列语法 ,可以在输出屏幕上生成空行:语法skip
17、<n>.该语句从当前行开始,在输出屏幕上生成 <n> 个空行。如果没有指定 <n> 的值,就输出一个空行 。要将输出定位在屏幕的指定行上,请使用:语法skip to line <n>.该语句允许将输出位置向上或向下移动。 四. 显示图示:语法: write: <symbol-name> as symbol. write: <icon-name> as icon.例如: include <symbol>. include <icon>.write: / 'phone symbol:',
18、 sym_phone as symbol.write: / 'alarm icon:', icon_voice_output as icon.要查看系统所提供有那些符号及图示,可选择'edit'下的'insert statement',选择'write',接下来选择要查看的群组,如symbol 或icon, 接下来按'display'即可.*-*一. internal table 的声明abap/4中的internal table是一种data structure,类似于其他语言中的struture,它可以由几个不
19、同类型的栏位(field)组成,用来表示具有不同属性的某一事物,单独一笔资料表示某个事物,多笔资料表示具有相同属性的多个事物.internal table 的定义有以下几种格式:格式一. data: begin of <internal table> occurs <n>, <field 1> type <type1>, <field 2> type <type 2>, <field 3> type <type 3>, end of <internal table>. 语法: data
20、<f> <type> occurs <n> with header line example: data vector type i occurs 10 with header line. 格式二. types: begin of <work area>,定义工作区 <field 1> type <type1>, <field 2> type <type 2>, <field 3> type <type 3>, end of <work area>. types
21、<internal table> type <work area> occurs <n>.定义内表 格式三. data: begin of <work area>. include structure <table name>. data: end of <work area>. data: <internal table> like <work area> occurs <n>.exp: types vector type i occurs 10.定义内表types: begin of
22、 line,定义工作区line column1 type i, column2 type i, column3 type i, end of line.types itab type line occurs 10.定义内表itabtypes: begin of deepline, 定义工作区deepline table1 type vector, table2 type itab, end of deepline.types deeptable type deepline occurs 10. 定义内表deeptable本示例创建与上例相同的内表数据类型(vector 和 itab)。然后创建
23、数据类型 deepline 作为字段串,包含这些内表作为组件。通过该字段串,数据类型 deeptable 被创建为内表。因此该内表的元素本身就是内表。exp :types: begin of line, column1 type i, column2 type i, column3 type i, end of line.types itab type line occurs 10.data tab1 type itab. 使数据对象 tab1 与 itab 结构相同data tab2 like tab1 with header line.创建结构tab2,带表头行同创建内表数据类型(页 99
24、)中所示,该示例创建数据类型 itab 作为内表。通过使用 data 语句的 type 参数引用 itab,使数据对象 tab1 与 itab 结构相同。通过使用 data 语句的 like 参数引用 tab1,使数据对象 tab2 结构相同。创建的 tab2 带表头行。因此,可以在程序中使用 tab2-column1、tab2-column2 和 tab2-column3 等定位表格工作区域 tab2。exp :data flight_tab like sflight occurs 10.本示例创建数据对象 flight_tab, 其结构与数据库表格 sflight 相同。本示例介绍 如何采
25、用两种不同的步骤创建同一内表。types vector_type type i occurs 10.定义内表vector_typedata vector type vector_type with header line.在此创建一个内表数据类型 vector_type,其行包含首先创建的基本类型 i 字段。然后,通过引用 vector_type 创建数据对象 vector。通过使用 with header line 选项还创建表格工作区域 vector。在这种情况下,表格工作区域包含一种类型 i 字段,可以通过名称 vector 定位。data vector type i occurs 10
26、 with header line.在这种情况下,通过直接在 data 语句中使用 occurs 选项创建完全一样的数据类型 vector。*-*1. types type. 2. types type(len).3. types: begin of structype . end of structype. 4. types itabtype type tabkind of linetype like tabkind of lineobj with unique|non-unique keydef initial size n. 5. types itabtype type range of
27、 type. types itabtype like range of f. 6. types itabtype type linetype|like lineobj occurs n. *-* append line 格式:append <work area> to <internal table>举例一:(使用work area)data : begin of line,定义一个工作区line col1 type i, col2 type i, end of line.data itab like line occurs 10.do 2 times. line-co
28、l1 = sy-index. line-col2 = sy-index * 2. append line(工作区) to itab(内表).enddo.loop at itab into line. write : / line-col1,line-col2.endloop.举例二 (不使用work area)data : begin of itab occurs 10, col1 type i, col2 type i, end of itab.do 2 times. itab-col1 = sy-index. itab-col2 = sy-index * 2. append itab.en
29、ddo.loop at itab. write : / itab-col1,itab-col2.endloop.exp:data: begin of itab occurs 10, col1 type c, col2 type i, end of itab.do 3 times. append initial line to itab. itab-col1 = sy-index. itab-col2 = sy-index * 2. append itab.enddo.loop at itab. write: / itab-col1, itab-col2.endloop.举例三. (加入另一个i
30、nternal table的元素) 格式: append lines of <itab1> from <n1> to <n2> to <itab2>. 将<itab1>的元素加入至<itab2>中,可选取自<n1>至<n2>的范围. append lines of itab to jtab.collect linecollect 指令也是将元素加入internal table中,与append 的区别是: collect指令在非数值栏位相同的情况下,将数值栏位汇总.格式: collect <w
31、ork area> into <itab>data: begin of itab occurs 3, col1(3) type c, col2 type i, end of itab. itab-col1 = 'abc'. itab-col2 = 10. collect itab. itab-col1 = 'xyz'. itab-col2 = 20. collect itab. itab-col1 = 'abc'. itab-col2 = 80. collect itab.此时, internal table中放的是2笔数据,
32、分别为: itab-col1 itab-col2 'abc' 90 'xyz' 20*-*insert line将元素插入在指定的internal table位置之前.格式: insert <wa> into initial line into <itab> index <idx>或者: insert lines of <itab1> from <n1> to <n2> into <itab2> index <idx>其中: <wa>即work area,
33、工作区中的元素.initial line into :插入一笔初始化的记录.<itab>: internal tableindex <idx>: internal table 的记录号.(新加入的元素放在此记录前面) example: data: begin of line, col1 type i, col2 type i, end of line. data itab like line occurs 10. do 3 times. line-col1 = sy-index *10. line-col2 = sy-index *20. append line int
34、o itab. enddo. line-col1=100. line-col2=200. insert line into itab index 2. "插入在位置2之前 loop at itab into line. write: / sy-tabix,line-col1,line-col2. "sy-tabix为table位置 endloop. 执行结果: 1 10 20 2 100 200 "插入的元素 3 20 40 4 30 60插入另一internal table元素 语法: insert lines of <itab1> from <
35、;n1> to <n2> to <itab2> index <idx> 将<itab1>的元素插入至<itab2>中, 位置在 <idx>之前, 可选取自<n1>至<n2>的范围 example: append lines of itab to jtab index 3. 将itab所有元素插入jtab中, 位置在第三个元素之前*-*读取internal table(read,loop at)格式一: loop at <itab> into <wa>from <n
36、1> to <n2>where <conditions> <statement>endloop. example: loop at itab into line where col1 >100. write: / sy-tabix,line-col1. endloop. 仅读取 col1 > 100 的元素格式二:read table <itab> into <wa> index <idx> / with key <conditions>举例. (格式二)data: begin of itab
37、 occurs 10, col1 type i, col2 type i, end of itab. do 10 times. itab-col1 = sy-index. itab-col2 = sy-index * 2. append itab.enddo.read table itab index 3.(或者: read table itab with key col1 = 3.)write: / 'itab-col1 = ', itab-col1, 'itab-col2 = ', itab-col2.执行结果同样是: itab-col1 = 3itab-c
38、ol2 = 6. example: read table itab into line index 5 读取 itab的第5个元素资料, 放入 line的栏位中根据栏位内容寻找 语法: read table <itab> into <wa> example: itab-col1 = 'abc'. read table itab into line. 找出itab 中 col1 栏位内容是 abc 的元素, 找到的值放入 line 中 若找到 sy-subrc传回0, 找不到则传回 4, <itab>必须声明有 work area*-*修改in
39、ternal table 中的值格式: modify <itab> from <wa>index <idx>transporting <f1><f2>where <conditions>举例一. read table itab index 3. line-col1 = 29. modify itab from line transporting col1. 将第三笔记录的col1栏位的值修改为29.举例二. t_salary - salary = 50. modify t_salary transporting salar
40、y where birthday = '1999/12/06'. delete internal table中的栏位格式: delete <itab> index <idx>.或: delete <itab>from <n1> to <n2> where <conditions>internal table 排序 sort <itab> <order way>by <f1><f2>其中:<order way> 有descending 和ascend
41、ing, default 为ascending. <f1>: 为指定排序的栏位. example: sort itab descending by col2. 将 itab 根据 col2栏位递减排序*-*确定内表属性如果在处理过程中想知道内表一共包含多少行,或者想知道定义的 occurs 参数的大小,请使用 describe 语句,用法如下:语法describe table <itab> lines <lin> occurs <occ>.如果使用 lines 参数,则将填充行的数量写入变量 <lin>。如果使用 occurs 参数,
42、则将行的初始号写入变量 <occ>。data: begin of line, col1 type i, col2 type i, end of line.data itab like line occurs 10.data: lin type i, occ type i.describe table itab lines lin occurs occ.write: / lin, occ.do 1000 times. line-col1 = sy-index. line-col2 = sy-index * 2. append line to itab.enddo.describe t
43、able itab lines lin occurs occ.write: / lin, occ.其输出为: 0 10 1.000 10在此创建内表 itab。在填充表格前后执行 describe 语句。更改当前行号,但无法更改初始行号。*-*加总sum.总和计算存放与work area中,但只能在loop 中使用.例: loop at itab into line. sum. endloop. write: / line-col1, line-col2. line-col1 和 line-col2 存数值总和初始化internal tablerefresh <itab>. 清空&
44、lt;itab>中的值.使用在没有 header line 的 internal table中, 清除所有元素clear <itab>. 清空<itab>的header line.使用在有 header line 的 internal table中, 清除所有元素free <itab>. 释放内存空间.释放(release) internal table所占的内存空间, 用在 refresh和 clear指令之后将值重置为 默认值可以用 clear 语句重置任何数据对象值,如下所示:语法clear <f>.exp:data number t
45、ype i value '10'.write number.clear number.write / number.输出为: 10 0clear 语句将字段 number 的内容从10 重置为默认值 0。*-* 添加字段顺序并将结果赋给另一个字段语法add <n1> then <n2> until <nz> giving <m>.如果 <n1>、 <n2>、 . 、 <nz> 是在内存中相同类型和长度的等距字段序列,则进行求和计算并将结果赋给 <m> 添加字段顺序并将结果添加到另一个
46、字段的内容中语法add <n1> then <n2> until <nz> to <m>.该语句除了将字段总和添加到 <m> 的旧内容中之外,与上面语句的工作方式相同 。有关其它相似变体的信息,参见有关 add 语句的关键字文档。data: begin of series, n1 type i value 10, n2 type i value 20, n3 type i value 30, n4 type i value 40, n5 type i value 50, n6 type i value 60, end of serie
47、s.data sum type i.add series-n1 then series-n2 until series-n5 giving sum.write sum.add series-n2 then series-n3 until series-n6 to sum.write / sum.输出如下: 150 350在此,将 n1 到 n5 组件内容求和并将其值赋给字段 sum。然后,将 n2 到 n6 组件求和并将其添加到 sum 的值中。*-* 屏幕输入命令在abap/4中要从屏幕输入变量, 使用的命令是 parameters 及selection-options: 1. parameter: 输入一个变量或栏位内容 2. selection-options: 使用条件筛选画面来输入数据 parameters 指令基本的输入命令, 类似如basic的input命令, 但无法使用f格式(浮点数) 语法: parameters <p> default <f> lower case obligatory a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房屋租赁合同中的第三方监管机构
- 数学小班特色课程设计
- 高频课程设计分工
- 雷蒙磨粉机课程设计
- 电机设计变压器课程设计
- 社区活动场地场平施工合同
- 产业园区食堂改造招投标方案
- 制造业员工聘用合同范本
- 暑期特设写生课程设计
- 乳制品业务员聘用协议模板
- 2024-2030年国内婴童用品行业深度分析及竞争格局与发展前景预测研究报告
- 粤教粤民版《劳动技术》四上 第二单元第3课《提篮》教学设计
- 办公楼室内装饰工程施工设计方案技术标范本
- 全球及中国玉米淀粉行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告(2024-2030)
- 部编版小学语文三年级上册基础知识试题含答案(全册)
- S7-1200PLC技术及应用 课件 项目17 步进电机控制
- 2024年中国老年糖尿病诊疗指南解读(2024年版)
- 《生物技术制药》课程介绍与教学大纲
- 《现代农业技术推广》课件-第七组 农民问题专题调研
- 第30课 家居收纳技巧 课件 2023-2024学年苏教版初中劳动技术七年级上册
- 2024年福建漳平闽投抽水蓄能有限公司招聘笔试冲刺题(带答案解析)
评论
0/150
提交评论