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参数赋予字段相应的初始值。

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按钮添加图标,并且在给按钮赋值之前,否则将会把文字替换。

MOVE
source {TO|?TO} destination.

destination1 = destination2 = ...
= destination = source.

MOVE-CORRESPONDING struc1 TO struc2.

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.

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

CONCATENATE

{dobj1 dobj2
...}|{LINES OF itab}

INTO result
[IN
{BYTE|CHARACTER} MODE]

[SEPARATED BY sep] ”用sep分割

SPLIT
dobj AT sep INTO

      {
{result1 result2 ...} | {TABLE result_tab} }

      [IN
{BYTE|CHARACTER} MODE].

[RESPECTING
BLANKS].
“对于c, d, n, t类型的字符串有一个RESPECTING BLANKS选项可使用,表示尾部空格也会保留。

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 ...比分组的数量少,则多余的分组将被忽略;且只存储第一次或最后一次匹配到的结果

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;数据对象文本保持不变,若hexxstring类型,则其长度将自动调整。

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 ) ...

l   数值运算及算术运算函数

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基础语法的更多相关文章

  1. ABAP 新语法记录(一)

    原文链接:https://www.cnblogs.com/learnning/p/10647174.html 主要内容 内联声明 构造表达式 内表操作 Open SQL 其他 本文列出了ABAP新语法 ...

  2. ABAP 新语法-实例讲解

    主要内容 内联声明 构造表达式 内表操作 Open SQL 其他 本文列出了ABAP新语法的一些使用方式,供大家学习参考. 内联声明 代码实现: *&--------------------- ...

  3. 【ABAP系列】SAP ABAP基础-录制BDC的MODE定义解析

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP基础-录制BDC ...

  4. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  5. iOS-----正则表达式的基础语法

    正则表达式简单语法总结 一.什么是正则表达式 从概念上来说,正则表达式也是一门小巧而精炼的语言,它可以用来简化检索特定的字符串,替换特定字符等功能,有许多开发语言工具,都内嵌支持正则表达式.那么一个正 ...

  6. python之最强王者(2)——python基础语法

    背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...

  7. emmet 系列(1)基础语法

    emmet 系列(1)基础语法 emmet 是一个能显著提升开发html和css开发效率的web开发者工具 emmet基本上目前已知的编辑器都有相应的插件,各个编辑器的emmet插件的下载地址:点我下 ...

  8. Scala基础语法 (一)

    如果你之前是一名 Java 程序员,并了解 Java 语言的基础知识,那么你能很快学会 Scala 的基础语法. Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的. 我 ...

  9. Java基础语法

    java基础学习总结——基础语法1 一.标识符

随机推荐

  1. Stream系列(六)Match方法使用

    条件比配 视频讲解 https://www.bilibili.com/video/av77403655/ EmployeeTestCase.java package com.example.demo; ...

  2. 在 Kubernetes 集群快速部署 KubeSphere 容器平台

    KubeSphere 不仅支持部署在 Linux 之上,还支持在已有 Kubernetes 集群之上部署 KubeSphere,自动纳管 Kubernetes 集群的已有资源与容器. 前提条件 Kub ...

  3. 【日常错误】Could not initialize class org.hibernate.validator.internal.engine.ConfigurationImpl

    最近在用spring-boot编写一个Lucene项目,中间用到了redis,引用了spring-boot-starter-data-redis,在eclipse中用外部Tomcat启动项目一切正常, ...

  4. PowerMock学习(十)之Mock spy的使用

    前言 回顾下之前学过的内容,会发现一点,如果在mock后不写when和thenReturn去指定,即便是mock调用任何方法,什么也不会做,也看不到什么效果. 划重点的时候来了,本身mock出来的对象 ...

  5. 【github repo自荐】码农周刊一周精选分类

    以下内容节选自我的github码农周刊整理repo,欢迎大家star. 写在最前面的话 作为最初的一批码农周刊的订阅者,不能说经历了其成长,但是确实见证了他的壮大.码农周刊确实从开始第一期的基本上都是 ...

  6. 第四章 开始Unity Shader学习之旅(1)

    1. 一个最简单的顶点/片元着色器 现在,我们正式开始学习如何编写Unity Shader,更准确的说是,学习如何编写顶点/片元着色器 2.顶点/片元着色器的基本结构 我们在以前已经讲过了Unity ...

  7. 《手把手教你》系列进阶篇之1-python+ selenium自动化测试 - python基础扫盲(详细教程)

    1. 简介 如果你从一开始就跟着宏哥看博客文章到这里,基础篇和练习篇的文章.如果你认真看过,并且手动去敲过每一篇的脚本代码,那边恭喜你,至少说你算真正会利用Python+Selenium编写自动化脚本 ...

  8. SpringBoot-多环境切换相关(六)

    多环境切换 profile是Spring对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境: 方式一:多配置文件 我们在主配置文件编写的时候,文件名可以是 applicat ...

  9. nbuoj2784 倒水

    题目:http://www.nbuoj.com/v8.83/Problems/Problem.php?pid=2784 一天,TJ买了N个容量无限大的瓶子,开始时每个瓶子里有1升水.接着TJ决定只保留 ...

  10. Exponial

    Description Everybody loves big numbers (if you do not, you might want to stop reading at this point ...