abap基础语法 goto 语法怎么用

(window.slotbydup=window.slotbydup || []).push({
id: '2014386',
container: s,
size: '234,60',
display: 'inlay-fix'
(19人评价)
&&|&&4次下载&&|&&总60页&&|
您的计算机尚未安装Flash,点击安装&
阅读已结束,如需下载到电脑,请使用积分()
下载:20积分
相关分类推荐
0人评价3页
0人评价4页
0人评价5页
0人评价16页
0人评价28页
所需积分:(友情提示:大部分文档均可免费预览!下载之前请务必先预览阅读,以免误下载造成积分浪费!)
(多个标签用逗号分隔)
文不对题,内容与标题介绍不符
广告内容或内容过于简单
文档乱码或无法正常显示
文档内容侵权
已存在相同文档
不属于经济管理类文档
源文档损坏或加密
若此文档涉嫌侵害了您的权利,请参照说明。
我要评价:
下载:20积分当前位置: >>
一个很好的ABAP教程
1. ABAP/4 IntroductionIntroductionABAP/4(Advanced Business Application Programming)是 SAP/R3 目前唯一的系统发展工具, 属 4GL, 语法比较近似 Visual Basic 或 JAVA, 和传统 third-generation 语言, 如 C,PASCAL 有很大
不同, 在程序模块(Program Structure Module)可分以 下三个部分: 1.Sequential coding within processing block 与一般语言语法近似, 如 IF,WHILE 等, 但并没有 GOTO 叙述 2.Reports 呼叫一个独立的事件(Depending Event), 读取 database 产生数据列表 3.Dialog 屏幕参数输入的对话框, 专门处理 database 读取或异动的 tranaction processBasic Languange Overview1.data element 宣告方式, 如数值, 字符数据变量宣告 2.操作数(operate)使用, 如 + - * / 3.Control element 使用, 如 Boolean 值 4.特殊数据格式, 如日期与时间 5.字符串字料处理 function, 如部分字符串的截取 6.子程序或自定函数的呼叫 7.SQL 语法使用 8.数据结构的使用, 如 process internal table 的宣告与使用Reports Overview1.Reports Task, 如报表屏幕预览或打印机打印的选择 2.Reports 模块是一个 Stand-along 程序, 3.database 读取方式, 如可定义 logical database(与磁盘的 physical storage 对映) 4.报表数据的计算与产生 5.报表的输出Dialog Overview1.专处理 database 的读取与异动, 如使用 SQL 指令 2.Dialog 不是一个 Stand-Along Progarm, 使用 transaction code 来产生屏幕对话框 3.由 flow logic 控制, flow logic 分成 PBO(Process Before Output)与 PAI(Process After Input) 1 2.Begin To Programming2.1 ABAP/4 EditorCreating ABAP/4 Program使用 ABAP Workbench 撰写程序(Choose Tools-&ABAP/4 Workbench, Transaction Code: S001), 萤幕如下:可分成: 1.ABAP/4 Editor :针对简单的报表或程序, 仅使用几个组件或不使用 2.Obiect Browser :针对复杂的报表或程序, 如 Dialog Transaction Module 撰写使用 ABAP/4 Editor 撰写程序1.ABAP/4 Editor 画面如下(Transaction Code:SE38):2 2.输入程序名称, 如果是新程序, 按下”Create”, 如果修改已存在程序, 则按下”Change”或 F6 键 在命名规则上, Reports 程序为 Yaxxxxxx 或 Zaxxxxxx, a 表 application module 简称, 如 s 表 SD Dialog 程序为 SAPMYxxx 或 SAPMZxxx 3.输入程序 Attribute(1).Title:程序描述或功能说明 (2).Type:Execute mode: 1: Stand-along Program 如 Reports I: Include Program M: Module Pool F: Function Group S: Subroutine Pool (3).Status:Program development status: P: SAP standard production program K: Customer production program S: System program T: Test program (4).Application: 程序所属的 application module, 如 F 表 Financeial acounting (5).Development class: 用于同一系统中各个 program, 如果不属任一 class, 可使用$TMP3 4.撰写 Source CodeProgram 之后接的是程序名称, Write 是显示的意思, 会将所接的字符串在屏幕上显示, 注意每 一 行最后要有一个 . (点), 表示叙述的结束, 储存后回 ABAP/4 Editor 画面 5. 执行程序 按”Execute”或 F8 键, 屏幕可见执行所得的结果重要的编辑键key F8 F5 F11 CTRL+F11 Function 执行程序 复制游标所在列的内容 储存档案 删除游标所在列4 2.2 ABAP/4 Data ElementData TypeABAP/4 的数据型态可分成: Type C D F I N P T X Length 1 8 8 4 1 8 6 1 Range 1-65535Byte 8Byte 8Byte -2^31 至 2^31-1 1-65535Byte 1-16Byte 6Byte 1-65535Byte 0 ‘000000’ X’00’ Initial Value Description Space ‘’ 0 0 ‘00…0’ 字符串数据, 如’Program’ 日期数据, 格式为 YYYYMMDD 浮点数 整数 数值所组成的字符串 Packed 数, 用在小数点数 时间数据, 格式为 HHMMSS 16 进位数变量宣告变量宣告包含 name, type, length 和 structure 四个部分, 使用 DATA 指令, 如 DATA: S1 TYPE I, SUM TYPE I.常数宣告常数宣告使用 CONSTANTS 指令, 如宣告 PI 是一个小数点 5 位的值 3.14159, CONSTANTS PI TYPE P DECIMALS 5 VALUE ‘3.14159’.系统所定义数据这是由系统所定义的专有名辞, 如 SPACE SY-SUBRC 空白字符串 系统执行传回值, 0 表示成功SY-UNAME logon 账号 SY-DATUM 系统日期 SY-UZEIT SY-TCODE 系统时间 目前的 transaction code5 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 叙述则是用 在指定数据型态。DATA 叙述语法: DATA &f& [&length&] &type& [&value&] [&decimals&] &f&: 变量名称, 最长 30 个字符, 不可含有 + . , : ( &value&: 初值 &decimals&: 小数位数 Example: DATA: COUNTER TYPE P VALUE 1, FLAG TYPE C VALUE IS INITIAL, WEIGHT TYPE P DECIMALS 2 VALUE ‘1.25’. 字段变量的宣告: ) 等字符&length&&type&: 数据型态及长度, 如 LINE(20) TYPE C. MYNAME LIKE SY-UNAME.DATA: BEGIN OF NUMBER END OFADDRESS, TYPE P, ADDRESS. 6NAME(10) TYPE C , 使用时用字段变量加上组件名称, 如 ADDRESS-NAMECONSTANTS 叙述用来宣告常数 语法: CONSTANTS &c& [&length&] &type& [&value&] [&decimals&] Example: CONSTANTS: CNAME(10) VALUE ‘周庆日’, BIRTH_DAY TYPE D VALUE ‘’.STATICS 叙述宣告的变量仅在目前的程序中使用, 结束后会自动释放 语法: STATICS &c& [&length&] &type& [&value&] [&decimals&]TABLES 叙述用来宣告 Table Work Area 的数据, 对映至 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 Area7 2.3 Outputting Data to ScreenWrite 叙述ABAP/4 用来在屏幕上输出数据的指令是 Write 指令 语法: Write 资料项 数据项可以是常数或变量, 如: WRITE ‘This is sample’. WRITE: ‘COMPANY:’,STFL-CARRID.指定屏幕位置显示语法: Write AT [/] [&pos&] [(&len&)] 资料项 / : 先往下一列 pos : 屏幕 X 轴坐标 (len): 显示数据的长度 Example: WRITE ‘First Line ’. WRITE / 6 ‘Second Line’. 输出结果: First Line Second Line DATA: NUMBER TYPE I VALUE ‘’. TEXT(10) VALUE ‘ABCDEFGHIJ’. WRITE: (5) NUMBER, /(6) TEXT. 输出结果: *7890 ABCDEF指定显示格式语法: WRITE 数据项 &显示格式参数& 显示格式参数: LEFT-JUSTIFIED 数据靠左显示8 CENTERED RIGHT-JUSTIFIED UNDER &g& NO-GAP USING EDIT MASK &m& USING NO EDIT MASK NO-ZERO NO-SIGN DECIMALS &d& EXPONENT &e& ROUND &r& CURRENCY &c& DD/MM/YY MM/DD/YY DD/MM/YYYY MM/DD/YYYY DDMMYY MMDDYY YYMMDD Example:数据靠中间显示 数据靠右显示 在数据项&g&的 X 轴开始坐标显示 紧接着显示, 不留空格 使用内嵌字符显示, 如 11:20:30 不使用内嵌字符 数字前面 0 的部分不显示 不显示正负号 显示 d 位小数字数 F(浮点数) exponent 的值 四舍五入至小数位数下 r 位 币别显示 日期显示格式DATA: X TYPE I VALUE ‘112030’, A(5) VALUE ’ABCDE’. WRITE X USING EDIT MASK ‘__:__:__’. 输出结果为 11:20:30 WRITE X USING EDIT MASK ‘$___,___’ 输出结果为 $112,030产生空白列产生 n 个空白列 语法: SKIP [&n&] Example: WRITE ‘PASS1’. SKIP. WRITE ‘PASS2’. 9 输出结果为: PASS1 PASS2显示图标可以显示 R/3 系统所提供的符号或图标 语法: WRITE &symbol-name& AS SYMBOL WRITE &icon-name& AS ICON Example: INCLUDE &SYMBOL& INCLUDE &ICON& WRITE: / ‘Phone Symbol:’ , SYM_PHONE AS SYMBOL. WRITE: / ‘Alarm Icon:’ , ICON_ALARM AS ICON. 执行结果:要查看系统所提供有那些符号及图标, 可选择 “Edit” 下的 “Insert Statement”, 选择 “WRITE” 接下来选择要查的群组, 如 SYMBOL 或 ICON, 按下 “Display” 即可.跳至指定列坐标将坐标跳至指定的 Y 轴列坐标 语法: SKIP TO LINE [&n&] Example: SKIP TO LINE 5. WRITE ‘PASS1’.10 显示 CHECK BOX 数据以字符串数据内容的第一个字符为 CHECK BOX 的输出, 如果是空白, CHECK BOX 显示 为空白, 相反则显示 X , 可用在逻辑判断检查 语法: WRITE &资料项& AS CHECKBOX. Example: DATA: FLAG1 VALUE ‘ ‘ . FLAG2 VALUE ‘X’. WRITE: / ‘CHECK FLAG 1:’ , FLAG1 AS CHECKBOX. WRITE: / ‘CHECK FLAG 2:’ , FLAG2 AS CHECKBOX. 执行结果:11 2.4 Processing DataAssign Value语法: MOVE &F1& TO &F2& 将 F1 的值存至变数 F2 中, 也可写成 F2 = F1 Example: M_NAME = ‘CHER’.使用 Offset语法: MOVE &F1&[+&O1&] TO Example: DATA: F1(10) VALUE ‘ABCDEFGHIJ’. F2(5). F2 = F1+3(5). “自第 4 个位置开始取出 5 个字符 F2 的内容会变成 DEFGH &F2&[+&O2&]Field String 组件的复制语法: MOVE CCORRESPONDING &Strings1& TO &String2&. 将 Strings1 中的 field 组件的数据复制至 String2 中, 仅复制相同名称的组件 Example: DATA: BEGIN OF ADDRESS, FIRSTNAME(10) VALUE ‘LULU’, LASTNAME(10) VALUE ‘CHOU’, TEL(12) VALUE ‘4660570’, END OF DATA:BEGIN OF ADDRESS. NAME,FIRSTNAME(10), LASTNAME(10), E_MAIL(30), END OF NAME. MOVE-CORRESPONDING ADDRESS TO NAME. NAME-FIRSTNAME 变成 ‘LULU’, NAME-LASTNAME 变成 ‘CHOU’,12 而 NAME-E_MAIL 则不变变量 CALL BY VALUE 的使用在变量的使用上, 可以使用类似 Call By Value 的方法 语法: WRITE (&f&) TO &g& Example: DATA: NAME(20) VALUE ‘SOURCE’, SOURCE(10) VALUE ‘LILY’, TARGET(10). WRITE (NAME) TO TARGET. WRITE / TARGET. 屏幕可印出 LILY清除变量内容语法: CLEAR &f& 清除变量现在内容, 恢复成初值 Example: DATA N TYPE I VALUE 100. CLEAR N. 变量 N 的内容变成 0算术符号 ** * / + DIV MOD乘幂 乘 除 加 减 整数除法 余数除法13 数值函数1. 2. ABS(N): 传回数值 N 的绝对值 SIGN(N): 1 0 3. if N & 0 if N = 0-1 if N & 0 CEIL(N): 传回大于数值 N 的最小整数 Example: WRITE CEIL(-5.65) 印出 C5.00 WRITE CELL(4.54) 印出 5.00 4. FLOOR(N): 传回小于数值 N 的最大整数 Example: WRITE FLOOR(-5.65) 5. TRUNC(N): 传回数值 N 的整数部分 Example: WRITE TRUNC(5.65) 印出 5.00 6. FRAC(N): 传回数值 N 的小数部分 Example: WRITE FRAC(5.65) 印出 0.65 7. 8. 9. COS(A),SIN(A),TAN(A): 传回三角函数 cos A, sin A, tan A 的值, A 为弪度量 LOG(N): 传回 log eN 值 LOG10(N): 传回 log N 值 8.EXP(N): 传回 e^N 值 印出 C6.00 WRITE FLOOR(4.54) 印出 4.0010.SQRT(N): 传回 N 的平方根值日期与时间运算1.日期数据的运算 日期数据可以直接运算, 如加法与减法的运算 Example: DATA: Mdata TYPE D. Mdate = SY-DATUM. “ 如传回
Mdate+6(2) = ‘01’ “ Mdate 变成
Mdate = Mdate - 1 “ Mdate 变成 14 2.时间数据的运算 时间格式为 ‘hhmmss’, 如 ‘212030’ 表 ’21:20:30’ Example: DATA: HOURS TYPE I, MINUTES TYPE I, T2 TYPE T VALUE ‘200000’, T1 TYPE T VALUE ‘183000’. HOURS = (T2 - T1) / 3600. “计算有几小时 MINUTES = (T2 C T1) / 60. “计算几分钟字符串数据处理1.字符串移位 语法: SHIFT &c& [BY &n& PLACES] [&modes&] &modes& : (1).空白, 字符串往左移一位 (2).LEFT, 字符串往左移 n 位 (3).RIGHT, 字符串往右移 n 位 (4).CIRCULAR: 字符串以环状方式移位 Example: DATA STRING(10) VALUE ‘ABCDEFGHIJ’. RIGHT. “得到 ABCDEFGH SHIFT STRING. “得到 BCDEFGHI’ SHIFT STRING BY 2 PLACES 2.取代字符串内容 语法: REPLACE &string1& WITH &string2& INTO &c& 将字符串 &c& 中的 &string1& 以 &string2& 来取代 Example: DATA: STRING(10) VALUE ‘ABCDEFGHI’, STR1(3) VALUE ‘DEF’, STR2(3) VALUE ‘123’. REPLACE STR1 WITH STR2 INTO STRING. WRITE / STRING. 3.大小写的转换 语法: TRANSLATE &c& TO UPPER CASE. “转成大写 TRANSLATE &c& TO LOWER CASE. “转成小写 15 “得到 ABC123GHI 4.在字符串中寻找部分字符串 语法: SEARCH &c& FOR &str& Example: DATA STRING(10) VALUE ‘ABCDEFGHIJ’. 会回存至两个变数, SY-SUBRC 和 SY-FDPOS, 若找到则 SY-SUBRC 为 0 SY-FDPOS 存开始位迭, 若找不到则 SY-SUBRC 为 4, SY-FDPOS 为 0 5.字符串长度 STRLEN(&c&) Example: INT = STRLEN(‘XYZABC’). “得到 6 INT = STRLEN(‘ABC 6.取部分字符串 &f&[+&o&][&l&] Example: DATA T(10) VALUE ‘ABCDEFGHIJ’. WRITE / T+2(4). “得到 CDEF ’ ). “得到 316 2.5 Flow Controlling比较符号1. = 或 EQ 3. & 或 LT 4. &= 或 LE 5. & 或 GT 6. &= 或 GE 7. AND 8. OR 9. NOT : 等于 : 小于 : 小于等于 : 大于 : 大于等于 : 且 : 或 : 非 2. && 或 && 或 NE : 不等于条件述叙1. IF 述叙 语法: IF &Condition1&. &Statement 1 & ELSEIF &Condition2&. &Statement 2& ELSEIF &Condition3&. &Stetement 3& ….. ELSE. &else Statement & ENDIF. (1).在每个判断叙述之后要加上 . (2).在巢状迥圈之中无法使用 ELSE 叙述, ELSE 叙述属 IF 叙述 Example: IF 3 & 8. WRITE / ‘3 is less than 8’. ENDIF.17 2. CASE 叙述 语法: CASE &变数 f&. &Statement1& WHEN &Value2&. &Statement2& …. WHEN OTHERS. &others Statement& ENDCASE. Example: S = ‘A’. CASE S. WRITE / ‘String is X’. WHEN OTHERS. WRITE / ‘String is not X’. ENDCASE. WHEN ‘X’.WHEN &Value1&.迥圈叙述1.计次迥圈 语法: DO [n TIMES] [VARYING &f& FROM &start& TO &end&. &loop block& ENDDO. Example: DO 2 TIMES. WRITE / ‘X’. ENDDO. 执行结果: X X DO VARYING I FROM 1 TO 10. S = S + I. ENDDO. 18 WRITE: / ,’1+2+3+…+10=’,S 执行结果: 1+2+3+…+10=55 2.条件迥圈 语法: WHILE &Condition&. &Statement Block& ENDWHILE Example: I = 1. S=0. WHILE I &= 10. S = S+I. I=I+1. ENDWHILE. WRITE: / ‘ 1+2+3+…+10=’,S. 执行结果为: 1+2+3+…+10=55迥圈控制叙述1. CONTINUE 跳至迥圈的下一次 Example: DO 3 TIMES. IF SY-INDEX = 2. CONTINUE. WRITE / SY-INDEX. ENDDO. 执行结果: 1 3 2. CHECK &Condition& CHECK 之后条件成立才继续往下执行迥圈 Example: DO 5 TIMES. CHECK SY-INDEX BETWEEN 2 AND 4. WRITE / SY-INDEX. ENDDO. 19 执行结果: 2 3 4 3. EXIT 跳离迥圈叙述 Example: DO 10 TIMES. IF SY-INDEX = 4. EXIT. ENDIF WRITE / SY-INDEX. ENDDO. 执行结果: 1 2 3无穷迥圈DO . &Statement Block& ENDDO. 无穷迥圈必须配合 EXIT 叙述来执行20 2.6 Processing Internal TableInternal Table 的宣告ABAP/4 的 Internal Table 如同其它语言的数组结构, 在操作上可以有复制,删除,新增插入等功 能. 1.使用 TYPE 叙述 语法: TYPES &t& &type& OCCURS &n& 宣告一个数组 &t&, 型态为 &type&, 长度为 &n& Example: TYPES A TYPE I OCCURS 10. A 是个 10 个元素的数值 Internal Table Example: TYPES: BEGIN OF LINE, COL1 TYPE I, COL3 TYPE I, END OF LINE. TYPES ITAB TYPE LINE OCCURS 10. 宣告一个 Internal Table ITAB, 总共有 10 个元素, 其 WORK AREA 名称 为 LINE 2.使用 DATA 叙述 若使用 DATA 叙述来宣告 Internal Table, 可分成要不要有 HEADER LINE, HEADER LINE 就 是所谓的 WORK AREA, 用在数据的存取上. 语法: DATA &f& &type& OCCURS &n& [WITH HEADER LINE] Example: DATA VECTOR TYPE I OCCURS 10 WITH HEADER LINE.3.直接宣告, 不使用 WORK AREA 语法: DATA: BEGIN OF &f& OCCURS &n&, &component 宣告& END OF &f&.21 Example: DATA: BEGIN OF ITAB OCCURS 10, COL1 TYPE I, COL2 TYPE I, END OF ITAB. 如此产生的 Internal Table 不会有 Work Area, 也就是宣告时不会 Reference 其它的 Conponent 宣告Append Line语法: APPEND [&wa&] TO [Initial Line To] &itab& [Initial Line To] 为增加一预设初值的元素 Example: 使用 Work Area DATA: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I, END OF LINE. DATA ITAB LIKE LINE OCCURS 10. DO 2 TIMES. “SY-INDEX 为迥圈的 Counter “新增至 Internal Table 中 “ITAB 总共有两个元素 LINE-COL1 = SY-INDEX. LINE-COL2 = SY-INDEX **2. APPEND LINE INTO ITAB. ENDDO. LOOP AT ITAB INTO LINE. WRITE: / LINE-COL1,LINE-COL2. ENDLOOP. 执行结果为:1214Example: 不使用 Work Area DATA: BEGIN OF ITAB OCCURS 10, COL1 TYPE I, COL2 TYPE I, END OF ITAB. DO 2 TIMES. 22 ITAB-COL1 = SY-INDEX. ITAB-COL2 = SY-INDEX **2. APPEND ITAB. ENDDO. LOOP AT ITAB. “ITAB 总共有两个元素 WRITE: / ITAB-COL1,ITAB-COL2. ENDLOOP. 执行结果为: “新增至 Internal Table 中1214加入另一 Internal Table 的元素语法: APPEND LINES OF &itab1& [FROM &n1&] [TO &n2&] TO 将&itab1&的元素加入至&itab2&中, 可选取自&n1&至&n2&的范围 Example: APPEND LINES OF ITAB TO JTAB. 将 ITAB 所有元素加入 JTAB 中 &itab2&Collect语法:Line在加入新元素时将有相同 standard key(非数值字段)的数值字段汇总 COLLECT [&wa& INTO] Example: DATA: BEGIN OF ITAB OCCURS 3, COL1(3) COL2 END OF TYPE C, TYPE I, ITAB. ITAB CCOL2 = 10. &itab&ITAB-COL1 = ‘ABC’. COLLECT ITAB.ITAB-COL1 = ‘XYZ’. ITAB-COL2 = 20. COLLECT ITAB. ITAB-COL1 = ‘ABC’. ITAB-COL2 = 30. 23 COLLECT ITAB. LOOP AT ITAB.“汇总 COL2 至 COL1=ABC 的元素上WRITE: / ITAB-COL1,ITAB-COL2. ENDLOOP. 执行结果: ABC XYZ 40 20Insert Line插入元素在指定的 Internal Table 位置之前 语法: INSERT [&wa& INTO] [INITIAL LINE INTO] &itab& [INDEX Example: DATA: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I, END OF DATA DO 3 TIMES. LINE-COL1 = SY-INDEX *10. LINE-COL2 = SY-INDEX *20. APPEND LINE INTO 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 2 3 4 10 100 20 30 20 200 “插入的元素 40 60 LINE. ITAB LIKE LINE OCCURS 10. &idx&]24 插入另一 Internal Table 元素语法: INSERT LINES OF &itab1& [FROM &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 元素数据的读取语法: LOOP AT &itab& [INTO &wa&] [FROM &n1& TO &n2&] [WHERE &condition&] &loop expression& ENDLOOP. 根据设定的范围选取原素资料, 读完后自动移往下一笔 Example: LOOP AT ITAB INTO LINE WHERE COL1 &100. WRITE: / SY-TABIX,LINE-COL1. ENDLOOP. 仅读取 COL1 & 100 的元素读取 Internal Table 指定位置的元素语法: READ TABLE &itab& [INTO &wa&] INDEX &idx& 自指定位置 &idx& 读取元素数据 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 中 25 若找到 SY-SUBRC 传回 0, 找不到则传回 4, &itab&必须宣告有 work area异动元素内容语法: MODIFY &itab& [FROM &wa&] [INDEX &idx&] [TRANSPORTING &f1&…&f2&] [WHERE &condition&] TRANSPORTING &f1& ..&f2& : 指定异动的字段名称 Example: LINE-COL1 = 4. LINE-COL2 = 100. MODIFY ITAB FROM LINE. 将目前位置元素以 LINE 的内容异动 Example: LINE-COL1 = 10. MODIFY ITAB FROM LINE INDEX 3 TRANSPORTING COL1. 将第三个元素的 COL1 字段异动为 10Delete Lines删除 Internal Table 的元素 语法: DELETE &itab& INDEX &idx& Example: DELETE ITAB INDEX 4 删除第四个元素 加上删除条件: DELETE &itab& [FROM &n1& TO &n2&] Example: DELETE ITAB FROM 3 TO 删除第 3 至第 10 个元素 10. [WHERE &condition&Internal Table Sorting语法: SORT &itab& [&order&] [BY &f1&] …. [&order&] : 可分成递减(DESCENDING)和递增(ASCENDING), 空白表 ASCENDING &f1&:为指定的字段 Example: SORT ITAB DESCENDING BY 26 COL2. 将 ITAB 根据 COL2 字段递减排序计算数值字段总和语法: SUM 计算得总和存在 work area 中, 但只能存在 LOOP 叙述中 Example: LOOP SUM. ENDLOOP. WRITE: / LINE-COL1,LINE-COL2. LINE-COL1 和 LINE-COL2 存数值总和 AT ITAB INTO LINE.Initial Table1. REFRESH &itab& 使用在没有 HEADER LINE 的 Internal Table 中, 清除所有元素 Example: REFRESH ITAB. 2. CLEAR &itab&[ ] 使用在有 HEADER LINE 的 Internal Table 中, 清除所有元素 Example: CLEAR ITAB[ ]. 3. FREE &itab& 释放(Release) Internal Table 所占的内存空间, 用在 REFRESH 和 CLEAR 指令之后 Example: FREE ITAB.27 2.7 Processing Dictionary TableR/3 对于存放在 Relation Database 的数据可使用 SQL 指令读取或处理, 指令种类 可分成 DDL(Data Definition Language)指令, 如 CREATE, 及 DML(Data Manipulation Language) , 如 SELECT 及 INSERT 等, 处理方式分成 OPEN SQL 及 NATIVE SQL, 前者在处理时, Database 与 Command Interpreter 间有一 Buffer 区, 如 SELECT * FROM…, 后者则直接处理 数据库, 如 EXCE SQL SELECT…等, 有两个重要的系统变量: SY-SUBRC: 传回 0 表成功执行指令, 4 表未找到符合条件数据 SY-DBCNT: 正处理的数据笔数TABLES 指令用于宣告程序中所使用的 tables 语法: TABLES tableSELECT 指令自数据库读取记录 语法: SELECT &result& FROM &source& [INTO &target&] [WHERE &condition&] [ GROUP BY &fields&] [ORDER BY &sort order&] 1.以迥圈方式读取所有记录 语法: SELECT [DISTINCT] * … ….. ENDSELECT. 加上[DISTINCT]会自动去除重复的记录 Example: TABLES SPFLI. SELECT * FROM SPFLI WHERE COMPANY=’DELTA’. WRITE: / PLANT,TEL. ENDSELECT. 会以迥圈的方式逐笔印出符合条件的记录 2.读取单笔记录 28 语法: SELECT SINGLE * FROM …. WHERE…. Example: TABLES SPFLI. SELECT SINGLE * FROM SPFLI WHERE PLANT =’CHUNGLI’ AND TEL=’4526174’. WRITE: / SPFLI-COMPANY,SPFLI-PLANT,SPFLI-TEL. 3.将读取的记录存放至 Work Area 语法: SELECT ….. INTO &wa& Example: TABLES SPFLI. DATA WA LIKE TABLES. SELECT * FROM SPFLI INTO WA. WRITE: / WA-COMPANY,WA-PLANT. ENDSELECT. 逐笔写入 WA 工作区中 4.将读取的数据写入 Initial Table 中 语法: SELECT .. INTO TABLE &itab& Example: TABLES SPFLI. DATA ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE. SELECT * FROM SPFLI INTO ITAB. 一次读 10 笔(Initial Table 的长度)记录存入 ITAB 中 SELECT .. INTO TABLE &itab& PACKAGE SIZE &n& 一次读取 &n& 笔记录至 &itab&中 Example: TABLES SPFLI. DATA ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE. SELECT * FROM SPFLI INTO ITAB PACKAGE 一次读取 5 笔记录 5.条件叙述 29 SIZE 5. 语法: WHERE &condition& (1).BETWEEN &g1& Example: WHERE YEAR BETWEEN 1995 AND 2000. (2).LIKE &g& 表示条件包含的字符串 &1&._:表示一个字符 &2& % : 表示一个字符串 Example: ..WHERE NAME LIKE ‘LEE%’. 条件为 NAME 字段前 3 个字符为 LEE ..WHERE MODEL LIKE ‘‘%SPS%’. 条件为 MODEL 字段包含 SPS 的记录 (3).IN (&g1&….&g2&) 包含在 &g1&…&g2&的条件 Example: ..WHERE PLANT IN (‘TAOYUAN’,’CHUNGLI’,’LIUTU’). 条件为 PLANT 是 TAOYUAN,CHUNGLI 或 LIUTU 的记录 6.ORDER BY 叙述 指定排序的字段或顺序 (1). ..ORDER BY PRIMARY KEY. 根据 PRIMARY KEY 递增排序 (2)…ORDER BY &f1& [DESCENDING] &f2& [DESCENDING] Example: SELECT * FROM IM ORDER BY PART . AND &g2& 在 &g1& 至 &g2& 之间的条件范围INSERT 指令加入一笔记录至数据库 1.自 Work Area 工作区 语法: 30 INSERT INTO &database& VALUES &wa& Example: TABLES SPFLI. DATA WA LIKE SPFLI. WA-NO = ‘’. WA-COMPANY=’DELTA’. INSERT SPFLI VALUES WA. 将 ITAB 数据加入 SPFLI 中, 也可写成 INSERT SPFLI FROM ITAB. SPFLI-NO=’’. SPFLI-COMPANY=’HP’. INSERT SPFLI FROM SPFLI. 将 Work Area SPFLI 中的数据加入数据库档案 SPFLI 中 因 Work Area SPFLI 的结构与数据文件 SPFLI 一样, 所以也可 写成 INSERT SPFLI. 2.自 Internal Table 语法: INSERT &database& FROM TABLE &itab& [ACCEPTING DUPLICATE KEY] 将 &itab&中非 NULL 的数据加入 &database&中, 加上 [ACCEPTING DUPLICATE KEY]能检查不加入有重复 primary key, 若有重复则 SY-SUBRC 会传回 4 Example: TABLES SPFLI. DATA ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE. ITAB-NO = ‘’. ITAB-COMPANY = ‘DELTA’. APPEND ITAB. …. INSERT SPFLI FROM TABLE ITAB ACCEPTING DUPLICATE KEY.UPDATE 指令异动已存在的记录内容 1.使用 Primary Key 语法: 31 UPDATE &database& FROM &wa& Example: TABLES SPFLI. DATA WA LIKE SPFLI. WA-NO=’’. WA-COMPANY=’DELTA’. UPDATE SPFLI FROM WA. 如 SPFLI 的 Primary Key 是 NO, 则会找到 NO=’’ 的记录, 将其 COMPANY 字段异动为 DELTA 2.使用条件式 语法: UPDATE &database& SET & f1&=&values&… WHERE &condition& 根据条件式异动符合条件式的记录 Example: UPDATE SPFLI SET NO=’’ COMPANY = ‘DELTA’ WHERE TEL=’4526107’.MODIFY 指令根据 Primary Key 寻找数据文件中符合的记录, 若找到则更新异动, 若找不到则新增记录 语法: MODIFY &database& FROM &wa& Example: WA-NO=’’. WA-COMPANY=’DELTA’. MODIFY SPFLI FROM WA.DELETE 指令删除数据文件的记录 1.使用 Primary Key 语法: DELETE &database& FROM &wa& Example: TABLES SPFLI. 32 DATA WA LIKE SPFLI. WA-NO=’’. WA-COMPANY=’DELTA’. DELETE SPFLI FROM WA. 如 SPFLI 的 Primary Key 是 NO, 则会找到 NO=’’ 的记录, 找到后将此笔删除 2.使用条件式 语法: DELETE FROM &database& WHERE &condition& 根据条件式删除符合条件式的记录 Example: DELETE FROM SPFLI WHERE AREA = ‘AMERICAN’.DATABASE CURSORDatabase Cursor 是一个数据库暂存区, 将经 SELECT 指令读取的记录存放至此暂存区, 再由此暂存区放至 Work Area 中, 可见少数据库读取的次数. 1.开启 Database Cursor 语法: OPEN CURSOR &c& FOR 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 &c& INTO &wa& Example: FETCH NEXT CURSOR C1 INTO WA. 读取下一笔 Cursor 位置的数据存入 WA, 如果已无数据可读, SY-SUBRC 不传回 0 4. 关闭 Database Cursor 33 SELECT … WHERE &condition& 语法: CLOSE CURSOR &c& Example: CLOSE CURSOR C1.COMMIT WORK 与 ROLLBACK WORK要确定数据成功写入数据库, 可使用 COMMIT WORK 指令, 如: COMMIT WORK. 相反的, 如果反悔要复原, 可使用 ROLLBACK WORK, 可复原在上个 COMMIT WORK 指令之后的数据, 如: ROLLBACK WORK.使用 NATIVE SQL 指令语法: EXEC SQL [PERFORMING &form&]. &statement block&] [;] ENDEXEC. Example: DATA: BEGIN OF NAME(8), AGE TYPE I, END DATA FI = 20. EXEC SQL PERFORMING OUTPUT. SELECT NAME,AGE INTO :WA FROM NAME_TABLE WHERE AGE &= :F1. ENDEXEC.. FORM OUTPUT. WRITE: / WA-NAME,WA-AGE. ENDFORM. OF WA. F1 TYPE I. WA,34 2.8 ABAP/4 Program ModuleABAP/4 中所谓的 Module 在一般语言称之为 Subroutine, 其数据传递方式皆相似, 如 CALL BY VALUE,CALL BY REFERENCE 等, 可分成以下几个部分: 1.Macro Block 2.Include Program 3.Subroutine Program 4.Function ModuleMacro Block在程序中可以定义一段宏叙述, 并且可以传入参数, 参数符号(Placeholder)可自 &1, &2 至 &9 1.宏的定义 DEFINE &macro&. &宏叙述 END-OF-DEFINITION. 2.宏的呼叫使用 &macro& [&p1& &p2&….] &p1& 为传入宏的参数值, 在参数间至少要给予一个空白 Example:利用宏计算 N 次方 DATA RESULT TYPE I. DEFINE MULTI. RESULT = &1 ** &2. WRITE: / ‘&1 ^ &2 = ‘,RESULT. END-OF-DEFINITION. MULTI 3 4. 执行结果为 3 ^ 4 = 81Include Program1.在 ABAP/4 中可以使用 Include 叙述加载另一个程序的全部叙述, 通常用于共享数据项 的宣告, 很类似 C 的 Include header file 的做法. 语法: 35 INCLUDE &include program file& Example: 程序 YStart 的内容如下: ***INCLUDE YSTART. WRITE: / ‘User Name = ‘ ,SY-UNAME. WRITE:/ ‘Host Server = ‘,SY-HOST. 另一程序如下: PROGRAM YTEST1. INCLUDE YSTART. “载入 YSstart 的所有内容 执行络果: User Name = MIS-CHOU Host Server = deidv01 2.Global 变量宣告应用 语法: DATA: BEGIN OF COMMON PART [&name&], &data 宣告& END OF COMMON PART [&name&] 此常使用在 Include 的档案中, 如 ***INCLUDE INCOMMON. DATA: BEGIN OF COMMON PART NUMBERS, MID(8), MNUM TYPE I, END OF COMMON PART NUMBERS.Subroutine Procedure在 ABAP/4 Subroutine 的呼叫可分成 Internal Call 和 External Call, 前者撰写在程序 中, 后者存在另一程序中, 通常为专存放 Subroutine 的公用程序集, 可提供结不同的 程序呼叫. 1.Subroutine 的宣告 FORM &subr& [&pass&]. &subroutine statement block& ENDFORM. 2.呼叫的方法 (1).Internal Call 语法: PERFORM &subr& [&pass&] 36 Example: NUM1 = 100. NUM2 = 200. PROFORM ADD. FORM ADD. SUM = NUM1 + NUM2. WRITE: / ‘NUM1 + NUM2 = ‘,SUM. ENDFORM. 执行结果: NUM1 + NUM2 = 300 (2).External Call 另一程序 语法: PERFORM &subr&(&prog&) [&pass&] [IF FOUND] &subr&:子程序名称 &prog&:存放子程序的程序名称 IF FOUND: 找到才执行 Example: PROGRAM FORMPOOL. FORM HEADER. WRITE: / ‘USER NAME: ‘,SY-UNAME. ENDFORM. 在程序中呼叫 HEADER 子程序 PROGRAM YTEST1. PERFORM HEADER(FORMPOOL) IF FOUND. (3).External Call 另一专存放子程序的程序文件 语法: PERFORM (&fsubr&) [IN PROGRAM (&fprog&) [&pass&] [IF FOUND] Example: 存放子程序的程序文件 PROGRAM FORMPOOL. FORM SUB1. WRITE: / ‘USER NAME:’,SY-UNAME. ENDFORM. FORM SUB2. WRITE: / ‘HOST SERVER:’,SY-HOST. ENDFORM. 在程序中呼叫 FORMPOOL 中的 SUB2 子程序 SUBNAME = ‘SUB2’. 37 PROGNAME = ‘FORMPOOL’. PERFORM (SUBNAME) IN PROGRAM (PROGNAME) IF FOUND参数值的传递在 ABAP/4 中参数的传递可分成 1. Call By Reference: 传参数时将数据的存放地址(address)传至参数中, 也就是子程序中的参数变量与外部实际 变量共享地址内的值, 又称为 Call By Address, 若在子程序中地址中的值改变了, 外部实 际变量的值也会跟着改变. 语法: FORM &subr& [USING &f1& &f2&…] [CHANGING &f1&…] PERFORM &subr& [USING &f1& &f2&…] [CHANGING &f1&…] Using 之后接在子程序中不会改变的变量, CHANGING 接会改变值的变量 但实际上 USING 之后的参数在子程序中也可将值改变 Example: SUM = 0. NUM1 = 100. NUM2=200. PERFORM ADD USING NUM1 NUM2 CHANGING SUM. WRITE: / NUM1,NUM2,SUM “ SUM 由 0 变成 300 FORM ADD USING NUM1 NUM2 CHANGING SUM. SUM = NUM1 + NUM2. ENDFORM. 执行结果: 100 2. Call By Value 传参数时将数据的值复制一份至另一地址中, 所以在子程序中参数变量值改变, 并不会影 响外部实际变数的值. 语法: FORM &subr& USING VALUE(&f1&…) 使用 VALUE(&f1&)表示 &f1&是 Call By Value 的传递 PERFORM &subr& USING &f1& Example: SUM = 0. NUM1 = 5. PERFORM MULTI USING NUM1 CHANGING SUM. 38 200 300 WRITE: / NUM1,SUM “NUM1 值还是 5, SUM 由 0 变成 120 FORM MULTI USING VALUE(NUM1) CHANGING SUM. SUM = 1. WHILE NUM1 & 1 SUM = SUM * NUM1. NUM1 = NUM1 C 1. ENDWHILE.. ENDFORM. 执行结果: 5 1203. Call By Value and Return Result 传入参数值的方式同 Call By Value, 但在子程序结束执行时会将传入的参数值复制 一份传回给外部实际变数. 语法: FORM ….. CHANGING VALUE(&f1&) PERFORM …. CHANGING …. &f1& Example: SUM = 0. NUM1 = 100. NUM2=200. PERFORM ADD USING NUM1 NUM2 CHANGING SUM. WRITE: / NUM1,NUM2,SUM “ SUM 由 0 变成 300 FORM ADD USING NUM1 NUM2 CHANGING VALUE(S). S = NUM1 + NUM2. WRITE: / NUM1,NUM2,SUM “得到结果为 100 200 0 ENDFORM. 执行结果: 100 100 200 200 0 300 “在子程序中 SUM 值尚未改变 “返回程序时, 将变量 S 的值复制给 SUM “所以 SUM 值变成 300Subroutine 的控制5. CHECK &Condition& CHECK 之后条件成立才继续往下子程序叙述 Example: 39 PERFORM SUB1. CHECK NUM1 & 10. WRITE / NUM1. NUM1 = NUM1 + 1. ENDFORM. 6. EXIT 强迫结束子程序执行, 返回上一层程序叙述Function Module在 ABAP/4 中的 Function Module 是储存在一个函式库中(library), 系统提供很多内设的 Function Module 供程序中呼叫, 也可以自行增加自己的 Function Module. 1.叫出已存在的 Function Module (1).在 ABAP/4 Development Workbench 画面中选择 “Function library”, 可见以下画面:(2).选择”Utility”中的”Find”中输入要寻找的 Function Module 名称, 如输入 STRING*, 为找 出前五个字符为 STRING 的 Function Module:40 (3).输入后按下左上的 Execute, 可见以下画面:(4).选择要查询或修改的 Function 名称, 如选择 STRING_LENGTH, 如要查询可选择 “Display”, 可见 Function Module 之各项参数设定: &1&.Import Parameter: 传入的参数名称, 但实际在程序中使用时刚好与 Export 相颠们 &2&.Export Parameter: 传回的参数名称, 程序中变成 Import 的使用 &3&.Changing Parameter:使用 Call By Value and Return Result 方法的参数 &4&.Table Parameter: 使用的 Initial Table 参数 &5&.Exceptions: 错误处理参数41 如 STRING_LENGTH 为一传回字符串长度的函数, 其设定的参数如下: Import : String 传入一字符串字符串数据 Export: Length 传回的字符串长度值 (5).要查看程序内容可按下 “ Source Code”, 显示其程序内容如下: function string_length. length = strlen(string). endfunction. (6).函数的呼叫 语法: CALL FUNCTION &module& IMPORTING EXPORTING CHANGING TABLES F1=a1…. F1=a1…. F1=a1… F1=a1…EXCEPTIONS F1=a1… Example: DATA: TEXT(20), LEN TYPE I. TEXT = ‘ABCDEFGHIJ’. CALL FUNCTION ‘STRING_LENGTH’ EXPORTING STRING = TEXT IMPORTING LENGTH = LEN. WRITE / LEN. 注意 EXPORTING 与 IMPORTING 刚好颠倒, 执行所得结果为 1042 4.屏幕输入命令在 ABAP/4 中要自屏幕输入变量数据的内容, 使用的命令是 PARAMETERS 及, SELECTION-OPTIONS: 1. PARAMETER: 输入一个变量或字段内容 2. SELECTION-OPTIONS: 使用条件筛选画面来输入数据.PARAMETERS 指令基本的输入命令, 类似如 BASIC 的 INPUT 命令, 但无法使用 F 格式(浮点数) 语法: PARAMETERS &p& [DEFAULT &f&] [LOWER CASE] [OBLIGATORY] [AS CHECKBOX] [RADIOBUTTON GROUP &rad&] 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 ‘’. 2.LOWER CASE ABAP/4 预设是将字符串输入值自动转换为大写, 加上此参数会将输入的数据 转成小写, 3.OBLIGATORY 强制要求输入, 屏幕上会出现一个 ? , 使用者必须要输入才可. 4.AS CHECKBOX 输入 CHECKBOX 的格式43 Example: PARAMETERS: TAX AS NTD AS 执行结果: CHECKBOX DEFAULT ‘X’, CHECKBOX.5.RADIOBUTTON GROUP &rad& 输入 RADIO BUTTON GROUP 的方式 Example: PARAMETERS: BOY RADIOBUTTON GROUP SEX DEFAULT ‘X’, GIRL RADIOBUTTON GROUP SEX. 执行结果:SELECTION-OPTIONS条件筛选检查条件输入画面指令, 输入条件后可配合 SELECT 指令自 TABLE 读取 符合条件的数据, 直接执行或放入 Internal Table 中, 条件有四个参数: 1. SIGN: I: 表筛选条件符合的资料 E: 表筛选条件不符合的资料 2. OPTION: 比较的条件符号 EQ(等于),NE(不等于),GT(大于),LE(小于),CP(包含),NP(不包含) 3. LOW: 最小值 4. HIGH: 最大值 语法: SELECTION-OPTIONS &check-option& FOR &table-field& Exaample: TABLES SPFLI. SELECTION-OPTIONS AIRLINE FOR SPFLI-CONNID. 将条件的输入值存放入 AIRLINE, 筛选选择为 SPFLI 中的 CONNID 字段44 执行结果:可直接输入起始范围或按下选择画面, 输入完后按下左上角的执行键条件输入选择画面1. 2. 自 Table 中选取 Selection Options 按下输入项的右边往下箭头, 叫出 Table 中数据项, 选取开始和结束的范围 按下”Selection options”按键, , 输入 Option 及 Sign 参数内容, 屏幕如下:3.Multi-Options 输入 按下最右边的 Multi-Options 输入键, 输入条件选取的范围, 画面如下:条件输入完后按下”Copy”按键45 改变条件输入格式1. DEFAULT &begin& TO Example: SELECTION-OPTION AIRLINE FOR SPFLI-CONNID DEFAULT ‘2042’ TO ‘4555’. 2. NO-EXTENSION 设定不要 Multi-Option 输入画面 3. NO INTERVALS 设定不要区间范围输入画面 4. LOWER CASE 输入转换成大写 5. OBLIGATORY 强制要求输入 &end& 设定开始结束范围输入默认值配合 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. 46 ENDIF ENDSELECT.SELECTION-SCREEN1.产生空白列 语法: SELECTION-SCREEN SKIP [&n&] Example: SELECTION-SCREEN SKIP 2. 产生两列空白列 2.产生底线 语法: SELECTION-SCREEN ULINE / &pos&(length) Example: SELECTION-SCREEN ULINE /10(30). 自第 10 格开始产生长度 30 的底线 3.印出备注说明 语法: SELECTION-SCREEN COMMENT / &pos&(length) &name& Example: REMARK = ‘Pls enter your name’. SELECTION-SCREEN COMMENT /10(30) REMARK. 4. 同一列中输入数个数据项 语法: SELECTION-SCREEN BEGIN …… SELECTION-SCREEN END OF Example: SELECTION-SCREEN BEGIN OF PARAMETERS NAME(10). SELECTION-SCREEN POSITION 40. PARAMETERS BIRTH TYPE D. SELECTION-SCREEN END OF LINE. 在 20 格输入 NAME 内容, 40 格输入 BIRTH 的内容 LINE. SELECTION-SCREEN POSITION 20. LINE. OF LINE.47 5. 绘出 BLOCK PANEL 语法: SELECTION-SCREEN BEGIN ……. SELECTION-SCREEN END OF Example: SELECTION-SCREEN BEGIN OF WITH FRAME . PARAMETER R1 RADIOBUTTON GROUP GR1. PARAMETER R2 RADIOBUTTON GROUP GR1. PARAMETER R3 RADIOBUTTON GROUP GR1. SELECTION-SCREEN END OF BLOCK RADIO. BLOCK RADIO BLOCK &block&. OF BLOCK &block&[WITH FRAME [TITLE &title&].48 5.Standard Report一个典型的报表程序是由许多的程序区块(Code Block)所组成,在区块间最好能加上一些 说明以利程序可读性,一个典型的报表程序格式如下:PROGRAM SOURCE HEADER : 说明程序名称及目的 * Program Name: * Description: * Date/Author: * Table Update: * Special Logic: * Include: *--------------------------------------------------------------* MODIFICATION LOG : 程序修改更新记录 *--------------------------------------------------------------* ChangeDate Programmer Request Description * ========== ============= ============ ========================== * NEW PROGRAM *--------------------------------------------------------------* REPORT NAME : 宣告程序名称及报表格式, *-----------------------------------------------------------------REPORT Z_____ NO STANDARD PAGE HEADING MESSAGE-ID __ “ 所使用的 MESSAGE LINE-COUNT ___ “ 每页报表列数 LINE-SIZE ___. “ 每页报表宽度 * TABLE DESCRIPTION : 宣告程序会使用的 TABLE *-----------------------------------------------------------------TABLES:** DATA : 宣告程序所使用的变量及自定型态 *---------------------------------------------------------------TYPES: DATA: * SELECTION SCREEN / OPTION / PARAMETER : 屏幕输入报表筛选条件 *----------------------------------------------------------------SELECTION-SCREEN BEGIN OF BLOCK ____ SELECT-OPTIONS: SELECTION-SCREEN END OF BLOCK ___49 * INITIALIZATION : 启动程序开始执行, 如 SELECT-OPTION 及 PARAMETER *---------------------------------------------------------------INITIALIZATION. INCLUDE ____. * AT START SELECTION : 输入结束后启动的区块, 如按下&F8& *--------------------------------------------------------------START-OF-SELECTION. SET PF-STATUS ____. “ 指定报表执行时所用的 GUI-STATUS 名称 PERFORM PERFORM PERFORM PERFORM READ_DATA. PROCESS_DATA. PRINT_DATA. PRINT_SUMMARY.* AT USER Commaand : 执行在 GUI-STATUS 中自定的命令 *-------------------------------------------------------------------AT USER_COMMAND. * AT LINE SELECTION : 由在报表中按下&F2&或 Double-Click 启动 *-------------------------------------------------------------------AT LINE-SELECTION. * TOP OF PGAE : 每页开始打印时执行, 用于定义报表表头 *-------------------------------------------------------------------* END OF PAGE : 报表打印完最后一页后启动 *--------------------------------------------------------------------END-OF-PAGE * END OF SELECTION : 在结束打印数据后启动, 如可用来印出 USER 输入的条 件 *--------------------------------------------------------------------END-OF-SELECTION. INCLUDE _____ * FORM : 撰写程序中所使用到的子程序 *------------------------------------------------------------* Read Data : 自 TABLE 读取数据放入 Internal Table *------------------------------------------------------------50 FORM READ_DATA. SELECT * FROM ______ INTO _______ WHERE _______. IF SY-SUBRC = 0. ENDIF. APPEND _____. ENDSELECT. ENDFORM. * Process Data : 处理 Internal Table 的数据, 如排序及汇总 *------------------------------------------------------------FORM PROCESS_DATA. ENDFORM. * Print Data : 依序输出 Internal Table 的数据 *------------------------------------------------------------FORM PRINT_DATA. ENDFORM. * Print Summary : 印出数值资料加总 *------------------------------------------------------------FORM PRINT_SUMMARY. ENDFORM. * Include Program : 列出所含入的其它程序 source code, 如子程序 *------------------------------------------------------------INCLUDE _____ INCLUDE _____ “ 增加 Internal Table 元素6.Write BDC ProgramBDC Program (Batch Data Communication Program) 是 ABAP/4 用来加载数据异动 SAP 数据库的方法,先将要输入的数据存在 BDC Table 中,使用 CALL TRANSACTION 指令呼叫 R/3 输入画面,将输入所需数据项自 BDC Table 中依序放入,最后送出按 键句柄,如 /11 表按下&F11&存盘,此方法用在自不同系统转入 R/3 系统之数据转换,51 (Data Migrarion),或者也可使用在 Drill-Down 报表的撰写方式中。6.1 Screen of Transaction Status当 user 使用 SAP R/3 来输入数据时,SAP R/3 使用 Transaction 来执行工作的执行, 每个 Transaction 都会包含一些不同的 Screen ,每个 Screen 被定义为一个程序名称 及一个 Screen Nmber,在执行 SAP R/3 时选择 “System”中的”Status”可看到如下的 画面:如图: Transaction Code 是 VA03,程序名称是 SAPMV45A, Screen Number 是 4006.2 BDC TableBDC Table StructureBDC Table 是一个 Structure,用来存放要放入输入画面的数据,包含有以下的字段:Field Name ProgramType Char(8)Description Program name of Transaction 52 Dynpro Dynbegin Fnam FvalChar(4) Char(1) Char(35) Char(80)Screen number of Transaction Indicator for new Screen Name of Database Field from Screen Value to Submit to Field可在程序开始之初宣告一个 Internal Table 使用 BDCDATA 的 Structure: DATA BEGIN OF INT_BDC OCCURS 0. INCLUDE STRUCTURE BDCDATA. DATA END OF INT_BDC. 如在以上的画面中要输入 VBAK-KUNNR 及 VBAK-NAME1 两个字段的内容,分别要填入 ‘’ 及 ‘台达电子’,其 BDC Table 内容如下:Program SAPMV45ADynpro 0300Dynbegin XFnamFvalVBAK-KUNNR VBAK-NAME1 BDC_OKCODE BDC_OKCODE 字段的值就是结束输入时所要按下的键盘句柄, 台达电子 /nn常用的 BDC Okcode:OKCODE /nn /00 /8 /11 %EX BACK DLT PICK SAVE Description Function Key nn Enter F8,Continue or Execute F11,Post Exit F3,Back Previous Screen Delete Double Click F11,Save存入 BDC Table 的资料53 首先我们需建立两个子程序,BDC_SCREEN 是来存入 Program,Dynpro 和 Dynbegin 三个字段,也就是输入画面的程序名称及 Screen Number,BDC_FIELD:用来存入 Fnam 及 Fval 两个字段,也就是输入画面所需填入的各个字段内容,程序内容如: * Add BDC Screen Field Data FORM BDC_SCREEN TABLES P_BDC STRUCTURE BDCDATA USING P_PROGRAM P_SCREEN. CLEAR P_BDC. P_BDC-PROGRAM = P_BDC-DYNPRO APPEND ENDFORM. * Add BDC Field Data FORM BDC_FIELD TABLES P_BDC STRUCTURE BDCDATA USING P_NAME P_VALUE. CLEAR P_BDC. CASE P_VALUE. WHEN ''. WHEN OTHERS. P_BDC-FNAM = P_NAME. P_BDC-FVAL = P_VALUE. APPEND P_BDC. ENDCASE. ENDFORM. P_BDC. P_PROGRAM. = P_SCREEN.P_BDC-DYNBEGIN = 'X'.接下来在程序中去呼叫这两个子程序来填入数据,程序叙述如下: PERFORM BDC_SCREEN TABLES INT_BDC USING 'SAPMV45A' '0300'. PERFORM BDC_FIELD TABLES INT_BDC: USING 'VBAK-KUNNR' ‘’, USING 'VBAK-NAME1' ‘台达电子’, 54 USING 'BDC_OKCODE' '/00'.& Save and end6.3 Call Transaction 指令将数据依序填入 BDC Table 后要写入 R/3 的 Database 时要使用 CALL TRANSACTION 指令,指令格式如下:CALLTRANSACTION WITH &tcode& USING &BDC Table& MODE &Display Mode&&Display Mode& 可分成: A E N 如: CALL Show all Screen Show only Screen with Error Show no ScreenTRANSACTION 'VA03' USING INT_BDC MODE 'E'.6.4 Example for BDC Program例如我们想经由 BDC Program 将 Sales Empolyee 的数据由 ASCII Text File 去更新 R/3 数据库 Sales Empolyee 的 Persolnal Data, 会有以下两个画面要输入:Program Name 是 SAPMP50A,Screen Number 1000,Transaction Code 是 PAL355 Program Name 是 SAPMP50A,Screen Number 2042,Transaction Code 是 PAL3在 Screen 1000 要填入的资料是 Description Personal Number Info Type Field Name RP50G-PERNR RP50G-CHOIL Value 242147 Personal Data在 Screen 2042 要填入的资料是 Description From Date To Date Last Name First Name Field Name P002-BEGDA P002-ENDDA P002-NACHN P002-VORNA Value 01/13//9999 Dora Cheng欲转入的 ASCII Text File n名是 empoly.txt,其格式为 Description Personal Number Info Type From Date To Date Last Name First Name 程序如下: Length 10 20 10 10 20 20 Position 1 11 31 41 61 81 Value 242147 Personal Data 01/13//9999 Dora Cheng* PROGRAM SOURCE HEADER* Program Name: ZTBDC00 * Description: Change Sales Empolyee Data Using BDC Program * Date/Author:
周庆日 * Table Update: * Special Logic: * Include: *--------------------------------------------------------------* MODIFICATION LOG *--------------------------------------------------------------56 * ChangeDate ProgrammerRequest Description * ========== ============= ============ ========================== *
Chou NEW PROGRAM *----------------------------------------------------------------------------* REPORT NAME*-----------------------------------------------------------------REPORT ZTBDC00 NO STANDARD PAGE HEADING MESSAGE-ID ZZ LINE-COUNT 60 LINE-SIZE 80.*DATA *---------------------------------------------------------------TABLES: RP50G,P002. DATA: BEGIN OF INT_BDC OCCURS 0. INCLUDE STRUCTURE BDCDATA. DATA: END OF INT_BDC. * Work Internal Table DATA: BEGIN OF IN_REC, PERNR CHOIL BEGDA LIKE RP50G-PERNR, LIKE RP50G-CHOIL, LIKE P002-BEGDA, P002-ENDDA, P002-NACHN,ENDDA LIKE NACHN LIKEVORNA LIKE P002-VORNA, END OF IN_REC. DATA: P_FILE(30) VALUE ‘empoly.txt’. “ASCII Text File Name * INITIALIZATION *---------------------------------------------------------------INITIALIZATION. * AT START SELECTION *--------------------------------------------------------------START-OF-SELECTION. PERFORM READ_DATA. PERFORM PROCESS_DATA. * END OF SELECTION *--------------------------------------------------------------------END-OF-SELECTION. PERFORM CLEAN_UP. * FORM *------------------------------------------------------------57 * Read Data OPEN ASCII Text File *------------------------------------------------------------FORM READ_DATA. OPEN DATASET P_FILE FOR INPUT IN TEXT MODE. IF SY-SUBRC NE 0. MESSAGE E999 WITH ‘Cannot Open ‘ ENDIF. ENDFORM. * Process Data *------------------------------------------------------------FORM PROCESS_DATA. DO. READ DATASET P_FILE INTO IN_REC. “Add Data To Internal Table IF SY-SUBRC NE 0. EXIT. ENDIF. PERFORM BUILD_BDC. “Add to BDC Table PERFORM SUBMIT_BDC. “Call Transaction Code To Change Data ENDDO. ENDFORM. P_FILE.*---------------------------------------------------* Add Data to BDC TableFORM BUILD_BDC. PERFORM BDC_SCREEN TABLES INT_BDC USING ‘SAPMP50A’ ‘1000’. PERFORM BDC_FIELD TABLES INT_BDC: USING ‘RP50G-PERNR’ IN_REC-PERNR, USING ‘RP50G-CHOIL’ IN_REC-CHOIL, USING ‘BDC_OKCODE’ ‘/00’. PERFORM BDC_SCREEN TABLES INT_BDC USING ‘SAPMP50A’ ‘2042’. PERFORM BDC_FIELD TABLES INT_BDC: USING ‘P0002-BEGDA’ IN_REC-BEGDA, USING ‘P0002-ENDDA’ IN_REC-ENDDA, USING ‘P0002-NACHN’ IN_REC-NACHN, USING ‘P0002-VORNA’ IN_REC-VORNA, USING ‘BDC_OKCODE’ ‘/11’. ENDFORM. *---------------------------------------------------------------* Call Transaction Code to Execute Change Data FORM SUBMIT_BDC. 58 CALL TRANSACTION ‘PAL3’ USING INT_BDC MODE ‘N’. REFRESH INT_BDC. “将 BDC Table 资料清除 ENDFORM. *-----------------------------------------------------------------* Close ASCII Text File FORM CLEAN_UP. CLOSE DATASET P_NAME. IF SY-SUBRC NE 0. MESSAGE E999 WITH ‘Cannot Close ‘ P_FILE. ENDIF. ENDFORM. *-----------------------------------------------------------------* Add BDC Screen Field Data *-------------------------------------------------------------------------------------------------FORM BDC_SCREEN TABLES P_BDC STRUCTURE BDCDATA USING P_PROGRAM P_SCREEN. CLEAR P_BDC. P_BDC-PROGRAM = P_BDC-DYNPRO APPEND ENDFORM. * Add BDC Field Data *---------------------------------------------------------------------------------------------FORM BDC_FIELD TABLES P_BDC STRUCTURE BDCDATA USING P_NAME P_VALUE. CLEAR P_BDC. CASE P_VALUE. WHEN ''. WHEN OTHERS. P_BDC-FNAM = P_NAME. P_BDC-FVAL = P_VALUE. APPEND P_BDC. ENDCASE. ENDFORM. 59 P_BDC. P_PROGRAM. = P_SCREEN.P_BDC-DYNBEGIN = 'X'. 7.OLE AutomationOLE(Object Linking and Embendding)是由 Microsoft 所制定的标准,可以让一个程序 经由此去整合另一程序的对象(Object),OLE Automation 是其中的一部分,经由既定 的语法格式去产生连结的对象数据,可以分成 Objects of Application、Call its Methods 和 Set and Get Object Properties。Using OLE Automation from ABAP/4 Program在 ABAP/4 中提供了许多的 OLE Automation 接口,让 ABAP/4 程序可经由接口去整合 其它应用软件(如 WORD、EXCEL 等)至 R/3 系统中,要知道有那些的接口可使用,在 WorkBench 中选择 Development-&Programming Environ-&OLE2-&OLE2 Object Browser 中去查询,至于更详尽的数据则需参考 Microsoft 发行的 OLE 2.0 Reference 或 MSDN 相关的资料。。Object of Application要使用 OLE Automation 之前需在 ABAP/4 程序中先产生对象,指令是 CREATE OBJECT &对象名称& &对象函式库& 如要建立一个 EXCEL 5.0 的对象名称 application: INCLUDE OLE2INCL. DATA : APPLICATION TYPE OLE2_OBJECT. CREATE OBJECT APPLICATION ‘Excel.application’.Object Properties对象产生后就可以设定其属性(Property)了,指令是 60 SET PROPERTY OF &对象名称& &属性& = &Value& 如设定对象 APPLICATION 可在屏幕上显示: SET PROPERTY OF APPLICATION ‘Visible’ = 1. 如果想获得目前对象属性的值,指令如下: DATA: VISIBLE TYPE I. GET PROPERTY OF APPLICATION ‘Visible’ = VISIBLE.Calling Method指令格式: CALL METHOD OF &对象名称& &Method& = &Value& 如要存放 R/3 的数据至 EXCEL 的存格(CELL)中,在 ABAP/4 的指令如下: INCLUDE OLE2INCL. DATA: APPLICATION WORKBOOK SHEET CELLS TYPE OLE2_OBJECT, TYPE OLE2_OBJECT, TYPE OLE2_OBJECT, TYPE OLE2_OBJECT.CREATE OBJECT APPLICATION ‘Excel.application’. SET PROPERTY OF APPLICATION ‘Visible’ = 1. * 宣告一 EXCEL 工作底槁档(WORKBOOK) CALL METHOD OF APPLICATION ‘Workbooks’ = WORKBOOK. * 增加一新的工作表(SHEET),编号是 1 号 CALL METHOD OF WORKBOOK ‘Add’. CALL METHOD OF APPLICATION ‘Worksheets’ = SHEET EXPORTING #1 = 1. * 设定此工作表开启使用 CALL METHOD OF SHEET ‘Activate’.61 Free Object对象使用完后必须自 Memory 中释放,指令是 FREE OBJECT &物件&如: FREE OBJECT APPLICATION. 将对象 APPLICATION 自 Memory 释放Using OLE to Add Data以要将 KNA1(Customer General Data)中的资料存入 EXCEL 的存格(CELL)为例: FORM FILL_SHEET. DATA: ROW_MAX TYPE I VALUE 256, ROWS INDEX TYPE I VALUE 1. TYPE I.FIELD-SYMBOLS: &NAME&. SELECT * FROM KNA1. ROWS = ROWS + 1. “至第 ROWS 列 INDEX DO = ROW_MAX * ( ROWS - 1 ) + 1. 10 TIMES. “如要每一列放入 10 个存格的数据 ASSIGN COMPONENT SY-INDEX OF STRUCTURE KNA1 TO &NAME&. CALL METHOD OF SHEET ‘Cells’ = CELLS EXPORTING #1 = INDEX. SET PROPERTY OF CELLS ADD ENDDO. ENDSELECT. 1 TO INDEX. ‘Value’ = &NAME&.完整的程序REPORT EXCEL. INCLUDE OLE2INCL. DATA: APPLICATION WORKBOOK TYPE OLE2_OBJECT, TYPE OLE2_OBJECT, 62 SHEET CELLSTYPE OLE2_OBJECT, TYPE OLE2_OBJECT.CREATE OBJECT APPLICATION ‘Excel.application’. SET PROPERTY OF APPLICATION ‘Visible’ = 1. * 宣告一 EXCEL 工作底槁档(WORKBOOK) CALL METHOD OF APPLICATION ‘Workbooks’ = WORKBOOK. * 增加一新的工作表(SHEET),编号是 1 号 CALL METHOD OF WORKBOOK ‘Add’. CALL METHOD OF APPLICATION ‘Worksheets’ = SHEET EXPORTING #1 = 1. * 设定此工作表开启使用 CALL METHOD OF SHEET ‘Activate’. PERFORM FILL_SHEET. FREE APPLICATION. *---------------------------------------------------------------------------------------------------------------FORM FILL_SHEET. DATA: ROW_MAX TYPE I VALUE 256, ROWS INDEX TYPE I VALUE 1. TYPE I.FIELD-SYMBOLS: &NAME&. SELECT * FROM KNA1. ROWS = ROWS + 1. “至第 ROWS 列 INDEX DO = ROW_MAX * ( ROWS - 1 ) + 1. 10 TIMES. “如要每一列放入 10 个存格的数据 ASSIGN COMPONENT SY-INDEX OF STRUCTURE KNA1 TO &NAME&. CALL METHOD OF SHEET ‘Cells’ = CELLS EXPORTING #1 = INDEX. SET PROPERTY OF CELLS ADD 1 TO INDEX. 63 ‘Value’ = &NAME&. ENDDO. ENDSELECT.64
初学ABAP的一点教程1_IT/计算机_专业资料。初学ABAP的一点教程1初学ABAP 的一点教程(1) 2009 年 02 月 18 日 星期三 10:10 在 SAP 中,每一个功能基本上...4.选择开发类 开发类:用于同一系统中各个程序,如果不属任一类,可使用$TMP 第4页 ABAP/4入门教程 5.撰写源代码 REPORT之后接的是程序名称,WRITE是显示的意思,...SAP入门教程_Chinese Version_计算机软件及应用_IT/计算机_专业资料。SAP 概要...最好的方法是为报表指定一个保留期限或打印后直 接删除,尤其对那些大的报表...ed2k://|file|ABAP_PA.RAR|BC61A41E5F78A55EF764|h=...六个视频是一个整体,下载好了全部解压后是完整的, ed2k://|file|CRM_PA1....初学ABAP 的一点教程(3) 2009 年 02 月 18 日 星期三 10:11 5. DATABASE CURSOR Database Cursor 是一个资料库暂存区, 将经 SELECT 指令读取的记录存放至...abap基础经典教程76页_IT/计算机_专业资料。abap入门最经典的教程,通俗易懂!1. ABAP/4 Introduction Introduction ABAP/4(Advanced Business Application Programming)...如果是自定义的 ABAP 程序来导入主数据就行不通了。同样做了一个 FI Account...设置好后点击 执行批导入 数据导入成功 至此,ECATT 的批导入处理教程介绍完毕。...一个很好的ABAP教程 64页 2下载券 ABAP_培训教程 247页 2下载券 abap smartforms表单设计... 56页 免费 ABAP初级技术培训教材-V... 234页 1下载券 ABAP教程...初学ABAP的一点教程2初学ABAP的一点教程2隐藏&& 初学ABAP 的一点教程(2) 2009 年 02 月 18 日 星期三 10:10 屏幕输入命令 在 ABAP/4 中要从屏幕输入变量...abap简明教程_IT/计算机_专业资料。abap简明教程abap 介绍 ABAP 是一种高级企业应用编程语言(Advanced Business Application Progra mming),起源于 20 世纪 80 年代。...
All rights reserved Powered by
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。

我要回帖

更多关于 abap基本语法 的文章

 

随机推荐