【ABAP学习笔记】

ABAP学习笔记

记录实习培训的学习记录


文章目录

  • ABAP学习笔记
  • 前言
  • 一、ABAP是什么?
  • 二、使用步骤
    • 1.先建立链接:
    • 2.输入应用服务器 IP 地址,实例编号,系统标识等信息
  • 正文
    • day1
      • 1.常用的指令功能键
      • 2.数据类型
      • 3.数据对象
      • 4.数据输出
      • 5.数据处理
      • 6.数据处理(字符串)
      • 7.流程控制
    • day2
      • 1.内表定义
      • 2.内表赋值
    • day3
      • 1.SQL
      • 2.OpenSQL
      • 3.NativeSQL
    • day4
      • 1.Alv
      • 2.Smartforms


前言

一、ABAP是什么?

SAP是一套ERP系统,SAP( Systems Applications and Products in Data Processing) 是一种企业管理软件,SAP使用的程序语言就是用ABAP,ABAP是种先进经营应用编程语言(Advanced Business Application ProgrammingLanguage)。ABAP/4是SAP自己的第四代编程语言。从4.0版本开始,它简称为ABAP;是经技术改进的编程语言,主要添加了新特性以成为面向对象的语言。ABAP/4支持封装性和继承性,封装性是面向对象的基础,而继承性是建立在封装性基础上的重要特性。它适合生成报表,支持对数据库的操作,如:Sqlserver,Oracle,DB2等主流数据库系统。

二、使用步骤

1.先建立链接:

【ABAP学习笔记】_第1张图片

2.输入应用服务器 IP 地址,实例编号,系统标识等信息

【ABAP学习笔记】_第2张图片


正文

day1

1.常用的指令功能键

常用的T-Code:
se21——开发类的建立
se80——ABAP工作台
se38——程序建立过程
se11——dictionary 可以查看到Tcode的底表和相关自建表
se37——function 封装相关的功能信息,达到代码功能的复用;RFC接口可 以和第三方平台进行数据交互
请求传送 se01 se09 se10

重要编辑功能键
在SE38 屏右下角,点“optins ”图标,然后选“代码完成”,在右侧
窗最下面一行选中“建议文本中的非关键字”,一路确认。
快速调整字体大小 Ctrl + 鼠标滚轮
剪切一行 Ctrl + Shift + X
删除一行 Ctrl + Shift + L
复制一行 Ctrl + Shift + T
转成小写 Ctrl + L
转成大写 Ctrl + U
大小写相互转换 Ctrl + K
取消 Ctrl + Z
重做 Ctrl + Y
原地复制一行 Ctrl + D

2.数据类型

常用预定义数据类型
【ABAP学习笔记】_第3张图片
1.默认的定义数据类型是CHAR。
2.取值的时候C型默认从左取,N型从右取,超过定义长度则截断。
3.C类型,可以赋值数值,也可以赋值字符,还可以混合,不过取值时如果是数值类
型靠右取值。
4.日期和时间类型的变量可进行加减乘除运算。
5.P类型.小数点要使用DECIMAL声明

自定义数据类型
定义数据类型——TYPES
• 在程序中用types声明局部数据类型
• 语法格式与变量类似
• 用Types定义的类型在程序中用于声明常量或者变量
• Types定义的是类型,不是变量,所以不能直接赋值
• ABAP数据类型可以是预定义数据类型,可以是数据字典里的全局数据类型,或者用户在程序中自定义的数据类型。
eg:
【ABAP学习笔记】_第4张图片

3.数据对象

变量
变量定义包含name, length, type等,语法如下:
DATA < name> [< length>] type < type>[ value < value>] [ decimal < decimals>]
其中: [] 里的内容表示可选项。<>表示名称
< name>: 变量名称, 最长30个字符, 不可含有 + . , : ( ) 等字符
< length>长度,要用圆括号括起来 如 LINE(20) TYPE C.
< type>:数据类型
< value>: 初始值
< decimals>: 小数位
【ABAP学习笔记】_第5张图片
变量定义也可以用关键字LIKE
DATA < name> [< length>] like< object>|< type>[ value
< value>] [ decimal < decimals>]
在这里插入图片描述

