ABAP 4语法集锦(中文版).doc_第1页
ABAP 4语法集锦(中文版).doc_第2页
ABAP 4语法集锦(中文版).doc_第3页
ABAP 4语法集锦(中文版).doc_第4页
ABAP 4语法集锦(中文版).doc_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ABAP/4 Training. ABAP/4 DATA ELEMENT一. Data Type (数据类型)C: 字符(串), 长度为1, 最大有65535 BYTES, 初始值为: space,例: M;D: 日期, 格式为YYYYMMDD, 最大是9999/12/31 ,例:1999/12/03.F: 浮点数, 长度为8, 例如: 4.285714285714286E-01I: 整数 范围 :-231 231-1N: 数值组成的字符串: 011, 302.P: packed 数,用于小数点数值,例如: 12.00542;T: 时间, 格式为HHMMSS,例如: 14:03:00, 21:30:39.X: 16进制数, 例如 1A03.二. 变量宣告变量宣告包含name, length, type, structure等,语法如下: DATA 其中: :变量名称,最长30个字符,不可含有 + , . , : ( ) 等字符; :变量类型及长度; :初值 :小数位数Example 1: DATA: COUNTER TYPE P DECIMALS 3, NAME (10) TYPE C VALUE Delta, S_DATE TYPE D VALUE 19991203.Example 2: DATA: BEGIN OF PERSON, NAME(10) TYPE C, AGE TYPE I, WEIGHT TYPE P DECIMALS 2, END OF PERSON.另外,有关DATA宣告的指令还有: CONSTANTS(宣告常数)、STATICS(临时变量宣告).三. 系统专用变量说明系统内部专门创建了SYST这个STRUCTURE,里面的字段存放系统变量,常用的系统变量有: 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 NUMBER SY-VLINE: 画竖线 SY-ULINE: 画横线附注:1. SAP的全称是: System Application Products in Data Processing;2. ABAP/4的全称是:Advanced Business Application Programming;3. ABAP/4的路径为:Tools ABAP/4 WorkBenchABPA/4 Editor ;4. ABAP/4每条语句以句号结束;5. ABAP/4中象= , ,+,-,*,/等符号左右都需要有至少一个空格;6. 整行注释用*号, 注释本行后面部分用”号;OUTPUTTING DATA TO SCREEN一. WRITE 语句ABAP/4用来在屏幕上输出数据的指令是WRITE指令,例如: WRITE: USER NAME IS:, SY-UNAME.二. 指定屏幕输出位置指定输出位置的语句格式为: WRITE: AT / () 资料项 其中: / : 在下一行输出: 指定输出的行号;():指定输出位数(长度): 指定显示格式参数,参数有: LEFT-JUSTIFIED 资料靠左对齐 CENTERED 数据靠中间对齐 RIGHT-JUSTIFIED 资料靠右对齐 UNDER 正对在数据项的下面显示 NO-GAP 紧接着显示,不留空格 USING EDIT MASK : 使用内嵌子元显示, 如 12:03:20 USING NO EDIT MASK: 不使用内嵌子元 NO-ZERO: 数字前面 0 的部分不显示 NO-SIGN: 不显示正负号 DECIMALS : 显示 位小数 EXPOENT : F(浮点数)指数的值 ROUND : 四舍五入至小数点后位 CURRENCY : 币别显示 DD/MM/YY : 日期显示格式 MM/DD/YY: YY/MM/DD: 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.输出结果为: 11:20:30 $112,030 ABCDEF四. 显示图标:语法: WRITE: AS SYMBOL. WRITE: AS ICON.例如: INCLUDE . INCLUDE .WRITE: / Phone symbol:, SYM_PHONE AS SYMBOL.WRITE: / Alarm Icon:, ICON_VOICE_OUTPUT AS ICON.要查看系统所提供有那些符号及图标,可选择EDIT下的Insert Statement,选择Write,接下来选择要查看的群组,如SYMBOL 或ICON, 接下来按Display即可. INTERNAL TABLE一. Internal Table 的宣告ABAP/4中的Internal Table是一种Data Structure,类似于其它语言中的STRUTURE,它可以由几个不同类型的字段(field)组成,用来表示具有不同属性的某一事物,单独一笔资料表示某个事物,多笔数据表示具有相同属性的多个事物.例如:为了存取或记录某班的同学数据,我们创建如下的internal table:DATA: BEGIN OF STUDENT OCCURS 20, STD_ID TYPE N, NAME(10) TYPE C, AGE TYPE I, BIRTH TYPE D, SCORE TYPE P DECIMALS 2, END OF STUDENT.此时我们已经创建了名叫STUDENT的internal table,并且为它预先申请了能够存放20笔数据的Buffer(当然,如果存取数据不止20笔,程序执行时,会自动申请系统Buffer)Internal table 的定义有以下几种格式:格式一. DATA: BEGIN OF OCCURS , TYPE , TYPE , TYPE , END OF .格式二. TYPES: BEGIN OF , TYPE , TYPE , TYPE , END OF . TYPES TYPE OCCURS .格式三. DATA: BEGIN OF . INCLUDE STRUCTURE . DATA: END OF . DATA: LIKE OCCURS .二. APPEND LINE格式: APPEND TO .举例一. (使用work area)DATA: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I, END OF LINE.DATA ITAB LIKE LINE OCCURS 10.DO 2 TIMES. LINE-COL1 = SY-INDEX. LINE-COL2 = SY-INDEX * 2. APPEND LINE TO ITAB.ENDDO.LOOP AT ITAB INTO LINE. WRITE: / LINE-COL1, LINE-COL2.ENDLOOP.执行结果为:1 12 4举例二. (不使用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. ENDDO. LOOP AT ITAB. WRITE: / ITAB-COL1, ITAB-COL2. ENDLOOP. 执行结果与举例一相同.举例三. (加入另一个Internal table的元素) 格式: APPEND LINES OF FROM TO TO . 将的元素加入至中,可选取自至的范围. APPEND LINES OF ITAB TO JTAB.三. COLLECT LINECOLLECT 指令也是将元素加入Internal table中,与APPEND 的区别是: COLLECT指令在非数值字段相同的情况下,将数值字段汇总.格式: COLLECT INTO 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笔数据, 分别为: ITAB-COL1 ITAB-COL2 ABC 90 XYZ 20四. INSERT LINE将元素插入在指定的internal table位置之前.格式: INSERT INTO INITIAL LINE INTO INDEX 或者: INSERT LINES OF FROM TO INTO INDEX 其中: 即work area,工作区中的元素.INITIAL LINE INTO :插入一笔初始化的记录.: internal tableINDEX : internal table 的记录号.(新加入的元素放在此记录前面)五. 读取internal table格式一: LOOP AT INTO FROM TO WHERE ENDLOOP.格式二:READ TABLE INTO INDEX / WITH KEY 举例. (格式二)DATA: BEGIN OF ITAB 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-COL2 = 6.六. 修改internal table 中的值格式: MODIFY FROM INDEX TRANSPORTING WHERE 举例一. READ TABLE ITAB INDEX 3. LINE-COL1 = 29. MODIFY ITAB FROM LINE TRANSPORTING COL1. 将第三笔记录的COL1字段的值修改为29.举例二. T_SALARY salary = 50. MODIFY T_SALARY TRANSPORTING salary WHERE birthday = 1999/12/06.七. DELETE internal table中的字段格式: DELETE INDEX .或: DELETE FROM TO WHERE 八. Internal table 排序 SORT BY 其中: 有DESCENDING 和ASCENDING, Default 为ASCENDING. : 为指定排序的字段.九. 加总SUM.总和计算存放与work area中,但只能在LOOP 中使用.例: LOOP AT ITAB INTO LINE. SUM. ENDLOOP. WRITE: / LINE-COL1, LINE-COL2.十. 初始化internal tableREFRESH . 清空中的值.CLEAR . 清空的Header Line.FREE . 释放记忆体空间.屏幕输入命令 在ABAP/4中要从屏幕输入变量, 使用的命令是 PARAMETERS 及SELECTION-OPTIONS: 1. PARAMETER: 输入一个变量 2. SELECTION-OPTIONS: 使用条件筛选画面来输入数据 一. PARAMETERS 指令基本的输入命令, 类似如BASIC的INPUT命令, 但无法使用F格式(浮点数) 语法: PARAMETERS DEFAULT LOWER CASE OBLIGATORY AS CHECKBOX RADIOBUTTON GROUP Example: PARAMETERS: NAME(8), AGE TYPE I, BIRTH TYPE D. 执行结果: 在日期的输入格式上为 MM/DD/YY , MM/DD/YYYY, MMDDYY或MMDDYYYY , 如输入 020165表 1965年02月01日, 与02/01/65的输入是一样的, 日期输入范围为公元1950年至2049年1. DEFAULT 设定输入的默认值Example: PARAMETERS: COMPANY(20) DEFAULT DELTA, BIRTH TYPE D DEFAULT 19650201.2. LOWER CASE ABAP/4预设是将字符串输入值自动转换为大写, 加上此参数会将输入的数据转成小写, 3. OBLIGATORY强制要求输入, 屏幕上会出现一个 ? , 使用者必须要输入才可.4. AS CHECKBOX 输入 CHECKBOX的格式 Example: PARAMETERS: TAX AS CHECKBOX DEFAULT X, NTD AS CHECKBOX. 执行结果: 5. RADIOBUTTON GROUP 输入 RADIO BUTTON GROUP 的方式 Example: PARAMETERS: BOY RADIOBUTTON GROUP SEX DEFAULT X, GIRL RADIOBUTTON GROUP SEX. 执行结果:二. SELECT-OPTIONS SELECTION-OPTIONS所输入的值实际上是放在internal table中的,该Internal table 有四个字段,分别是:SIGN,OPTION,LOW,HIGH. 条件筛选检查条件输入画面指令, 输入条件后可配合SELECT指令自TABLE读取符合条件的数据, 直接执行或放入 Internal Table中, 条件有四个参数:1. SIGN: I: 表筛选条件符合的资料 E: 表筛选条件不符合的资料2. OPTION: 比较的条件符号 EQ(等于),NE(不等于),GT(大于),LE(小于),CP(包含),NP(不包含)3. LOW: 最小值4. HIGH: 最大值 语法: SELECT-OPTIONS FOR Example: TABLES SPFLI. SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID.将条件的输入值存放入 AIRLINE, 筛选选择为SPFLI中的CONNID字段执行结果:可直接输入起始范围或按下选择画面, 输入完后按下左上角的执行键 三. 条件输入选择画面1. 自Table中选取按下输入项的右边往下箭头, 叫出Table中数据项, 选取开始和结束的范围2. Selection Options按下”Selection options”按键, , 输入Option及 Sign参数内容, 屏幕如下: 3.Multi-Options输入 按下最右边的Multi-Options输入键, 输入条件选取的范围, 画面如下: 条件输入完后按下”Copy”按键四. 改变条件输入格式1. DEFAULT TO 设定开始结束范围输入默认值 Example: SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID DEFAULT 2042 TO 4555.2. NO-EXTENSION设定不要Multi-Option输入画面3. NO INTERVALS设定不要区间范围输入画面4. LOWER CASE输入转换成大写5. OBLIGATORY强制要求输入 五. 配合 SELECT 命令 条件输入完后要将符合条件的数据筛选出来, 可配合使用 SELECT 指令 1.使用WHERE Example: SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID. SELECT * FROM SPFLI WHERE CONNID IN AIRLINE. WRITE: / CONNID,FROMCITY,TOCITY. ENDSELECT.2.使用CHECK参数Example: SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID. SELECT * FROM SPFLI. CHECK AIRLINE. WRITE: / CONNID,FROMCITY,TOCITY. ENDSELECT. 3.使用 IF IN 叙述 Example: SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID. SELECT * FROM SPFLI. IF SPFLI-CONNID IN AIRLINE. WRITE: / CONNID,FROMCITY,TOCITY. ENDIF ENDSELECT. 六. SELECTION-SCREEN 1.产生空白列语法: SELECTION-SCREEN SKIP Example: SELECTION-SCREEN SKIP 2. 产生两列空白列 2.产生底线语法: SELECTION-SCREEN ULINE / (length) Example: SELECTION-SCREEN ULINE /10(30). 自第10格开始产生长度30的底线 3.印出备注说明 语法: SELECTION-SCREEN COMMENT / (length) Example: REMARK = Pls enter your name. SELECTION-SCREEN COMMENT /10(30) REMARK. 4. 同一列中输入数个数据项语法: SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN END OF LINE. Example: SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 20. PARAMETERS NAME(10). SELECTION-SCREEN POSITION 40. PARAMETERS BIRTH TYPE D. SELECTION-SCREEN END OF LINE. 在20格输入NAME内容, 40格输入 BIRTH的内容 5. 绘出BLOCK PANEL语法:SELECTION-SCREEN BEGIN OF BLOCK WITH FRAME TITLE . .SELECTION-SCREEN END OF BLOCK .Example: SELECTION-SCREEN BEGIN OF BLOCK RADIO WITH FRAME . PARAMETER R1 RADIOBUTTON GROUP GR1. PARAMETER R2 RADIOBUTTON GROUP GR1. PARAMETER R3 RADIOBUTTON GROUP GR1. SELECTION-SCREEN END OF BLOCK RADIO. SQL语法 我们在编写ABAP4程序的时候,经常需要从TABLE中根据某些条件读取数据,.读取数据最常用的方法就是通过SQL语法实现的.ABAP/4中可以利用SQL语法创建或读取TABLE,SQL语法分为DDL(DATA DEFINE LANGUAGE)语言和DML(DATA MULTIPULATION LANGUAGE)语言,DDL语言是指数据定义语言,例如CREATE等, DML语言是数据操作语言,例如SELECT, INSERT等语句. SQL语句有OPEN SQL语句和NATIVE SQL语句. OPEN SQL语句不是标准SQL语句,是ABAP/4语言,利用OPEN SQL语句能在Databases 和 Command 之间产生一个BUFFER,所以它有一个语言转换的过程.而NATIVE SQL语句则是标准的SQL语句, 它直接针对Databases操作.一. OPEN SQL OPEN SQL 语句包含有: SELECT,INSERT,UPDATE,MODIFY,DELETE,OPEN CURSOR, FETCH,CLOSE CURSOR,COMMIT WORK,ROLLBACK WORK等. 1. SELECT语句语法格式:SELECT INTO FROM WHERE GROUP BY ORDER BY 其中: 指定要抓取的字段 将读取的记录存放在work area中 指定从那个TABLE中读取数据 抓取资料的条件 指定按那些字段分组 排序的字段及方式相关的系统变量: SY-SUBRC = 0 表示读取数据成功 0 表示未找到符合条件的记录 SY-DBLNT: 被处理过的记录的笔数.相关的命令: EXIT. 退出循环. CHECK .如果逻辑表达式成立,则继续执行,否则,开始下一次循环. .利用循环方式读取所有记录SELECT .ENDSELECT.是循环方式读取记录的. 例如:TABLES MARD.SELECT DISTINCT * FROM MARD WHERE MATNR = 3520421700. .ENDSELECT.(从MARD中抓取所有料号=3520421700的数据)读取一笔数据TABLES MARD.SELECT SINGLE * FROM MARD WHERE MATNR = 3520421700.(从MARA中抓取一笔料号=3520421700的资料) 将读取的记录放在work area中,并且加入Internal table 中.格式有: . INTO . INTO CORRESPONDING FIELDS OF . INTO (f1, ., fn) 变量组. . INTO TABLE . INTO CORRESPONDING FIELDS OF TABLE . APPENDING TABLE . APPENDING CORRESPONDING FIELDS OF TABLE 举例一:TABLES MARD. DATA: BEGIN OF ITAB OCCURS 10, MATNR LIKE MARD-MATNR, WERKS LIKE MARD-WERKS, LGORT LIKE MARD-LGORT, LABST LIKE MARD-LABST, END OF ITAB.SELECT MATNR WERKS LGORT LABST INTO CORRESPONDING FIELDS OF ITAB FROM MARD WHERE MATNR = 3520421700. APPEND ITAB. CLEAR ITAB.ENDSELECT.(将读取的结果放在Internal table ITAB中)举例二.TABLES MARD.SELECT MATNR MTART MAKTX INTO (t_matnr, t_mtart, maktx) FROM MARD WHERE MATNR = 3520421700. .ENDSELECT.(从MARD中抓取料号=3520421700的料号、类型和描述,放在变量t_matnr, t_mtart, maktx中)。按指定的字段排序TABLES SBOOK.SELECT * FROM SBOOK WHERE CARRID = LH AND CONNID = 0400 AND FLDATE = 19950228 ORDER BY BOOKID ASCENDING/DESCENDING. WRITE: / SBOOK-BOOKID, SBOOK-CUSTOMID, SBOOK-CUSTTYPE, SBOOK-SMOKER, SBOOK-LUGGWEIGHT, SBOOK-WUNIT, SBOOK-INVOICE.ENDSELECT.(利用参数ORDER BY所指定的字段排序) 抓取数据的条件叙述(1) BETWEEN AND 例如: WHERE YEAR BETWEEN 1995 AND 2000.(2) LIKE 例如: WHERE NAME LIKE MIKE%.(%是通配符号)(3) IN ()是里面的任意一个值即可.例如: WHERE PLANT IN (CHUNGLI, TAOYUAN,LIUTU).(表示PLANT 只要是CHUNGLI或TAOYUAN或LIUTU都可以).2. INSERT 语句 从work area 加入到Internal Table中格式: INSERT INTO VALUES 例如: DATA: BEGIN OF WA, CODE(6) TYPE C, NAME(30) TYPE C, END OF WA.DATA: VEN LIKE WA OCCURS 10.WA-CODE = 530120.WA-NAME = XINGDA ELECTRONICS CO.,LTD.INSERT INTO VEN VALUES WA .如果work area的名称就是internal table的名称,可以直接写成: INSERT 例如:DATA: BEGIN OF WA OCCURS 10, CODE(6) TYPE C, NAME(30) TYPE C, END OF WA.WA-CODE = 530120.WA-NAME = XINGDA ELECTRONICS CO., LTD.INSERT WA. 从另外一个Internal table中INSERT 数据格式:INSERT FROM TABLE ACCEPTING DUPLICATE KEY将中非NULL的数据加入中,加上ACCEPTING DUPLICATE KEY能限制相同PRIMARY KEY不重复加入.3. MODIFY 语法MODIFY FROM .4. DELETE 语法 DELETE FROM . 或: DELETE WHERE 5. DATABASE CURSOR Database Cursor是一个数据库暂存区, 将经SELECT指令读取的记录存放至此暂存区, 再由此暂存区放至Work Area中, 可减少数据库读取的次数.1.开启 Database Cursor 语法: OPEN CURSOR FOR SELECT WHERE Example: TABLES SPFLI. DATA: WA LIKE SPFLI, C1 TYPE CURSOR. OPEN CURSOR C1 FOR SELECT * FROM SPFLI WHERE AREA =TAIWAN. 2.读取 Database Cursor的数据存入 Work Area语法: FETCH NEXT CURSOR INTO Example: FETCH NEXT CURSOR C1 INTO WA. 读取下一笔Cursor位置的数据存入WA, 如果已无数据可读, SY-SUBRC 0. 关闭 Database Cursor语法: CLOSE CURSOR Example: CLOSE CURSOR C1.6. COMMIT WORK & ROLLBACK WORK要确定数据成功写入数据库,可使用COMMIT WORK指令,如: COMMIT WORK.相反的, 如果反悔要复原, 可使用 ROLLBACK WORK, 可复原在上个COMMIT WORK指令之后的数据, 如: ROLLBACK WORK.使用NATIVE SQL指令语法格式:EXEC SQL PERFORMING . ENDEXEC.举例一.EXEC SQL.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论