1、第 1 页 ABAP开发培训什么是什么是ABAP?Advanced Business Application Programming高级商业应用程序设计。是SAP专有的开发语言,SAP的应用程序就是用ABAP语言开发的。第1页,共40页。第 2 页ABAP开发培训ABAP的开发环境展示第2页,共40页。第 3 页ABAP开发培训SAP的三层架构表示层应用层数据库第3页,共40页。第 4 页ABAP开发培训ABAP程序的种类报表最常见的ABAP程序,展示数据,比如财务的三大报表。接口常见的接口如RFC/BAPI,iDoc,Webservice。这些都是以Function Module为基础的。增
2、强对标准程序的增强(改动)。Dialog带交互的程序,SAP标准的事物码很多就是Dialog。第4页,共40页。第 5 页ABAP开发培训数据类型默 认大小有效 大小初始值说明 C11-65535SPACE文 本,字符(字母数字字 符)最常用的格式D8800000000日 期(格式:YYYYMMDD)F880浮 点数。用于计算,精确范围近 似15 位十进制数,精确计算用PI440整 型(整数)。用于计算 计数 项目号 N11-6553500.0数字文本,不用于计算。会计科目,邮编等P81-160组合数,指定长度和小数点位数。数量 金额 距离等,可用于计算T66000000时 间(格式:HHMM
3、SS)X11-65535X00十 六进制STRING动态长度的字符串,日志文本,描述性文字等XSTRINGASCIIABAP的数据类型-基本数据类型第5页,共40页。第 6 页ABAP开发培训用户定义的基本数据类型完全是以预定义的基本数据类型为基础的。使用TYPES语句定义自己的基本数据类型。TYPES:NUMBER TYPE I,LENGTH TYPE P DECIMALS 2,CODE(3)TYPE C.DATA:NO_FLIGHTS TYPE NUMBER,NO_PASSENGERS TYPE NUMBER,DISTANCE TYPE LENGTH,HEIGHT TYPE LENGTH,
4、CITY_CODE TYPE CODE,COUNTRY_CODE TYPE CODE.数据类型可以在程序内部定义,但只能程序内部用;也可以在程序外部定义,这样全局都可以使用(事物码SE11)。ABAP的数据类型-用户定义的基本数据类型第6页,共40页。第 7 页ABAP开发培训两种结构化数据类型:结构(Structure)和 内表(Internal Table)。Structure:本质上讲是一个由多个字段组成的字段串,在程序中只能存储一条数据,如果不好抽象化,可以理解为Excel的一行。Internal Table:多行多列,可以理解为一个Structure纵向拉长。内表分3种,标准表,排序
5、表,哈希表。结构和内表可以在程序内部定义,但只能程序内部用;也可以在程序外部定义,这样全局都可以使用(事物码SE11)。ABAP的数据类型-结构化数据类型第7页,共40页。第 8 页ABAP开发培训TYPES语句定义类型,DATA语句声明变量,如刚才用到的例子:TYPES:NUMBER TYPE I,LENGTH TYPE P DECIMALS 2,CODE(3)TYPE C.DATA:NO_FLIGHTS TYPE NUMBER,DISTANCE TYPE LENGTH,CITY_CODE TYPE CODE,CONSTANTS语句定义常量:CONSTANTS PI TYPE P DECIM
6、ALS 5 VALUE 3.14159.Hint:变量的命名参照开发规范。ABAP程序的数据定义第8页,共40页。第 9 页ABAP开发培训实际应用中,更多是直接用LIKE语句定义变量。DATA:ZMATNR LIKE MARA-MATNR,“物料号 ZMTART LIKE MARA-MTART.“物料类型或者DATA ZMATNR LIKE MARA-MATNR.DATA ZMTART LIKE MARA-MTART.两者的意义完全相同。DATA 变量名 LIKE 表-字段名(结构-字段名)DATA 变量名 LIKE 系统标准变量ABAP程序的数据定义第9页,共40页。第 10 页ABAP开
7、发培训结构变量的定义:结构DATA:BEGIN OF GS_MARC,MATNR LIKE MARC-MATNR,WERKS LIKE MARC-WERKS,PSTAT LIKE MARC-PSTAT,BWTTY LIKE MARC-BWTTY,EKGRP LIKE MARC-EKGRP,END OF GS_MARC.这是一个5个字段的结构。G代表global,S代表Structure.结构也可以用SE11事物码在系统里定义,所有程序都可以使用,但命名必须以Z开头。Hint:结构变量的命名有规则,参见开发规范ABAP程序的数据定义第10页,共40页。第 11 页ABAP开发培训结构变量的定义:
8、内表DATA:BEGIN OF GS_MARC,MATNR LIKE MARC-MATNR,WERKS LIKE MARC-WERKS,PSTAT LIKE MARC-PSTAT,BWTTY LIKE MARC-BWTTY,EKGRP LIKE MARC-EKGRP,END OF GS_MARC.DATA:GT_MARC LIKE STANDARD TABLE OF GS_MARC.GT_MARC就是一个标准内表。Hint:结构变量的命名有规则,参见开发规范ABAP程序的数据定义第11页,共40页。第 12 页ABAP开发培训结构变量的定义:结构和内表的多种定义方式鉴于SAP有大量标准的数据类
9、型供参考,结构变量的命名有多种方式,例如:(MARC是系统标准表,MAAPV是标准结构,自建结构和自建表同例)结构:DATA GS_MARC LIKE MARC.内表:DATA GT_MARC LIKE TABLE OF MARC.结构:DATA GS_MAAPV LIKE MAAPV.内表:DATA GT_MAAPV LIKE TABLE OF MAAPV.结构:DATA GS_MARC2 LIKE LINE OF GT_MARC.内表:DATA GT_MAAPV2 LIKE TABLE OF GS_MAAPV.Hint:结构变量的命名有规则,参见开发规范ABAP程序的数据定义第12页,共4
10、0页。第 13 页ABAP开发培训结构变量的定义:内表和工作区。工作区是相对于内表而言的,在操作内表时,系统需要先把数据从内表取出来存放到对应的工作区,再进行相关的操作。通常情况下,定义一个内表的同时需要定义一个工作区。工作区通过结构定义。DATA GS_MARC LIKE MARC.DATA GT_MARC LIKE TABLE OF MARC.结构GS_MARC就可以作为内表GT_MARC的工作区。其他定义方式同此例。ABAP程序的数据定义第13页,共40页。第 14 页ABAP开发培训结构变量的定义:表头。DATA GT_MARC LIKE MARC OCCURS 0 WITH HEAD
11、ER LINE.此语句会声明一个带有同名表头的内表,表头可作为工作区。这种命名方式会节省一些代码量,但不推荐使用,容易混乱。还是推荐使用一个内表+一个工作区的方式。有些比较旧的程序用的是这种带表头的内表,在这些程序里,以GT_MARC为例:GT_MARC表示工作区,GT_MARC-MATNR表示字段,GT_MARC表示整个内表。ABAP程序的数据定义第14页,共40页。第 15 页ABAP开发培训赋值:DATA VAR1(3)TYPE C VALUE abc.DATA VAR2(3)TYPE C.MOVE VAR1 TO VAR2.VAR2=VAR1.VAR2=abc.以上3条语句意义返回结果
12、相同。赋值时注意数据格式,要求数据格式相同,或者两边存在转换规则,否则会报错。基本ABAP语句第15页,共40页。第 16 页ABAP开发培训运算:二元操作符包括:+:加法 -:减法 *:乘法 /:除法 *:乘方 DIV :整除忽略余数 MOD :取余数 需要注意,圆括号和操作符都是关键字,需要跟操作数之间至少用一个空格分开。(1+2)*3 应该写成(1+2)*3基本ABAP语句第16页,共40页。第 17 页ABAP开发培训条件:基本ABAP语句IF A B.ELSE.ENDIF.IF.ELSEIF.ELSEIF.ENDIF.CASE var.WHEN a.WHEN b.WHEN OTHER
13、S.ENDCASE.第17页,共40页。第 18 页ABAP开发培训循环:ABAP的循环分四种:DO .WHILE.ENDDO.ENDWHILE.LOOP SELECT.ENDLOOP.ENDSELECT.基本ABAP语句第18页,共40页。第 19 页ABAP开发培训循环:DOENDDO.DO和ENDDO之间的语句块会无限运行,直到遇到条件控制的跳出循环语句如EXIT等。在DO语句中还可以指定最多运行的次数,否则的话,将会出现无限循环无限循环。WHILEENDWHILE.在WHILE和ENDWHILE之间的语句块会一直执行,直到不再满足WHILE后面所指定的条件。WHILE循环用的不多。基本
14、ABAP语句第19页,共40页。第 20 页ABAP开发培训循环:LOOPENDLOOP.循环读取内表的数据到工作区,供程序处理。实际应用最多的循环语句。一般情况下ABAP推荐把数据从数据库(硬盘)读到内表(内存),几乎有程序就有内表,有内表就有LOOP循环。SELECTENDSELECT.循环读数据库。影响效率,不建议使用,建议用FOR ALL ENTRIES IN语句一次性把数据读入内表。基本ABAP语句第20页,共40页。第 21 页ABAP开发培训消息:MESSAGE 语句向程序的用户发送对话消息,使用MESSAGE 语句必须指定三位数的消息号和消息类。MESSAGE E001(ZFI
15、001)。事物码SE91维护消息类和消息。也可以在程序里写硬消息:MESSAGE 程序运行错误 TYPE E.但不推荐使用这种不规范的方式。基本ABAP语句第21页,共40页。第 22 页ABAP开发培训操作结构和内表:结构访问结构里的字段。GS_MARC-MATNR.结构里最常用的语句是MOVE-CORRESPONDING 语句。把一个结构的内容同时全部拷贝到另一个结构中。只有源结构和目标结构中有相同名称的组件才会拷贝,而目标结构中名称无法对应的组件保持不变。需要注意,如果两个结构中同名的组件有不同定义的话,拷贝时可能会出错。基本ABAP语句第22页,共40页。第 23 页ABAP开发培训操
16、作结构和内表:内表访问单条记录 一般来说,需要一个与内表行结构相同相同的工作区来处理单条记录。APPEND:往内表的最后追加一条记录,只能用于标准表。INSERT:向内表插入一条记录,在标准表里跟 APPEND 的效果一样,在排序表里就插入到键指定的位置,在哈希表里则根据哈希运算法则插入到指定位置。READ TABLE:把表的指定行拷贝到结构中。MODIFY:使用结构的内容重写表的指定行。DELETE:删除表的指定行。COLLECT:把结构中的内容累加到内表具有相同键的行上,这时,只有非键字段才执行累加,并且只有非键字段都是数值的时候才能执行这个语句。一般内表里多个字段需要同时汇总时会用到CO
17、LLECT语句,比如财务的一些报表。基本ABAP语句第23页,共40页。第 24 页ABAP开发培训操作结构和内表:内表访问多条记录(结果集)处理结果集合 LOOP ENDLOOP:LOOP 语句一条一条的读出内表的数据行,写入 INTO 字句指定的结构中,结构的内容可用于输出,或者修改后写回内表。DELETE:删除满足条件的所有行。INSERT:把一个内表中的多行拷贝到另一个内表中。APPEND:把一个内表中的多行追加到另一个标准表中。想修改内表的某一行只能先把那行读到工作区,修改工作区后再写回内表,而不能以数组的方法访问到内表的指定一行,这是跟其他语言很不一样的地方。基本ABAP语句第24
18、页,共40页。第 25 页ABAP开发培训操作结构和内表:内表使用索引读表(标准表和排序表)LOOP 中用 FROM-TO 子句可以读指定索引段的记录。READ 中用 INDEX 子句可以读指定索引的一条记录。使用条件读表 LOOP 中用 WHERE 子句可以读满足一定条件的记录。READ 中用 With KEY 子句可以读满足主键条件的记录。内表排序 标准表和排序表可以使用 SORT 语句对指定字段进行排序,如果没有指定升序或者降序就默认使用升序。基本ABAP语句第25页,共40页。第 26 页ABAP开发培训操作结构和内表:内表 REFRESH:清除整个内表的内容,释放部分内存,保留一些以
19、备后续操作。CLEAR:对于没有表头的内表,跟 REFRESH 一样,清除内表的内容。对于有表头的内表,则只初始化表头。FREE:清除整个内表的内容,释放所有内存。在程序里,当内表以后不再使用的时候可以使用 FREE,这样能尽量多释放一些不用的内存。基本ABAP语句第26页,共40页。第 27 页ABAP开发培训数据获取-SAP后台可以连接多种数据库,ORACLE,DB2,SQLSERVER,SYBASE-每种数据库都有自己特点的SQL语法,不可能在开发时根据后台数据库的种类选择SQL语法,所以SAP用的是无关SQL标准的开放SQL,执行时由SAP负责转化成各种数据库能运行的SQL。数据库操作
20、第27页,共40页。第 28 页ABAP开发培训数据获取使用开放SQL的 SELECT 语句来执行查询,它包含几个基本的组成部分。基本语法:SELECT FROM INTO WHERE SELECT 后面的块说明了需要读表的哪些字段。FROM 后面的块说明了需要读哪个数据源(数据源可以是表或者视图)。INTO 后面的块说明了读出的字段要放到哪个目标数据对象中(结构或内表)。WHERE 后面的块说明了读数据的基本条件,可选。SELECT MATNR WERKS PSTAT BWTTY EKGRP INTO TABLE GT_MARC FROM MARC WHERE WERKS=1000.数据库操
21、作第28页,共40页。第 29 页ABAP开发培训数据获取获取单条数据-用 SELECT SINGLE 语句。-如果目标结构的数据结构与查询字段的顺序不一致,或者使用*这样的通配符来指定查询字段,就需要CORRESPONDING FIELDS OF 子句,它会自动在源字段和目标字段之间找名称相同的项自动对应填入。这是常用的方式。SELECT SINGLE*INTO CORRESPODING FIELDS OF GS_MARC FROM MARC WHERE MATNR=000000001 AND WERKS=1000.SELECT SINGLE语句是在数据库表所有的KEY键都被用到的时候使用的
22、,执行效率很高,可以用*。数据库操作第29页,共40页。第 30 页ABAP开发培训一个常见的报表的组成-选择屏幕。输入数据的筛选条件。-数据定义。定义程序中用到的变量和常量,包括单个变量、结构、内表等。-数据获取。一般是通过一定的条件从数据库读取出来,或者上传的TXT/EXCEL文档。-数据处理。按照FUNCTION SPEC的要求,对获得的数据进行处理(增删改BAPI)。-展示。输出处理好的数据。报表程序介绍第30页,共40页。第 31 页ABAP开发培训选择屏幕-屏幕元素定义PARAMETERS:P_WERKS LIKE MARD-WERKS OBLIGATORY.“工厂SELECT-O
23、PTIONS:S_MATNR FOR MARD-MATNR,“物料 S_LGORT FOR MARD-LGORT,“库存地点 S_LFGJA FOR MARD-LFGJA,“年度 S_LFMON FOR MARD-LFMON.“月度报表程序介绍第31页,共40页。第 32 页ABAP开发培训选择屏幕-屏幕效果报表程序介绍第32页,共40页。第 33 页ABAP开发培训选择屏幕-数据定义TABLES:MARD,MAKT.DATA:BEGIN OF GS_MARD,MATNR LIKE MARD-MATNR,WERKS LIKE MARD-WERKS,LGORT LIKE MARD-LGORT,P
24、STAT LIKE MARD-PSTAT,LFGJA LIKE MARD-LFGJA,LFMON LIKE MARD-LFMON,LABST LIKE MARD-LABST,MAKTX LIKE MAKT-MAKTX,END OF GS_MARD.DATA GT_MARD LIKE TABLE OF GS_MARD.报表程序介绍第33页,共40页。第 34 页ABAP开发培训选择屏幕-屏幕输出相关数据定义TYPE-POOLS:SLIS.*ALV 变量定义.DATA:WS_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,I_FIELDCAT1
25、 TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.DATA:WS_FIELDGROUPS_TAB TYPE SLIS_T_SP_GROUP_ALV,WS_LAYOUT TYPE SLIS_LAYOUT_ALV,WS_SORTFIELDS_TAB TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE,WS_EVENTS TYPE SLIS_T_EVENT.DATA:V_REPID LIKE SY-REPID.报表程序介绍第34页,共40页。第 35 页ABAP开发培训数据获取和处理 SELECT AMATNR AWERKS ALG
26、ORT APSTAT ALFGJA ALFMON ALABST BMAKTX INTO TABLE GT_MARD FROM MARD AS A INNER JOIN MAKT AS B ON AMATNR=BMATNR WHERE BSPRAS=1 AND AWERKS=P_WERKS AND AMATNR IN S_MATNR AND ALGORT IN S_LGORT AND ALFGJA IN S_LFGJA AND ALFMON IN S_LFMON.DELETE GT_MARD WHERE MAKTX IS INITIAL.报表程序介绍第35页,共40页。第 36 页ABAP开发培
27、训输出-构建输出元素 WS_FIELDCAT-TABNAME =GT_MARD.WS_FIELDCAT-FIELDNAME=MATNR.“字段名 WS_FIELDCAT-SELTEXT_L=物料.”字段文本 WS_FIELDCAT-COL_POS =1.“输出位置 WS_FIELDCAT-OUTPUTLEN=18.”输出长度 WS_FIELDCAT-DATATYPE =CHAR.“字段类型 APPEND WS_FIELDCAT.CLEAR WS_FIELDCAT.相当于把内表的数据再附加一些展示时用的属性。报表程序介绍第36页,共40页。第 37 页ABAP开发培训输出-展示效果设置 WS_L
28、AYOUT-ZEBRA =X.WS_LAYOUT-COLWIDTH_OPTIMIZE=X.ALV的LAYOUT有几十个参数,这里只用了最常用的2个:斑马纹,自适应列宽。报表程序介绍第37页,共40页。第 38 页ABAP开发培训输出-FM CALL FUNCTION REUSE_ALV_GRID_DISPLAY EXPORTING I_CALLBACK_PROGRAM =V_REPID IS_LAYOUT =WS_LAYOUT IT_FIELDCAT =WS_FIELDCAT*IT_SPECIAL_GROUPS=WS_FIELDGROUPS_TAB*IT_SORT=WS_SORTFIELDS_
29、TAB*it_events=ws_events*IT_EVENTS=GT_EVENTCAT I_DEFAULT =X I_SAVE =A*i_grid_title=title*I_CALLBACK_PF_STATUS_SET=PF_STATUS_SET*I_CALLBACK_USER_COMMAND=MYCOMMAND*I_CALLBACK_USER_COMMAND=USER_COMMAND TABLES T_OUTTAB =GT_MARD EXCEPTIONS PROGRAM_ERROR =1 OTHERS =2.报表程序介绍第38页,共40页。第 39 页ABAP开发培训事件驱动INITIALIZATION初始化,设定屏幕元素默认值AT SELECTION-SCREEN检查屏幕输入START-OF-SELECTION从数据库取数操作END-OF-SELECTION此事件中进行输出清单操作报表程序介绍第39页,共40页。第 40 页演讲完毕,谢谢观看!第40页,共40页。