• TYPE 与LIKE的区别:
LIKE 用在已有值的数据类型, 如系统变量, 而TYPE则是用在
定义数据类型。

常量

常量定义使用CONSTANTS
CONSTANTS<常量名>[<长度> ] TYPE <数据类型> VALUE <默认值>
• 常量值一旦被定义,即被长期保存在内存,其值无法改变
在这里插入图片描述
系统变量

以下是常用的系统变量:
SY-SUBRC : 系统执行某指令后,表示执行成功与否的变量,‘0’ 表示成功
SY-UNAME: 当前使用者登入SAP的USERNAME;
SY-DATUM: 当前系统日期;
SY-UZEIT: 当前系统时间;
SY-TCODE: 当前执行程序的Transaction code
SY-INDEX : 当前LOOP循环过的次数
SY-TABIX: 当前处理的是internal table 的第几笔
SY-MANDT: CLIENT(客户端编号) NUMBER
SY-VLINE: 画竖线
SY-ULINE: 画横线

结构体
定义:
• 有结构的变量
• 程序中用DATA定义的局部变量
DATA: BEGIN OF < name>
< field1>……
< field2>……
END OF< name>.
【ABAP学习笔记】_第6张图片
赋值:
• 可对结构体直接赋值
• 相同结构体之间可以使用等号来实现数据的复制
• WRITE Structure Name可输出所有字段,或使用< Structure>-< field name>输出指定字段
【ABAP学习笔记】_第7张图片

• 相同结构体之间使用Move……To……进行赋值;
有差异的结构体,可使用MOVE-CORRESSPONDING匹配及赋值相同的字段
【ABAP学习笔记】_第8张图片
继承:
• 参考已存在的结构体创建一个属性相同的新结构体
• 可在新结构体中增加字段
• 定义语句:INCLUDE STRUCTURE
【ABAP学习笔记】_第9张图片

4.数据输出

基本输出:
• 使用Write语句进行数据对象的输出
• 可在输出时控制对象的长度、输出位置及格式等
属性的控制
• 可同时输出多个数据对象
• 不同对象可通过反斜杠“/”换行输出
Write AT [/] [< pos>] [(< len>)] 资料项
/ : 换行
pos : 屏幕X轴坐标
(len): 显示输出的长度
【ABAP学习笔记】_第10张图片
• 产生 n 个空白行
SKIP [< n>]

颜色输出:
语法:
FORMAT [COLOR {{{color [ON]}|OFF}|{= col}}] "使用颜色
[INTENSIFIED [{ON|OFF}|{= flag}]] "背景颜色
[INVERSE [{ON|OFF}|{= flag}]] "字体颜色
【ABAP学习笔记】_第11张图片
练习代码:
DATA col TYPE i VALUE 0.
DO 8 TIMES.
col = sy-index - 1.
FORMAT COLOR = col.
WRITE: / col COLOR OFF,
‘INTENSIFIED ON’ INTENSIFIED ON,
‘INTENSIFIED OFF’ INTENSIFIED OFF,
‘INVERSE ON’ INVERSE ON.
ENDDO.

5.数据处理

赋值
1.MOVE < F1> TO < F2>
将F1的值存至变量 F2 中,F1与F2可以是不同类
型的变量,但有一定限制
【ABAP学习笔记】_第12张图片
2.WRITE < value> TO < field>.带有格式的赋值
【ABAP学习笔记】_第13张图片
•这里的WRITE用于赋值,不是用于输出

偏移

