ABAP基础语法
1.数据类型及属性
类型 |
说明 |
C |
|
N |
0到9之间字符组成的数字字符串 |
D |
日期格式必须为 YYYYMMDD |
T |
格式为 24-hour的 HHMMSS |
I |
-2.147.483.648 to +2.147.483.647 |
F |
小数位最大可以到17位,即可精确到小数点后17位 |
P |
两个数字位压缩后才占一个字节,由于0-9的数字只需要4Bit位,所以一个字节实质上允许存储二位数字,这就是P数据类型为压缩数据类型的由来。并借用半个字节来存储小数点位置、正号、负号相关信息 |
X |
十六进制字符 0-9, A-F具体的范围为:00~FF 类型X是十六进制类型,可表示内存字节实际内容,使用两个十六制字符表示一个字节中所存储的内容。但直接打印输出时,输出的还是赋值时字面意义上的值,而不是Unicode解码后的字符 如果未在 DATA 语句中指定参数<length>,则创建长度为 1 注:如果值是字母,则一定要大写 |
语法示例:
DATA: number(16) TYPE p DECIMALS 14 VALUE '12345678901234567.89012345678901'.
"16 * 2 = 32表示了整个字面意义上允许的最大字面个数,而14表示的是字面上小数点后面允许的最大小数位,而不是指14个字节,只有这里定义时的16才表示16个字节
predefined ABAP types
Type |
Length |
Standard length |
Description |
b |
1 Byte |
1 byte integer (internal) |
|
c |
1 to 65,535 characters |
1 character |
Text field |
cursor |
as i |
as i |
Database cursor |
d |
8 characters |
Date field |
|
f |
8 bytes |
Floating point number |
|
i |
4 bytes |
4 byte integer |
|
n |
1 to 65,535 characters |
1 character |
Numeric text |
p |
1 to 16 bytes |
8 bytes |
Packed number |
string |
variable |
Text string |
|
s |
2 bytes |
2 byte integer (internal) |
|
t |
6 characters |
Time field |
|
x |
1 to 65,535 bytes |
1 byte |
Byte field(hexadecimal) |
xstring |
variable |
Byte string |
数据字典预置类型与ABAP类型对应关系。
数据字典预置类型 |
ABAP类型 |
运行长度 |
说明 |
ACCP |
N(6) |
6 |
会计计算周期 |
CHAR |
C(n) |
1-255 |
字符 |
CLNT |
C(3) |
3 |
集团,数据区域代码 |
CUKY |
C(5) |
5 |
货币代码 |
CURR(n,m) |
P((n+1)/2)DECIMALm |
42736 |
货币金额 |
DATS |
D(8) |
8 |
日期 |
DEC n,m |
P((n+1)/2)DECIMALm |
n(1-31)m(1-17) |
数值计算 |
FLTP |
F(8) |
18 |
浮点数 |
INT1 |
X(1)(类型b) |
3 |
单字节整形数 |
INT2 |
X(2)(类型s) |
5 |
双字节整形数 |
INT4 |
X(4)(类型i) |
10 |
四字节整形数 |
LANG |
C(1) |
内部1位外部2位 |
语言代码 |
LCHR |
C(n) |
256-最大值 |
长字符 |
LRAW |
X(n) |
256-最大值 |
长位字串 |
NUMC n |
N(n) |
1-255 |
数值文字 |
PREC |
X(2) |
16 |
精确度 |
QUAN n,m |
P((n+1)/2)DECIMALm |
42736 |
数量 |
RAW n |
X(n) |
1-255 |
位字串 |
TIMS |
T(6) |
6 |
时间 |
VARC n |
C(n) |
255-最大值 |
长字符(仅3.0前可用) |
STRING |
STRING |
1-最大值 |
字符串 |
RAWSTRING |
XSTRING |
1-最大值 |
位字符串 |
UNIT |
C(n) |
2~3 |
单位 |
SAP系统变量
SY-SUBRC: 系统执行某指令后,表示执行成功与否的变量,’0’ 表示成功
SY-DBCNT: 在open SQL语句中,表示执行影响到的数据条数
SY-DBLNT: 被处理过的记录的笔数
SY-UNAME: 当前使用者登入SAP的USERNAME;
SY-DATUM: 当前系统日期;
SY-UZEIT: 当前系统时间;
SY-TCODE: 当前执行程序的Transaction
code
SY-INDEX :
SY-TABIX:
SY-TMAXL: Internal table的总笔数
SY-SROWS: 屏幕总行数;
SY-SCOLS: 屏幕总列数;
SY-MANDT: 當前系統編號(CLIENT
NUMBER)
SY-VLINE: 画竖线
SY-ULINE: 画横线
SY-PAGNO: 当前页号
SY-LINSZ: 当前报表宽度
SY-LINCT: 当前报表长度
SPACE: 空字符串
SY-LSIND: 列表索引页
SY-LISTI: 上一个列表的索引
SY-LILLI: 绝对列表中选定行的行号
SY-CUROW: 屏幕上的行
SY-CUCOL: 光标列
SY-CPAGE: 列表的当前显示页
SY-STARO:真实行号
SY-LISEL: 选择行的内容,长度为255
SY-LINNO: 当前行
q 系统内部有一个专门存放系统变量的结构SYST,其中最常用的系统变量有:
SY-SUBRC: 系统执行某指令后,表示执行成功与否的变量,’0’
表示成功
SY-UNAME: 当前使用者登入SAP的USERNAME;
SY-DATUM: 当前系统日期;
SY-DATAR:如果屏幕上至少有一个输入字段的值被用户或其他数据传输所更改, 值为X。但如果没有修改,回车后的值是空。
SY-UZEIT: 当前系统时间;
SY-TCODE: 当前执行程序的Transaction code
SY-REPID: ABAP 程式名,目前的主程式
SY-DYNNR: 画面号
SY-CPROG: ABAP 程式名
SY-SYSID: R/3 系統,R/3 系統名稱
SY-UCOMM: PAI 驱动的功能代码,一般用来参照定义变量
SY-INDEX(DO) : 当前LOOP循环过的次数
SY-TABIX(LOOP READ): 当前处理的是internal table 的第几笔
sy-langu:记录登陆系统的语言。
|
2.数据与变量声明
l 变量以字母作为首字符,长度不超过30字节(SPACE是预定义字段constant with C)。
l 如果没有指定类型,默认使用类型C。
l LIKE参数,既可以参照内部字段,也可以参照数据库中的字段。只要在程序的一个地方中数据属性发生改变,其他使用LIKE参数定义的数据也发生改变。
l 透明表(还有其它数据词典中的类型,如结构)即可看作是一种类型,也可看作是对象,所以即可使用TYPE,也可以使用LIKE。
TYPES:定义数据类型
-
数据类型是纯粹的说明。
-
没有与数据类型相关联的内存。
-
数据类型描述数据对象的技术属性。
-
数据类型是数据对象的属性并与数据对象联系紧密。
DATA:声明数据对象(变量、常量)
-
数据对象是程序在运行时使用的物理单元。
-
每个数据对象都有分配给它的特定数据类型。
-
每个数据对象占据一些内存空间。
-
ABAP/4 根据数据对象的数据类型处理数据对象。
l TABLES: spfli.
DATA spfli TYPE spfli.
以上两个语句等价。即在定义内存变量时,可以将透明表当做结构体来使用
l CONSTANTS 利用<value>参数指定的初始值,在程序的执行期间不能更改。
DATA 语句 |
用于创建变量 |
CONSTANTS 语句 |
用于创建常量(必须赋值),数字常量有数据类型P与I,文本常量有C与N。 |
STATICS语句 |
用于创建变量,这些变量在程序运行期间一直存在,但仅在过程中可见 |
TABLES语句 |
用于创建表工作区 |
TYPES 语句 |
用于创建用户定义的数据类型 |
语法示例:
DATA : BEGIN OF address2,
street(20) TYPE c,
city(20) TYPE c,
END OF address2.
DATA obj4 TYPE STANDARD TABLE OF address2."这里使用的实质上是词典中的类型address2
DATA obj5 LIKE STANDARD TABLE OF address2."这里使用是的上面定义的变量address2
3.数据赋值
l Value参数赋予字段相应的初始值。
l WRITE
{source|(source_name)} TO destination.
The data objects source_name and destination must be character type and flat.
语法示例:
DATA: date_short TYPE c LENGTH 8,
date_long TYPE c LENGTH 10,
date_mask TYPE c LENGTH 8.
WRITE sy-datum TO:
date_short,
date_long,
date_mask DD/MM/YY.
WRITE ICON_OKAY AS ICON TO PUBU2. "给PUBU2按钮添加图标,并且在给按钮赋值之前,否则将会把文字替换。
l MOVE
source {TO|?TO} destination.
l destination1 = destination2 = ...
= destination = source.
l MOVE-CORRESPONDING struc1 TO struc2.
l UNPACK
source TO destination.
For source, the data type p of length 16 without decimal places is expected. The
data type of destination must be character-type and flat.
l READ LINE line_num FIELD VALUE num.
4.数据清除.
CLEAR dobj [ {WITH val
[IN {BYTE|CHARACTER} MODE] } 所有的space被var替代
| {WITH NULL} ]. 如果使用有表头行的内表,CLEAR 仅清除表格工作区域,CLEAR dobj[] 都清除
REFRESH itab.清除内表所有行
FREE dobj.”内存释放
5.字符串处理
l
l CONCATENATE
{dobj1 dobj2
...}|{LINES OF itab}
INTO result
[IN
{BYTE|CHARACTER} MODE]
[SEPARATED BY sep] ”用sep分割
l SPLIT
dobj AT sep INTO
{
{result1 result2 ...} | {TABLE result_tab} }
[IN
{BYTE|CHARACTER} MODE].
[RESPECTING
BLANKS].“对于c, d, n, t类型的字符串有一个RESPECTING BLANKS选项可使用,表示尾部空格也会保留。
l FIND
[{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF] pattern
IN [section_of]
dobj “pattern:{[SUBSTRING] sub_string} |
{REGEX regex}” sub_string in pattern is an empty string
or is of type c, d, n, or t and only contains empty characters, regex in pattern contains a regular expression that is
the same as the empty character string,
[IN {BYTE|CHARACTER} MODE]
[{RESPECTING|IGNORING} CASE]
[MATCH COUNT mcnt] “成功匹配次数
{ {[MATCH OFFSET moff] [MATCH LENGTH mlen]} ”最后一次整体匹配到的串(整体串,最外层分组,而不是指正则式最内最后一个分组)起始位置与长度
|[RESULTS result_tab|result_wa]}result_tab接收所有匹配结果,result_wa只能接收最后一次匹配结果
[SUBMATCHES s1 s2 ...]. 通常与前面的MATCH OFFSET/ LENGTH一起使用。只会接收使用括号进行分组的子组。如果变量s1 s2 ...比分组的数量多,则多余的变量被initial;如果变量s1 s2 ...比分组的数量少,则多余的分组将被忽略;且只存储第一次或最后一次匹配到的结果
l REPLACE
[{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF] pattern
IN [section_of]
dobj WITH new
[IN
{BYTE|CHARACTER} MODE]
[{RESPECTING|IGNORING}
CASE]
[REPLACEMENT COUNT
rcnt]
{ {[REPLACEMENT
OFFSET roff] [REPLACEMENT LENGTH rlen]}
| [RESULTS
result_tab|result_wa] }.
l
SHIFT dobj {BY
num PLACES} | {UP TO sub_string} “sub_string开始
[LEFT|RIGHT][CIRCULAR] ” CIRCULAR:将移出的字符串放在左边或者左边
{ {LEFT DELETING LEADING}|{RIGHT DELETING TRAILING} } pattern
执行结果返回给系统变量SY-SUBRC,若执行成功时,返回值为"0",倘若子串与原字符串不匹配,返回值为"4"。
l
CONDENSE text [NO-GAPS]. 如果是C类型只去掉前面的空格(因为是定长,即使后面空格去掉了,左对齐时后面会补上空格),如果是String类型,则后面空格也会被去掉;字符串中间的多个连续的空格使用一个空格替换(String类型也是这样);NO-GAPS:字符串中间的所有空格都也都会去除(String类型也是这样);空格去掉后会左对
l
CONVERT TEXT text INTO SORTABLE CODE hex. 数据对象文本(X)的内容被转换为可排序的字节序列,结果被分配给变量hex;数据对象文本保持不变,若hex是xstring类型,则其长度将自动调整。
l
TRANSLATE text {TO {UPPER|LOWER} CASE}
| {USING pattern}.
l
SEARCH
<c> FOR <str>.
语法示例:
DATA text TYPE string.
text = `Barbcbdbarb`.
TRANSLATE text USING 'rVcX'. ”BaVbXbdbaVb
TRANSLATE text TO UPPER CASE. ”BABVXBDBAVB
WRITE:/ text.
6.PARAMETERS语句
PARAMETERS
{para[(len)]}|{para [LENGTH len]}
[type_options]
[screen_options]
[value_options]
[ldb_options].
l type_options:
{ TYPE type [DECIMALS dec] } | { LIKE dobj } |{
LIKE (name)}.
TYPE type:参照某一类型对象定义PARAMETERS。
...DECIMALS dec:定义小数位,对输入参数自动格式化,该语法只对P类型有效(参数某一类型定义关键字TYPE)。
...LIKE dobj:參照某一字典对象定义PARAMETERS。
l screen_options:
{ {[OBLIGATORY|NO-DISPLAY] [VISIBLE LENGTH
vlen]}
|
{AS CHECKBOX [USER-COMMAND fcode]}
|
{RADIOBUTTON GROUP group [USER-COMMAND fcode]}
|
{AS LISTBOX VISIBLE LENGTH vlen [USER-COMMAND fcode]
[OBLIGATORY]}
}
[MODIF
ID modid].
...MEMORY ID pi:将PARAMETERS存储在SAP内存,参数名长度不能超过三位。 ...NO-DISPLAY:将PARAMETERS设置为隐藏,不会的屏幕上输出。
...OBLIGATORY:限制该PARAMETERS为必填,否则会提示输入。...AS CHECKBOX:创建CHECKBOX对象。
...RADIO BUTTON GROUP radi:创建(RADIO)单选框。...VISIBLE LENGTH
vlen:定义显示长度。
...USER-COMMAND ucom:为创建对象分配对象名,该值保存在内表中可供其它对象操作。 ...AS
LISTBOX VISIBLE LENGTH vlen:创建一个下拉框,并指定长度.
l
value_options
... [DEFAULT val]
[LOWER
CASE]
[MATCHCODE
OBJECT search_help]
[MEMORY
ID pid]
[VALUE
CHECK] ... . “若要使值表检查生效,则首先需要将此 Domain 引用到表字段,再对此表字段通过 按钮进行外键分配,并且外键一定是来自的值表的主键,最后使用 PARAMETERS 定义屏幕参数时要参照此表字段,
与AS CHECKBOX,
RADIOBUTTON, or NO-DISPLAY 不能同时使用...DEFAULT f:定义默认值。 ...LOWER
CASE:输入值中不允许输入小写字符,否则会自动转换为大写。
l
ldb_options
... FOR {TABLE|NODE}
node
[HELP-REQUEST]
[VALUE-REQUEST]
[AS
SEARCH PATTERN] ... .
... ON
<field>:该语法用于控制屏幕元素输入时的遇错处理,检查具体输入字段(SELECTION-OPTIONS或PARAMETERS)是否完整或正确,若输入有错或不满足条件,其它屏幕元素会变成灰色,不接受输入直到该字段输入正确为止。
...ON VALUE-REQUEST FOR <field low/high>:SELECT-OPTIONS按选择帮助<F4>键时触发该事件。
...ON HELP-REQUEST FOR <field low/high>:SELECTION-OPTIONS按选择帮助<F1>键时键发该事件。
LISTBOX下拉列表
FUNCTION ”F4IF_INT_TABLE_VALUE_REQUEST”
FUNCTION ”VRM_SET_VALUES”.
语法示例:
PARAMETERS: P1 RADIOBUTTON GROUP GRP1 DEFAULT 'X',
P2 RADIOBUTTON GROUP GRP1.
7.字段符号
FIELD-SYMBOLS
<fs> { typing
| STRUCTURE struc DEFAULT dobj }.
l
FIELD-SYMBOLS:<fs>.
l
FIELD-SYMBOLS <fs>
TYPE itab."将<fs>定义成了具体限定类型
8.字段的动态分配
ASSIGN
... TO <fs>:将某个内存区域分配给字段符号,这样字段符号就代表了该内存区域
l
ASSIGN name TO <fs>."结果是<fs>与name变量等同"静态分配:编译时就知道要分配的对象
l
ASSIGN (name) TO <fs>."结果是是<fs>的值为str变量值 "通过变量名动态访问变量
l
UNASSIGN:该语句是初始化<FS>字段符号,执行后字段符号将不再引用内存区域
l
CLEAR:与UNASSIGN不同的是,只有一个作用就是初始化它所指向的内存区域,而不是解除分
语法示例:
DATA: BEGIN OF line,
col1 TYPE i VALUE '11',
col2 TYPE i VALUE '22',
col3 TYPE i VALUE '33',
END OF line.
DATA comp(5) VALUE 'COL3'.
FIELD-SYMBOLS: <f1>, <f2>, <f3>.
ASSIGN line TO <f1>.
ASSIGN comp TO <f2>.
"还可以直接使用以下的语法访问其他程序中的变量
ASSIGN ('(ZJDEMO)SBOOK-FLDATE') TO <fs>.
"通过索引动态的访问结构成员
ASSIGN COMPONENT sy-index OF STRUCTURE <f1> TO <f3>.
"通过字段名动态的访问结构成员
ASSIGN COMPONENT <f2>OF STRUCTURE <f1> TO <f3>.
9.预置函数
...
func( arg ) ...
ADD 10 to int.
SUBSTRACT 10 from int.
MULTIPLY int by 10.
DIVIDE int by 10.
语法示例:
DATA: i1 TYPE I,i2 TYPE I,i3 TYPE I,
f1 TYPE p DECIMALS 1, f2 TYPE p VALUE '2.3' DECIMALS 1,f3 TYPE p DECIMALS 1,
word1 TYPE string VALUE 'ABCD',word2 TYPE string VALUE 'EFG',xstr TYPE XSTRING.
f1 = ( i1 + EXP( f2 ) ) * i2 / SIN( 3 - i3 ).
COMPUTE f3 = SQRT( SQRT( ( i1 + 12 ) * i3 ) + f2 ).”注意符号间间距
i1 = STRLEN( word1 ) + STRLEN( word2 ).
WRITE:/ i1,i2,i3,f1,f2,f3.
10. DESCRIBE
DESCRIBE
TABLE itab[KIND knd][LINES lin][OCCURS n].
KIND knd :T 时代表标准表,为S时代表排序表,为H时代表哈希表
LINES lin
内表表行数量
OCCURS n在内表用选项initial
size 或者老式的选项ocurs创建期间决定内表所需要的初始化内存大小
DESCRIBE DISTANCE
DESCRIBE DISTANCE BETWEEN dobj1 AND
dobj2 INTO dst
IN {BYTE|CHARACTER} MODE.
dobj1 and dobj2两个变量地址起始位置的距离
ABAP基础语法的更多相关文章
- ABAP 新语法记录(一)
原文链接:https://www.cnblogs.com/learnning/p/10647174.html 主要内容 内联声明 构造表达式 内表操作 Open SQL 其他 本文列出了ABAP新语法 ...
- ABAP 新语法-实例讲解
主要内容 内联声明 构造表达式 内表操作 Open SQL 其他 本文列出了ABAP新语法的一些使用方式,供大家学习参考. 内联声明 代码实现: *&--------------------- ...
- 【ABAP系列】SAP ABAP基础-录制BDC的MODE定义解析
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP基础-录制BDC ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- iOS-----正则表达式的基础语法
正则表达式简单语法总结 一.什么是正则表达式 从概念上来说,正则表达式也是一门小巧而精炼的语言,它可以用来简化检索特定的字符串,替换特定字符等功能,有许多开发语言工具,都内嵌支持正则表达式.那么一个正 ...
- python之最强王者(2)——python基础语法
背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...
- emmet 系列(1)基础语法
emmet 系列(1)基础语法 emmet 是一个能显著提升开发html和css开发效率的web开发者工具 emmet基本上目前已知的编辑器都有相应的插件,各个编辑器的emmet插件的下载地址:点我下 ...
- Scala基础语法 (一)
如果你之前是一名 Java 程序员,并了解 Java 语言的基础知识,那么你能很快学会 Scala 的基础语法. Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的. 我 ...
- Java基础语法
java基础学习总结——基础语法1 一.标识符
随机推荐
- Stream系列(六)Match方法使用
条件比配 视频讲解 https://www.bilibili.com/video/av77403655/ EmployeeTestCase.java package com.example.demo; ...
- 在 Kubernetes 集群快速部署 KubeSphere 容器平台
KubeSphere 不仅支持部署在 Linux 之上,还支持在已有 Kubernetes 集群之上部署 KubeSphere,自动纳管 Kubernetes 集群的已有资源与容器. 前提条件 Kub ...
- 【日常错误】Could not initialize class org.hibernate.validator.internal.engine.ConfigurationImpl
最近在用spring-boot编写一个Lucene项目,中间用到了redis,引用了spring-boot-starter-data-redis,在eclipse中用外部Tomcat启动项目一切正常, ...
- PowerMock学习(十)之Mock spy的使用
前言 回顾下之前学过的内容,会发现一点,如果在mock后不写when和thenReturn去指定,即便是mock调用任何方法,什么也不会做,也看不到什么效果. 划重点的时候来了,本身mock出来的对象 ...
- 【github repo自荐】码农周刊一周精选分类
以下内容节选自我的github码农周刊整理repo,欢迎大家star. 写在最前面的话 作为最初的一批码农周刊的订阅者,不能说经历了其成长,但是确实见证了他的壮大.码农周刊确实从开始第一期的基本上都是 ...
- 第四章 开始Unity Shader学习之旅(1)
1. 一个最简单的顶点/片元着色器 现在,我们正式开始学习如何编写Unity Shader,更准确的说是,学习如何编写顶点/片元着色器 2.顶点/片元着色器的基本结构 我们在以前已经讲过了Unity ...
- 《手把手教你》系列进阶篇之1-python+ selenium自动化测试 - python基础扫盲(详细教程)
1. 简介 如果你从一开始就跟着宏哥看博客文章到这里,基础篇和练习篇的文章.如果你认真看过,并且手动去敲过每一篇的脚本代码,那边恭喜你,至少说你算真正会利用Python+Selenium编写自动化脚本 ...
- SpringBoot-多环境切换相关(六)
多环境切换 profile是Spring对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境: 方式一:多配置文件 我们在主配置文件编写的时候,文件名可以是 applicat ...
- nbuoj2784 倒水
题目:http://www.nbuoj.com/v8.83/Problems/Problem.php?pid=2784 一天,TJ买了N个容量无限大的瓶子,开始时每个瓶子里有1升水.接着TJ决定只保留 ...
- Exponial
Description Everybody loves big numbers (if you do not, you might want to stop reading at this point ...