1、ABAP程序介绍 -李国庆Sap发展历史1972年, 五名IBM的员工离开了IBM, 在德国曼海母创建了SAP公司.SAP的第一个产品是一个自动化财务和交易程序.命名RF, 就是后来的R/1 1979年, SAP推出用于大型机的R/2. 1992年, SAP推出了著名的R/3.它建立在SAP BASIS平台的基础上,包括大家非常熟悉的SD, MM, FI, CO, PP.等模块 .1996年, 随着互联网的迅猛发展, SAP推出了支持Internet的新版R/3 3.1 .1999年, SAP 推出所谓的mySAP Business Suit. 这其实又是新版的R/3, 不过包含了CRM(Cu
2、stomerRelationshipManagement)和SCM(Supply Chain Management)产品.ERP的版本变为4.6C,到后来的4.7 .2004年,推出mySAP ERP2004,技术平台为SAP WAS 6.4.2005年,推出 mySAP ERP2005,技术平台为SAP WAS 7.0. SAP Release版本之间的差异和关系 版本4.6C以前是所谓传统的R3系统,建立在SAP Basis平台的基础上 版本4.70以后,改为R3 Enterprise,最大的变化是SAP WAS取代了传统的Basis平台,核心业务功能模块也作了划分; R3 Enterpr
3、ise之后改称为mySAP ERP2004-ECC5.0, 推出了NetWeaver2004-集成应用平台.2005第4季度开始mySAP ERP2005-ECC6.0的准备,最大的变化将是全面转向ESA体系(基于消息机制的企业应用体系),并引入了新的功能模块,比如PLM和SRM. 应用结构 SAP的三层架构体系 ABAP开发和运行环境的图例.可用的工具 SAP AGRABAP Workbench ToolsFunctionFunction BuilderBuilderScreen PainterScreen PainterABAP DictionaryABAP DictionaryABAP
4、EditorABAP EditorRepositoryBrowserMenu PainterMenu PainterForward navigation传输质量保证 运行过程 ABAPAdvanced Business Application Programming的缩写,是SAP R/2,R/3版本时期唯一的系统开发工具 . 目前的版本是ABAP/4。ABAP介绍 ABAP是SAP ERP主要的开发软件 可以满足企业的特定的需要,对通过系统配置不能实现的功能进行二次开发 可以进行各种类型的程序、界面、业务流程设计,如企业报表、企业单据、与第三方系统的接口等ABAP程序分类 可执行程序: 可分
5、配事务代码直接运行:报表、事务 模块化程序 为其它程序提供模块化支持 不能单独运行 包括:功能模块,include程序内容 报表 基本语法 内表操作 ABAP数据库操作 屏幕输出 Smartforms报表程序 以report开头 不修改数据库而从数据库表格中读取并分析数据 的程序。结果通常是以列表的形式输出到 屏幕或发送到打印机上 分为普通报表和交互式报表 普通报表程序输出结果格式固定,不能对其进行交互式操作; 交互式报表程通过特定的触发事件,比如双击,菜单,按钮和功能键. 可以对报表结果进行操作;报表程序结构 ABAP是事件驱动的语言,程序的运行由事件引导 由过程块组成程序架构 事件关键字之
6、间或事件关键字与form关键字之间的语句形成一个过程块 form和endform之间的语句形成一个子程序,子程序在过程块中被调用报表程序组成 全局申明 过程块 子程序类型、变量、屏幕一个事件发生时执行的模块优化程序的结构事件 属于某一特定事件关键字的语句形成一个过程块 原则上每个过程块块由各自的关键字为起始; 事件块的结束标志为下一个事件块的关键字; 事件块由ABAP运行时调用,其调用顺序固定,与程序编码顺序无关; 缺省的事件块 START-OF-SELECTION主要事件块关键字 INITIALIZATION AT SELECTION-SCREEN START-OF-SELECTION TO
7、P-OF-PAGE END-OF-PAGE AT LINE-SELECTION AT PF AT USER-COMMAND在选择屏幕显示前,对变量进行初始化赋值对选择屏幕的数据输入进行检查选择屏幕处理完后,数据的处理列表显示启动新页,页头的输出一页结束时,页尾的处理用户双击选中某行触发该事件当用户功能健时,触发该事件设置自定义的菜单事件块的简单处理过程事件块的简单处理过程:ABAP程序运行的时候,INITIALIZATION首先被调用;经过初始化的输入屏幕会显示在表示服务器;用户离开输入屏幕的时候,START-OF-SELCTION事件会被自动调用;结果数据会以列表的形式显示在第二个屏幕上;事
8、件块的语法 源代码中的事件块顺序不影响事件的执行顺序 INITIALIZATION 通常在此事件块中设定输入屏幕字段的初始值 例如:例如: INITIALIZATION . P_DATE = 20030201 . 效果:效果: 输入屏幕的日期字段初始显示值为输入屏幕的日期字段初始显示值为2003年年2月月1日日事件块编码规则(1) AT SELECTION-SCREEN 通常在此事件块中进行用户输入数据的合法性检查,发现错误则以消息的形式给出警示,直到用户输入正确的数值 例如:例如: AT SELECTION-SCREEN . IF P_DATE = SPACE . MESSAGE E001
9、. ENDIF. 效果:效果: 如果字段如果字段P_DATE为空,则程序会用消息为空,则程序会用消息001“日期字段日期字段不能为空!不能为空!”来提示用户必须输入一个日期。而且输入屏幕会等来提示用户必须输入一个日期。而且输入屏幕会等待用户输入,知道该字段数值合法待用户输入,知道该字段数值合法事件块编码规则(2) START-OF-SELCTION 通常在此事件中针对业务需求进行系统数据的查询例如:例如: start-of-selection . perform get_data_for_oil .效果:效果: 在输入屏幕用户按下执行按钮后,子程序在输入屏幕用户按下执行按钮后,子程序get_d
10、ata_for_oil被执行,被执行, 在其中获得业务相关的数据存放到内表或者其它变量,这些数据在在其中获得业务相关的数据存放到内表或者其它变量,这些数据在END-OF-SELECTION事件块中被输出事件块中被输出事件块编码规则(3) END-OF-SELCTION 通常在此事件中进行结果清单的输出例如:例如: end-of-selection . write : 23(1) sy-vline, 24(20) tab-gas_plan right-justified ,效果:效果: 数据以清单的形式输出数据以清单的形式输出事件块编码规则(4)事件块编码规则(5) AT LINE-SELECT
11、ION 用于用户交互,当用户双击页面时,启动该事件.例如:例如: at line-selection. GET CURSOR FIELD l_field LINE l_line.效果:效果: 获取用户点击的行号和变量名获取用户点击的行号和变量名事件块编码规则(5) SETPF-STATUS 设置用户自定义菜单 AT-USER-COMMAND 设置功能码的响应操作选择屏幕内容 报表 基本语法 内表操作 ABAP数据库操作 屏幕输出 Smartforms本小节包含内容 数据类型 定义选择屏幕 基本数据操作 WRITE 语句 控制语句数据类型 定义一个简单的数据类型 定义一个结构化的数据类型 定义一
12、个内表形式的数据类型ABAP数据类型1,TYPES TYPE |LIKE . 2,TYPES () TYPE | LIKE DECIMALS .3,TYPES .4,TYPES: BEGIN OF , . ., . END OF .5,TYPES TYPE|LIKE OF WITH .TYPES语句格式 通过系统标准类型定义 通过数据库表字段定义 自定义结构类型 TYPES语句实例TYPES: number TYPE i, length TYPE p DECIMALS 2, code(3) TYPE c.TYPES: company LIKE spfli-carrid.TYPES: BEGIN
13、 OF address, name TYPE surname, street(30) TYPE c, city TYPE spfli_type-cityfrom, END OF address. 定义一个简单类型的变量 定义一个结构化的数据对象 定义一个内表DATA语句定义数据对象1,DATA . TYPE |LIKE . VALUE .2,DATA () TYPE DECIMALS .3,DATA .4,DATA: BEGIN OF , ., . END OF .DATA语句格式DATA语句定义内表TYPES: BEGIN OF struct, number_1 TYPE i, number
14、_2 TYPE p DECIMALS 2, END OF struct.DATA: wa_struct TYPE struct, number LIKE wa_struct-number_2, date LIKE sy-datum, time TYPE t.DATA: BEGIN OF w_data, number_3 TYPE i, number_4 TYPE p DECIMALS 2, END OF w_data.DATA语句实例通过结构类型定义结构数据直接定义结构数据详细见SYST表SY-SUBRC: Return code for ABAP statements (zero if a
15、statement is executed successfully) SY-UNAME: logon name of the user SY-REPID: Current ABAP program SY-TCODE: current transaction SY-INDEX: Number of the current loop pass SY-DATUM 系统日期 SY-UZEIT 系统时间预定义的数据对象CONSTANTS: cns_pi TYPE P DECIMALS 10 VALUE 3.1415926536, cns_flag(1) type c value X.CONSTANTS
16、: BEGIN OF myaddress, name(20) TYPE c VALUE Fred Flintstone, street(20) TYPE c VALUE Cave Avenue, umber TYPE p VALUE 11, postcode(5) TYPE n VALUE 98765, city(20) TYPE c VALUE Bedrock, END OF myaddress.常量定义选择屏幕 什么是选择屏幕 选择屏幕是报表程序的一部分,通过设计选择屏幕以便交互输入字段值和选择标准。在报表程序启动之后,用户在该屏幕中输入值。 选择屏幕的实现方法 通过简单的语句创建字段、复
17、选框、单选按钮,并设计屏幕布局 通过PARAMETERS语句,使用户能够给变量分配值 通过SELECT-OPTIONS语句,使用户能够确定变量的区域PARAMETERS 语句SELECT-OPTIONS语句选择屏幕SELECTION-SCREEN BEGIN OF BLOCK WITH FRAME TITLE PARAMETERS: . SELECT-OPTIONS: .SELECTION-SCREEN END OF BLOCK .EXAMPLE:SELECTION-SCREEN BEGIN OF BLOCK RAD1 WITH FRAME TITLE TEXT-002. PARAMETERS
18、 : R1 RADIOBUTTON GROUP GR1, R2 RADIOBUTTON GROUP GR1, R3 RADIOBUTTON GROUP GR1.SELECTION-SCREEN END OF BLOCK RAD1.SELECTION-SCREEN语法PARAMETERS () TYPE |LIKE DECIMALS DEFAULT OBLIGATORY. PARAMETERS . AS CHECKBOX . PARAMETERS . RADIOBUTTON GROUP . PARAMETERS 语法EXAMPLE:PARAMETERS p_datum LIKE sy-datum
19、 .PARAMETERS p_checkbox TYPE c AS CHECKBOX.PARAMETERS p_radio TYPE C RADIOBUTTON GROUP radio1.SELECT-OPTIONS语法SELECT-OPTIONS FOR DEFAULT TO .SELECT-OPTIONS s_datum FOR sy-datum DEFAULT20070101 TO 20080101.PARAMETERS语法Write 语句 按照指定的格式把变量里边的数据输出到屏幕 根据选项的不同,WRITE语句可以输出到屏幕、输出到变量、以复选框的形式输出、以图标的格式输出 语法 Wr
20、ite f Write AT /() f . SKIP .产生 n 个空白行 SKIP TO LINE . 跳到指定行 Write f . ULINE AT /pos(len) NO-GAPLEFT-JUSTIFIED 资料靠左显示CENTERED 资料靠中间显示RIGHT-JUSTIFIED 资料靠右显示 UNDER 在资料项的X轴开始坐标显示NO-GAP 紧接着显示, 不留空格USING EDIT MASK 使用内嵌字符显示, 如 11:20:30USING NO EDIT MASK 不使用内嵌字符NO-ZERO 数字前面0 的部分不显示NO-SIGN 不显示正负号DECIMALS 显示
21、d 位小数字数EXPONENT F(浮点数) exponent 的值ROUND 四舍五入至小数位数下 r 位CURRENCY 币别显示DD/MM/YY 日期显示格式显示格式参数 DATA:XTYPEIVALUE112030. WRITEXUSINGEDITMASK_:_:_. WRITEXUSINGEDITMASK$_,_. WRITE语句的例子一WRITEFirstLine.WRITE/6SecondLine. DATA:NUMBERTYPEIVALUE1234,TEXT(10)VALUEABCDEFGHIJ.WRITE:(5)NUMBER,/(6)TEXT. ULINEAT10(10).W
22、RITE:/10sy-vline,11(8)TextCENTERED, 19sy-vline.ULINEAT/10(10).基本数据操作 数据赋值-使用MOVE MOVE TO MOVE + TO +. MOVE-CORRESPODING TO . 数据赋值使用WRITE,将f1的值格式化至C型变量 WRITE TO . WRITE () TO .基本数据操作DATA:F1(10)VALUEABCDEFGHIJ, F2(10), F3(10).MOVEF1TOF2.MOVEF1+3(5)TOF3.WRITE:/F2,F3. DATA: BEGIN OF ADDRESS, FIRSTNAME(1
23、0) VALUE LULU, LASTNAME(10) VALUE CHOU, TEL(12) VALUE 4660570, END OF ADDRESS. DATA:BEGIN OF NAME, FIRSTNAME(10), LASTNAME(10), E_MAIL(30), END OF NAME. MOVE-CORRESPONDING ADDRESS TO NAME.基本数据操作DATA:intTYPE I VALUE100, ch(10) TYPE C.WRITEintTOch. DATA:F1(10)VALUEABCDEFGHIJ, F2(10), F3(10).MOVEF1TOF2
24、.MOVEF1+3(5)TOF3.WRITE:/F2,/F3. 清除变量内容CLEAR 清除变量现在内容, 恢复成初值 Example: DATA N TYPE I VALUE 100. WRITE N. “ 100 CLEAR N. WRITE / N . “ 0 基本数据操作算术操作* 幂* 乘/ 除+ 加- 减DIV 整数除法MOD 余数除法基本数据操作 数值函数 ABS( N ): 传回数值 N 的绝对值 SIGN( N ): 1 if N 0 0 if N = 0 -1 if N 0 CEIL( N ): 传回大于数值N的最小整数 FLOOR( N ): 传回小于数值N的最大整数 T
25、RUNC( N ): 传回数值N的整数部分FRAC( N ): 传回数值 N 的小数部分COS( A ) ,SIN( A ),TAN( A ): 传回三角函数 cos A, sin A, tan A 的值, A 为弪度量 EXP( N ): 传回 eN 值 LOG( N ): 传回 log eN 值 LOG10( N ): 传回 log N值 SQRT( N ): 传回 N 的平方根值 基本数据操作日期与时间运算 1.日期数据的运算.日期数据可以直接运算, 如加法与减法 DATA: Mdata TYPE D. Mdate = SY-DATUM. “ 如传回 19971015 Mdate+6(2
26、) = 01 “ Mdate 变成 19971001 Mdate = Mdate - 1 “ Mdate 变成 19970931 2.时间数据的运算时间格式为 hhmmss, 如 212030 表 21:20:30 DATA: HOURS TYPE I, MINUTES TYPE I, T2 TYPE T VALUE 200000, T1 TYPE T VALUE 183000. HOURS = (T2 - T1) / 3600. “计算有几小时 MINUTES = (T2 T1) / 60. “计算几分钟 基本数据操作 字符串数据处理 1.字符串移位 语法:SHIFT BY PLACES :
27、 (1).空白, 字符串往左移一位 (2).LEFT, 字符串往左移 n 位 (3).RIGHT, 字符串往右移 n 位 (4).CIRCULAR: 字符串以环状方式移位举例:DATA STRING(10) VALUE ABCDEFGHIJSHIFT STRING. “得到 BCDEFGHISHIFT STRING BY 2 PLACES RIGHT. “得到 BDCDEFGHI基本数据操作基本数据操作 字符串移位 2.取代字符串内容 语法: REPLACE WITH INTO 举例: DATA: STRING(10) VALUE ABCDEFGHI, STR1(3) VALUE DEF, S
28、TR2(3) VALUE 123. REPLACE STR1 WITH STR2 INTO STRING. WRITE / STRING. “得到 ABC123GHI 字符串数据处理 3.大小写的转换 语法:TRANSLATE TO UPPER CASE. “转成大写TRANSLATE TO LOWER CASE. “转成小写4.字符串长度 语法 STRLEN() Example: INT = STRLEN(XYZABC). “得到 65.拆分字符串 语法 SPLIT dobj AT sep INTO result1 result2 . | TABLE result_tab 基本数据操作 比较
29、符号 = 或 EQ : 等于 或 或 NE : 不等于 或 LT : 小于 或 GT : 大于 = 或 GE : 大于等于 AND : 与 OR : 或NOT : 非控制语句(1)IF 语语句 IF ELSEIF ELSEIF Stetement ENDIF.控制语句(2) 条件语句 CASE 语语句 CASE WHEN OR OR. WHEN OR OR. .ENDCASE. 循环语句 1.计次循环 DO n TIMES VARYING FROM TO . . ENDDO. DO 2 TIMES. WRITE / X. ENDDO. 2.条件循环 WHILE . ENDWHILE. I =
30、1.S=0. WHILE I = 10. S = S+I. I=I+1. ENDWHILE.控制语句(3)控制循环语句 CONTINUE 跳到下一次循环 DO 3 TIMES. IF SY-INDEX = 2. CONTINUE WRITE SY-INDEX. ENDDO CHECK 条件不满足则跳到下一次循环 DO 5 TIMES. CHECK SY-INDEX BETWEEN 2 AND 4. WRITE SY-INDEX. ENDDO EXIT. 结束循环 DO 10 TIMES. IF SY-INDEX = 4. EXIT. ENDIF WRITE SY-INDEX. ENDDO. 控
31、制语句(4)内容 报表 基本语法 内表操作 ABAP数据库操作 屏幕输出 Smartforms什么是内表 在程序运行事件存在的表格,行数动态 可以使用内 表在数据库表格的子集上执行表格 计算 根 据程序需要重新组织数据库表格的内容定义内表 定义内表类型 TYPES TYPE|LIKE OF WITH INITIAL SIZE . 定义内表对象 参考已经声明的内表类型、 DATA TYPE | LIKE WITH HEADERLINE. 声明一个新的内表 DATA TYPE|LIKE OF WITH INITIAL SIZE WITH HEADER LINE.操作内表内表操作INSERT LIN
32、ES OF itab1 FROM n1 TO n2 INTO TABLE itab2 INDEX idxAPPEND LINES OF itab1 FROM n1 TO n2 TO itab2READ TABLE itab INTO wa INDEX idx.READ TABLE itab WITH KEY k1=f1 ki=fi INTO waMODIFY itab FROM wa INDEX idx TRANSPORTING f1 f2.MODIFY itab FROM WA TRANSPORTING f1 f2 WHERE cond.DELETE itab INDEX idxDELETE
33、 TABLE itab WITH TABLE KEY k1 = f1 ki = fiDELETE itab FROM n1 TO n2 WHERE condLOOP AT itab INTO wa FROM n1 TO n2 WHERE condENDLOOP.内表操作 对整个内表进行操作 MOVE TO .DATA: BEGIN OF LINE, COL1, COL2, END OF LINE.DATA: ETAB LIKE TABLE OF LINE WITH HEADER LINE, FTAB LIKE TABLE OF LINE.LINE-COL1 = A. LINE-COL2 = B
34、.APPEND LINE TO ETAB.MOVE ETAB TO FTAB.LOOP AT FTAB INTO LINE. WRITE: / LINE-COL1, LINE-COL2.ENDLOOP. The output is: A B操作内表对内表进行初始化CLEAR .CLEAR .REFRESH .FREE .比较内表 . .: EQ, =, NE, , =, LE, , LT, 排序内表 SORT ASCENDING|DESCENDINGAS TEXT STABLE.内容 报表 基本语法 内表操作 数据库操作 屏幕输出 SmartformsOPEN SQL 目的:避免不同的数据库表
35、直接的不兼容性,使 ABAP/4 程序能在应 用中独立于 数据库系统 。1. SELECT 语句 SELECT INTO FROM WHEREGROUP BY HAVING ORDER BY .数据库操作WHERE 语句BETWEEN AND LIKE _ 表示一个字符 % 表示一个字符串IN (.) 数据库操作(4)- OPEN SQL多表结合查询 LEFT OUTER JOIN SELECT . FROM tableLEFT OUTER JOIN dbtab AS aliasA ON INNOR JOIN SELECT FROM table INNER JOIN jointable1 AS
36、 aliasA ON SELECT pcarrid pconnid ffldate INTO CORRESPONDING FIELDS OF TABLE itabFROM (spfli AS p INNER JOIN sflight AS f ON pcarrid = fcarrid AND pconnid = fconnid )WHERE pcityfrom = FRANKFURT AND pcityto = NEW YORK .数据库操作(6)- OPEN SQL数据库操作INSERT 语句INSERT FROM .INSERT FROM TABLE ACCEPTING DUPLICATE
37、 KEYUPDATE UPDATE FROM UPDATE FROM TABLE UPDATE SET = WHERE MODIFYMODIFY FROM MODIFY FROM TABLE DELETEDELETE FROM DELETE FROM TABLE DELETE FROM WHERE 内容 报表 基本语法 内表操作 ABAP数据库操作 ABAP LIST VIEWER Smartforms什么是ALV ABAP LIST VIEWER(ALV): ABAP表单浏览器,提供了一组接口,用于实现统一的表单格式。ALV实现方式 变量定义 TYPE-POOLS:SLIS -申明类型池 I
38、_GRID_SETTINGS-设置表单的格局 IT_FIELDCAT-设置显示的各个字段的属性 I_CALLBACK_PF_STATUS_SET-指向设置自定义alv菜单的子程序 I_CALLBACK_USER_COMMAND指向alv功能健响应的子程序 T_OUTTAB指向显示的内表 参数赋值 调用函数 REUSE_ALV_GRID_DISPLAYALV实现方式参数定义设置格局字段属性调用函数内容 报表 基本语法 内表操作 ABAP数据库操作 ABAP LIST VIEWER SmartformsSMARTFORMS MARTFORM是在SAPScript的基础之上产生的一种新的FORM制作
39、方式,在做SMARTFORM的过程中基本上不需要多少编程知识,它有一个图形界面来帮助我们完成工作。 多应用于报表打印 创建SMARTFORMS智能表格 输入事务代码:SMARTFORMS几个概念FORM:一个FORM往往是由页面(PAGES)、输出区域(OUTPUT AREAS即WINDOWS)、地址栏(ADRESS)、图形(GRAPHICS,比如公司LOGO)、数据(DATA)、以及文本内容(TEXT)组成。主窗体和子窗体:(MAIN WINDOWSAND SUBWINDOWS)这是页面上两个不同的输出区域,用来输出数据,文本等内容。一个FORM中只能定义一个窗体作为主窗体;不同PAGE上的主窗体必须宽度相同,但是高度可以不同.SE11/SE12/SE13/SE14/SE15 数数据字典维护维护相关关SE16/SE17 查查看表数数据SE30 ABAP运运行分析SE32 文本维护维护SE37 维护维护函数数SE38 ABAP编辑编辑器SE39 程序比较较SE80 ABAP对对象编辑编辑器SE91 维护维护消息类类和消息SE93 给给程序维护维护TCODESM36 定义义后台jobSM37 查查看后台job