在源字段中取偏移量赋值给目标变量:
MOVE [+<偏移量>][(<取数位>)] TO [+<偏移量>][(<取数位>)
WRITE [+<偏移量>][(<取数位>)] TO [+<偏移量>][(<取数位>)
[+<偏移量>][(<取数位>) = + [+<偏移量>][(<取数位>)]

【ABAP学习笔记】_第14张图片
用于结构体的赋值,将Strings1中的field组件的数据复制至String2中, 仅复制相同名称的字段:
MOVE –CORRESPONDING < Strings1> TO < String2>.
【ABAP学习笔记】_第15张图片
指针对象,通过语句FIELD-SYMBOLS加上将括号“<>”来定义。
FIELD-SYMBOLS < fs>.
ASSIGN < value> TO < field>.
• 可以不指定参考类型,用语句ASSIGN来分配给它变量.
• < FS>并不是变量,存放的是变量的地址,而非变量本身。
• 如果修改了field symbol的值,则相应的变量的值也随之更改。

类型转换

• 在不同类型的数据对象之间赋值,会自动进行类型的转换;
• 转换过程遵照固定的规则,如C类型数据赋值给N类型,只有数字字符被传递,其他忽略;
• C不能直接赋值给I,需要C→N→I;
• 可以使用MOVE TO或WRITE TO语句。
【ABAP学习笔记】_第16张图片
算数运算符

算术运算符号:
*乘
/ 除 + 加 - 减
DIV 整数除法
MOD 余数除法

• 运算符与变量之间必须有空格。

比较逻辑运算符

比较运算符:
= 或 EQ : 等于
<> 或 >< 或 NE: 不等于
< 或 LT: 小于
<= 或 LE: 小于等于
GT 或 >: 大于
= 或 GE : 大于等于

逻辑运算符:
AND: 且
OR : 或
NOT : 非

算术运算函数
【ABAP学习笔记】_第17张图片

6.数据处理(字符串)

字符串移位

将字符串整体或者子串进行位移:
SHIFT < c> [BY < n> PLACES] [< modes>]
< modes> :
(1).空白, 字符串往左移一位
(2).LEFT, 字符串往左移 n 位
(3).RIGHT, 字符串往右移 n 位
【ABAP学习笔记】_第18张图片
指定字符串c从子串c1进行位移:
SHIFT c UP TO c1
执行结果返回系统参数SY-SUBRC
执行成功,返回0,不匹配,返回4

移除字符串c左边/右边的子字符串c1:
SHIFT c LEFT/RIGHT DELETING
LEADING/ TRAILING c1
执行结果返回系统参数SY-SUBRC
执行成功,返回0,不匹配,返回4

替换字符串

REPLACE < string1> WITH < string2> INTO < c>
将字符串 中的 < string1> 以 < string2> 来取代
【ABAP学习笔记】_第19张图片
字符串转换

TRANSLATE < c> TO UPPER/LOWER CASE.
将全部字符转成大写/小写
【ABAP学习笔记】_第20张图片
寻找字符串

从字符串f/表itab中搜索字符串g
SEARCH f/itabFOR g
…ABBREVIATED
从指定字符串中/内表中按顺序/逐行搜索相匹配字符串,
搜索单词第一个需与字符串中包含的单词第一个匹配
【ABAP学习笔记】_第21张图片
…STARTING AT n1/line1
从字符串n1个字符/内表中具体某行开始搜索匹配字符串
…ENDING AT n2/line2
搜索到字符串第n2个字符止/最大范围到内表中具体某行
…AND MARK:
从指定字符串/内表中模糊搜索相匹配字符串
【ABAP学习笔记】_第22张图片

• 会回存至两个变数,SY-SUBRC 和 SY-FDPOS:
若找到则 SY-SUBRC 为 0,SY-FDPOS 存开始位置
若找不到则 SY-SUBRC为 4, SY-FDPOS为 0
• 对于一些特殊符号,如“ * ”、“@”、“.”等,需要在其两
边加上句号作为修饰。如某字符串为"AAABBB",查找符号""
的位置
• 若内表有多行,那么字符串查找位置默认为从某行数据第一
位开始

字符串的合并

将多个字符串合并成一个字符串:
CONCATENATE f1…fn INTO g [SEPARATED BY h]
SPARATED BY表示在连接字符串中加入分隔符号
【ABAP学习笔记】_第23张图片
• SPARATED BY表示在连接字符串中加入分隔符号

字符串的拆分

将一个字符串拆分并赋值给多个变量:
SPLIT f AT g INTO h1…hn
将一个字符串拆分并分配给一个内表:
SPLIT f AT g INTO TABLE itab
【ABAP学习笔记】_第24张图片
去除字符串的空格

去除字符串的空格:
CONDENSE c
•字符串前置空格被删除
•NO-GAPS——前置空格以及中间所有空格被删除
【ABAP学习笔记】_第25张图片

7.流程控制

条件语句
IF语句:
IF < condition1>.
< statement block>.
ELSEIF < condition2>.
< statement block>.
ELSE.
< statement block>
ENDIF.
【ABAP学习笔记】_第26张图片
CASE语句:
CASE < f>.
WHEN < f1>.
< statement block>.
WHEN < f2>.
< statement block>.
WHEN …
WHEN OTHERS.
< statement block>.
ENDCASE.
【ABAP学习笔记】_第27张图片
循环语句
(计数循环)使用DO指定循环次数:
DO [< n> TIMES]
< statement block>
ENDDO.
在这里插入图片描述
• n:可以是数字或者变量,如果n是0或者负数,系统
不执行该循环
• TIMES:循环次数
•使用DO语句时要避免死循环,如果不使用TIMES选项,则在语句块中至少包含一个EXIT、STOP语句,以使系统能退出循环
•系统变量SY-INDEX记录循环的次数
• DO语句内部还可以实现多层嵌套,为了保证程序可读性,建议嵌套最多不要超过6层

(条件循环)使用WHILE指定循环条件:
WHILE < condition>
< statement block>
ENDWHILE.
满足条件< condition>时候执行,不满足,退出
【ABAP学习笔记】_第28张图片
LOOP循环常用于实现内表数据的循环读取和操作
LOOP AT ITAB.
WRITE: ITAB.
ENDLOOP.

内表是仅在程序运行过程中存在的表,内表用来存放多条相同结构的数据,可以对其插入,修改或者删除行操作。

循环控制语句【ABAP学习笔记】_第29张图片

day2

1.内表定义

概念
内表是内存中建立的一个临时表,你可以在程序运行时对表中的数据进行,插入,修改,删除等操作,程序跑完了,就会被释放
分类
1.Standard:标准表
2.Sorted:排序表
3.Hashed:哈希表,一般用的比较少

工作区:内表按照行进行访问,必须使用某个区域作为与表格互相传输的接口。
• 从内表中读取数据时,已定址的行内容覆盖工作区的内容。讲数据写入内表时,必须首先在工作区中输入数据。

定义
TYPES自定义的表类型来定义内表
TYPES < t> TYPE < type> OCCURS < n>
TYPES < T> TYPE TABLE OF < type>
【ABAP学习笔记】_第30张图片
DATA直接定义内表:
DATA: BEGIN OF OCCURS
……
END OF itab.
【ABAP学习笔记】_第31张图片

参照内表或数据库表结构定义内表,内表结构与所参照数据库表完全相同:
DATA < f> LIKE <内表或数据库表> OCCURS n WITH HEADER LINE
在这里插入图片描述
• WITH参数指定是否带工作区
使用INCLUDE STRUCTURE包括已存在的结构体的所有字段
【ABAP学习笔记】_第32张图片
获取
通过DESCRIBE获得内表的行
DESCRIBE TABLE < itab> LINES n
【ABAP学习笔记】_第33张图片

2.内表赋值

增加数据
INSERT可以按内表的具体字段向表中插入一行
或者多行数据:
INSERT [wa INTO|INITIAL LINE INTO] itab
[INDEX idx].
INSERT [wa INTO|INITIAL LINE INTO] TABLE
itab.
INSERT LINES OF itab1 [FROM idx] [TO idx2]
INTO itab2 [INDEX idx3].
【ABAP学习笔记】_第34张图片
增加内表
要增加内表,既可逐行添加数据,也可复制另一个表格的内容。要逐行填充内表,
可以使用APPEND、 COLLECT或 INSERT 语句。

  1. 逐行填充内表
    1.1 要将内表仅用于存储数据,出于性能方面的考虑,建议使用 APPEND。
    1.2 要计算数字字段之和或要确保内表中没有出现重复条目,请使用 COLLECT
    语句。
    1.3 要在内表现有行之前插入新行,请使用INSERT语句。
    语法:
    APPEND [< wa> TO|INITIAL LINE TO] < itab>.
    COLLECT [< wa> INTO] < itab>.
    INSERT [< wa> INTO|INITIAL LINE INTO] < itab> [INDEX < idx>].
  2. 将内表内容复制到另一个内表中
    2.1 要将内表行附加到另一个内表中,请使用APPEND语句。
    2.2 要将内表行插入另一个内表中,请使用INSERT语句。
    2.3 要将内表条目内容复制到另一个内表中,并且覆盖该目标表格,请使用
    MOVE语句。
    语法:
    附加内表行:
    APPEND LINES OF < itab1> [FROM < n1>] [TO ] TO < itab2>.
    插入内表:
    INSERT LINES OF < itab1> [FROM < n1>] [TO ]
    INTO < itab2> [INDEX < idx>].
    复制内表:
    MOVE < itab1> TO < itab2>.
    < itab2> = < itab1>.
  3. 通过OPEN SQL将数据表中的数据按条件查询后放入内表中,对于OPEN SQL
    的具体用法,将在后面介绍
    SELECT … INTO TABLE < itab>
    SELECT … APPENDING TABLE < itab>

更改数据
MODIFY(直接修改内表数据)按内表位置或者具体内表字段值相等条件修改内表数据:
MODIFY itab [FROM wa] [INDEX idx]
[TRANSPORTING f1…fn] WHERE cond.
【ABAP学习笔记】_第35张图片
删除数据
DELETE(删除内表数据) :
DELETE TABLE itab WITH TABLE KEY
k1=v1…kn=vn.
按具体值删除
DELETE TABLE itab [FROM wa].
参照其它内表值删除
DELETE itab INDEX idx.
删除具体行数据
DELETE itab FROM idx1 TO idx2.
删除具体行数范围间数据
DELETE ADJACENT DUPLICATES FROM itab.
删除重复数据,执行此条件前必须先排序
【ABAP学习笔记】_第36张图片
读取数据
READ依据具体行数或字段值等条件读取某一内表的数据:
READ TABLE itab FROM wa.
READ TABLE itab WITH [TABLE] KEY
k1=v1…kn=vn [BINARY SEARCH].
READ TABLE itab INDEX i.
【ABAP学习笔记】_第37张图片
• 使用READ操作的表必须得HEADER LINE作为查找出的数据存储窗口
• BINARY SEARCH可以提高内表数据查找的速度,但是使用前必须先对内表进行排序

LOOP循环常用于实现内表数据的循环读取
和操作
LOOP AT ITAB.
WRITE: ITAB.
ENDLOOP.
【ABAP学习笔记】_第38张图片
排序与汇总
对内表进行排序,可以指定具体的排序字段、
排序方式(升/降),语法如下:
SORT itab [BY f2 f2…fn]
[ASCENDING/DESCENDING]
• < f2>:为指定的字段
• 递减(DESCENDING)和递增(ASCENDING)
【ABAP学习笔记】_第39张图片
将内表中相同的字段合并,若有类型为I的字段,则将其值加总:
COLLECT [wa INTO] itab.
• < f2>:为指定的字段
• 递减(DESCENDING)和递增(ASCENDING)
【ABAP学习笔记】_第40张图片

day3

1.SQL

SQL( Structured Query Language )
• 结构化查询语言
• 用于定义、创建、读取数据库表数据

Native SQL(本地SQL)
• 每种关系型数据库都有其对应的 SQL,是数据库相关的
• 不同的SAP 系统可能使用各种不同的数据库,使用本地SQL 的 ABAP 程序无法适应所
有的 SAP 系统
• 可直接对数据库表进行修改删除等,有一定安全风险
• 能实现一些OpenSQL无法实现的功能
Open SQL(开放SQL)
• SAP 为 ABAP 定义的数据库无关的SQL 标准
• 在ABAP程序运行时由系统动态的转化成当前数据库使用的本地SQL
• 在编写程序时不需要考虑SAP 系统使用的数据库差异

2.OpenSQL

• 对数据库主要操作语法包括:
SELECT\UPDATE\INSERT\DELETE\MODIFY
• 执行状态通过系统变量SY-SUBRC表现
等于0,表示执行成功
不为0,表示执行失败

使用OpenSQL注意事项:

  1. 尽可能减少满足条件的数据条目数量
  2. 减少数据的传输量,以减少网络流量,有时宁愿一次多返回一些数据,也不要增加访问次数
  3. 减少访问的数据库表量
  4. 减少查询难度,可以通过整理选择标准来实现
  5. 减少数据库负载
  6. 避免在循环语句中,使用SELECT语句,而是通过FOR ALL ENTRIES IN 语
    句抽取数据到内表中
  7. inner join获取数据时,尽量不要用太多的表关联,特别是大表关联,关
    联顺序为:小表-大表
  8. 查询结果应该只需要自己关系的字段,尽量少用select *
  9. where 条件里面多用索引、主键,顺序也要遵循小表-大表
  10. 不要使用select end-select 语句,可以取出来后再处理
  11. 不要用<> ,这样会不使用索引,可以用> or < 来替代
  12. 不要用sort by进行排序,取出来后在内表中处理
    内表处理优化:
    ①.尽量少用多重循环
    ②.read时,可以先sort 然后用read binary search,会快很多
    ③.对内表做批量修改时,可以用modify transporting where 语句进行替
    换,而不用循环修改
  13. 内表求和,能够在sql层次上实现就用sql实现,不能实现的,在内表循
    环中用at end of之类的进行求和,collect直接求和在数据量很大时,效
    率会比较低。
  14. CPU的负载可以通过优化程序来改善,在程序中尽量使用诸如SUM(SQL
    语句)或者COLLECT(ABAP语句)。
  15. 用append lines of *** to ****,代替 loop at ***,append *** to
    ****,endloop.

SELECT语法(读取数据)

SELECT语法结构:
SELECT < result> FROM < dbtab>
INTO < target>
WHERE < condition>
GROUP BY < fields> ORDER BY < fields>

其中各关键字的属性描述如下:
SELECT < result>:具体的查询字段。
SELECT SINGLE:定义单行查询。
FROM < dbtab>:所查询的透明表。
INTO < target>:查询结果赋值对象,赋值到具体
表或结构体。
INTO (< f1>…< fn>):将查询结果赋值到具体字段。
INTO CORRESPONDING FILES OF < itab>:将查询
结果按字段匹配赋值给具体的内表或者结构体。
WHERE < condition>:查询条件。
GROUP BY < fileds>:分组查询条件。
ORDER BY < fields>:排序条件。
• WHERE中多个字段为查询条件时:表名和字段用“~”符号连接

多个表数据连接查询,可以用两种方法实现表连接:

  1. 在 ABAP 字典中创建视图,查询时用这个视图作为数据源
  2. 使用JOIN语句,跟平常数据库中用到的连接查询基本上相同
    ① INNER JOIN:查询结果包含两个连接表中彼此相对应的数据
    记录
    ② LEFT OUTER JOIN:查询结果集中包含左表中的所有数据记录,
    右表中仅查询出包含相对应的匹配条件的数据
    ③ FULL OUTER JOIN:包含左右表所有的记录
  3. 在一个表连接中可以连接三个甚至更多的表
  4. 关键字ON:连接条件
    【ABAP学习笔记】_第41张图片
    限制Open SQL获取数据条数:
    •使用 UP TO n ROWS语法来限制读取数据的条数,
    语法如下:
    SELECT * INTO … UP TO N ROWS.
    【ABAP学习笔记】_第42张图片
    使用PACKAGE SIZE N连续读取数据:
    •使用 UP TO n ROWS可读取前n条,但不能继续读取数据
    •使用使用PACKAGE SIZE N可连续读取数据,每次读取指定
    条数
    •必须应用于SELECT……ENDSELECT语句中
    【ABAP学习笔记】_第43张图片

常用标准函数
• COUNT():统计查询总数
• SUM():统计表中某个数值字段的总和
• AVG():统计表中某个数值字段的平均值
• MAX():统计表中某个字段的最大值
• MIN() :统计表中某个字段的最小值。

UPDATE语法(更新数据)

UPDATE实现对数据的更新操作,语法如下:
UPDATE < dbtab> SET f1…fn (WHERE < condition>).
UPDATE < dbtab> FROM TABLE < itab> (WHERE < condition>).
UPDATE < dbtab> FROM < wa>.
【ABAP学习笔记】_第44张图片
INSERT语法(新增数据)

INSERT语句用于对数据的新增操作,语法如下:
INSERT < dbtab> FROM TABLE < itab>.
INSERT < dbtab> FROM < wa>.
【ABAP学习笔记】_第45张图片
DELETE语法(删除数据)

DELETE 语句用于删除表中的数据,语法如下:
DELETE FROM < dbtab> WHERE < condition>.
DELETE FROM < dbtab>.
DELETE < dbtab> FROM TABLE < itab>.
【ABAP学习笔记】_第46张图片
MODIFY语法(修改数据)

MODIFY操作是用于修改数据库中的数据:
MODIFY < dbtab> FROM < wa>.
MODIFY < dbtab> FROM TABLE < itab>.
•如表中不存在符合条件的数据时会添加新数据
•MODIFY拥有 INSERT 和 UPDATE的操作动作
•通过MODIFY修改的数据效率比较低下

3.NativeSQL

使用Natie SQL:
• Open SQL存在局限
• 如Oracle字段名是区分大小写的,而在Oracle中是将字段都转为大写或小写以固定查询
• Open SQL无法实现此,需要使用NativeSQL
• Native SQL不能直接向内表直接传递所有值,需要通过调用SubRouting方式进行APPEND操作
•查询字段和条件字段都要以逗号分开
•查询条件前需要加上冒号
•SQL语句结尾不需要句号

day4

1.Alv

在R/3 4.6C之前ALV全称为ABAP List Viewer,在其后的版本中,已经正式更名为SAP List Viewer。ALV是SAP系统中心的列表标准,可以在ABAP程序中进行报表输出。除去列表的显示和少量交互功能之外,ALV还提供给系统用户多种其它丰富的交互功能。

1.Alv分类:salv和ooalv。
Salv就是我们正常使用的调用function的alv。Ooalv是面对对象的alv,在屏幕对象上画alv。
Ooalv参考网址:https://www.cnblogs.com/jiangzhengjun/p/4291373.html
2.Alv事件
Alv事件可以笼统的分为两种,一种是提供回调函数的事件,例如菜单栏的设置,表头的设置,用户点击事件的设置,这些都是提供了导入参数的。另一种是通过it_events传参进去。
2.1回调函数的事件
i_callback_pf_status_set菜单栏,最简单的。前面讲过se41复制和slvc(应该是叫这个错误了提醒我改)复制标准的菜单栏到目标程序。细节不讲了。
i_callback_top_of_page表头,测试放在下面了,这个有点问题。无法实现。
i_callback_user_command用户键盘事件。最经常用的,几乎所有alv展示后的处理都可以通过这个回调函数完成。
2.2 It_events事件
结构如下图所示,内表,包含两个字段name和form。系统预存了17个
【ABAP学习笔记】_第47张图片
【ABAP学习笔记】_第48张图片
这里包括了前文提到的三个回调函数,name分别是USER_COMMAND,TOP_OF_PAGE,PF_STATUS_SET,但是事件的form为空。
在参考资料之后,可以认为,it_events里面预存的事件name,可以认为是对应的form执行的时间。
17种event的name放在下面:CALLER_EXIT,USER_COMMAND,TOP_OF_PAGE,TOP_OF_COVERPAGE,END_OF_COVERPAGE,FOREIGN_TOP_OF_PAGE,FOREIGN_END_OF_PAGE,PF_STATUS_SET,LIST_MODIFY,TOP_OF_LIST,END_OF_PAGE,END_OF_LIST,AFTER_LINE_OUTPUT,BEFORE_LINE_OUTPUT,REPREP_SEL_MODIFY,SUBTOTAL_TEXT,GROUPLEVEL_CHANGE。
3.事件的使用
3.1菜单栏
3.2用户键盘事件
3.3表头(测试部分失败)
3.4新建event
3.5建立event

4.开发ALV的基本流程

1.定义一些数据结构,主要是用于存数和显示的内表和alv的一些参数变量。
2.制作屏幕(界面).
3.获取屏幕输入的数据,用该数据从数据库中获取所需的数据放到前面定义的内表中。
4.调用ALV生成函数。其中还要为ALV定义表结构,布局等信息,主要是layout和fieldcat。其中定义报表字段fieldcat的时候可以用子程序便捷的赋值。

4.1 声明变量

  • 数据变量(Data Area)定义
  • 声明类型组SLIS
    TYPE-POOLS: slis.
    DATA:
    fieldcat TYPE slis_t_fieldcat_alv, “字段清单内表
    fieldcat_ln LIKE LINE OF fieldcat,
    layout TYPE slis_layout_alv, “ALV格式
    sortcat TYPE slis_t_sortinfo_alv, “ALV排序字段清单内表
    sortcat_ln LIKE LINE OF sortcat,
    eventcat TYPE slis_t_event, “ALV事件
    eventcat_ln LIKE LINE OF eventcat.
    DATA: col_pos TYPE i.

4.2 定义内表

  • 定义要展示的数据的内表
    DATA: BEGIN OF ivbap OCCURS 0,
    vbeln LIKE vbap-vbeln,
    matnr LIKE vbap-matnr,
    matkl LIKE vbap-matkl,
    END OF ivbap.

4.3 读取数据

  • 获取数据
    SELECT vbeln posnr matnr matkl kwmeng vrkme
    INTO CORRESPONDING FIELDS OF TABLE ivbap
    FROM vbap
    WHERE vbeln NE space.

4.4 ALV格式控制

  • 字段目录是用来控制ALV显示的网格中每个字段的属性的,比如字段的顺序,对齐方式,可编辑状态,颜色,等等
    ADD 1 TO col_pos.fieldcat_ln-ref_tabname = ‘VBAP’.
    fieldcat_ln-fieldname = ‘VBELN’.
    fieldcat_ln-key = ‘X’.
    fieldcat_ln-do_sum = space.
    fieldcat_ln-col_pos = col_pos.
    fieldcat_ln-no_out = space.
    fieldcat_ln-qfieldname = space.
    fieldcat_ln-hotspot = ‘X’.
    APPEND fieldcat_ln TO fieldcat.

4.5 定义事件

  • 建立事件清单(Event Catalogs)
  • 需定义事件块,否则出错
    eventcat_ln-name = ‘TOP_OF_PAGE’.
    eventcat_ln-form = ‘PAGE_HEADER’.
    APPEND eventcat_ln TO eventcat.
    事件块:
    FORM PAGE_HEADER.
    ENDFORM.

4.6 调用ALV

  • ALV显示
    DATA: pgm LIKE sy-repid.
    pgm = sy-repid.
    CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
    EXPORTING
    i_callback_program = pgm*
    i_callback_pf_status_set = ‘SET_STATUS’
    i_callback_user_command = ‘USER_COMMAND’
    is_layout = layout
    it_fieldcat = fieldcat[]
    it_sort = sortcat[]
    i_save = ‘A’
    ”it_event = eventcat[]
    TABLES
    t_outtab = ivbap
    EXCEPTIONS
    program_error = 1
    OTHERS = 2.

4.7 用户事件

  • USER-COMMAND子例程
    FORM user_command USING ucomm LIKE sy-ucomm
    selfield TYPE slis_selfield.
    READ TABLE ivbap INDEX selfield-tabindex.
    CHECK sy-subrc = 0.
    CASE ucomm.
    WHEN ‘&IC1’.
    CASE selfield-sel_tab_field.
    WHEN ‘IVBAP-VBELN’.
    SET PARAMETER ID ‘AUN’ FIELD ivbap-vbeln.
    CALL TRANSACTION ‘VA03’ AND SKIP FIRST SCREEN.
    WHEN ‘IVBAP-MATNR’.
    SET PARAMETER ID ‘MAT’ FIELD ivbap-matnr.
    CALL TRANSACTION ‘MM03’ AND SKIP FIRST SCREEN.
    ENDCASE.
    ENDCASE.
    ENDFORM.
  • 设置工具栏
    FORM set_status USING rt_extab TYPE
    slis_t_extab.
    SET PF-STATUS ‘STANDARD’.
    ENDFORM. "set_status

2.Smartforms

你可能感兴趣的:(编辑器)