abap基础

abap基础
abap基础

ABAP基础

ABAP简介

ABAP语言也称作ABAP/4,它的全称是Advanced Business Application Programming - 4 th generation Language

ABAP是SAP的支柱

所有的R/3应用程序和部分的Basis 系统都是用ABAP语言开发的

数据字典

编辑器

函数库

SAP事务码

ABAP字典

在商业应用软件开发时,部分实际世界必须被描述成数据形式。

商业应用软件的作用在于接收业务数据,并将其用一定的形式储存起来。

这些业务数据在储存后,还可以随时读取出来,再次利用。例如:财务人员向SAP系统中输入会计凭证,保存之后还可以随时把凭证调出来查看。

无论是接收数据、储存数据、读取数据、使用数据,其核心都是数据。

在SAP R/3系统中,基本上所有的数据都是存在数据库表里面的。

数据库表,以及与其相关的视图、结构等构成了ABAP字典

ABAP字典SE11

ABAP字典所包含的要素

表(Table)

视图(View)

结构(Structure)

数据元素(Data Element)

域(Domain)

表类型(Table Type)

搜索帮助(Search Help)

锁对象(Lock Object)

ABAP字典-表:

SAP R/3 中看到的表并不是真正在数据库中物理上储存数据的表。

SAP中的表和数据库中的物理表是对应起来的。

ABAP 字典中的表分为3种

透明表(Transparent Table)

和数据库中的物理表一一对应,在SAP中激活透明表时,会在数据

库中创建一个同名的物理表。我们用到的绝大多数表都是透明表。

簇表(Cluster Table)

大,多个簇表存在一个物理表中。无索引

共享表(Pooled Table)

小,多个共享表存在一个物理表中。无索引

ABAP字典-视图

ABAP 字典中的视图分为4种

数据库视图

投影视图

维护视图

直接向数据库表中维护数据

帮助视图

对表中内容进行筛选,用来提供搜索帮助

ABAP字典–数据元素和域

数据元素(Data Element)域(Domain)

在SAP字典中,数据库表是有一个一个的字段组成的,每一个字段代表着一个需要储存的现实中的数据。

每一个字段都有自己的一些特性:含义(储存的是什么数据)、数据类型(字符型、数字型、日期型……)、长短等等……在这些特性中,有一些是语义的特性,比如…含义?等;有一些是物理特性,比如…数据类型?及…长度?等。在SAP 中,我们把这两种类型的特性分别储存在不同的ABAP字典对象中,语义特性存放在数据元素中;物理特性存放在域中。

比如:表BKPF中的字段BELNR是用来存凭证号的,那么它的语义特性就是…凭证编号?,这个是存在该字段的数据元素BELNR_D中的;它的物理特性是:该字段是字符型的,而且长度是10位,这些信息是保存在该字段的域BELNR 中的。

搜索帮助

点击条目后的圆点

输入表名时可以使用通配符*

ABAP工作台SE80

ABAP编辑器SE38

ABAP编程语言

ABAP 基本语法特点

由各自独立的语句构成。

单词之间至少要用一个空格分隔(单词和符号之间通常有空

格)。

每个语句结束必须必须要用句号(小数要加单引号)。

A = …1.12?.

ABAP不区分大小写,关键字和用户操作数都一样,为了便

于阅读,一般把关键字大写,而操作数小写。

由于编程的时候随时切换大小写比较麻烦,可以在ABAP

编辑器中用“规范化打印机”按钮来自动转换

注释行由第一列的星号(*)开头,星号必须为第一列

在行末的注释用双引号(”)作为前导。

如果连续多行的第一个关键字相同,可以使用链语句链语

句的方式减少输入。这是ABAP 独特的一个分块缩进方法 ABAP 编程语言的简介

程序执行的返回码SY-SUBRC

这实际上是ABAP 异常捕获机制的一部分。

有些语句执行完成后会向一个特定的系统字段sy-subrc 写

入表示执行结果的值。0 值都表示执行成功,而非0 值则

根据功能不同有特别的定义,这些值的意义都需要查看

ABAP 联机帮助中相应关键字的说明。

其他系统字段

SY-DATUM 系统日期

SY-UZEIT 系统时间

SY-REPID 当前程序的程序名

……

ABAP 程序的创建

每一个程序都要属于一个开发类(也称为Package 包)

可以使用事务码SE38或者SE80

程序创建时本地测试试验用的程式可以选本地对象保存

程序写好后,需要激活

程序创建

Se38

写程序名,点击创建

写程序描述,定义程序特征,保存

保存到本地对象

要使用程序要先激活

开发机程序在生产机实现需要为程序设置请求,上传请求并应用来实现上传,程序上传请求前要注意先激活。

程序修改完,点保存

在弹出的对话框中点新建请求按钮(如果想加入其他请求中,填请求号)

填写短描述后点保存即生成1个请求。此时开发机就保存了这个修改,生产机要应用修改需要释放这个请求并由管理员应用这个请求。

另一种进入程序的方式:在打开事务后,点选系统—状态—双击程序名称。

ABAP 程序中变量的声明

一般把所有的变量声明都放在程序的最开始部分

可以使用SAP内置的基本数据类型来声明变量

固定长度的基本数据类型:

D :日期类型,格式为YYYYMMDD,长度为8

T :时间类型,格式为HHMMSS,长度为6

I :整数类型,长度为4

F :浮点类型,长度为8

STRING:变长字符串类型

XSTRING:变长字节序列类

不定长度的基本数据类型:C:日期型格式为YYYYMMDD 例:'1999/12/03' 、N:数值组成的字符串如:011,'302' 、P: PACKED

数用于小数点数值如:12.00542等

可以使用SAP数据字典中的表、视图、表类型、结构、数据元素来声明变量

可以在程序中声明本地的类型,再利用本地的类型来声明变量

声明变量

DATA bianliang1 TYPE I V ALUE …2?.

变量名类型

例:

变量声明

DATA: S1 TYPE I,

SUM TYPE I.

类型声明

TYPES: BEGIN OF MYLIST,

NAME(10) TYPE C,

NUMBER TYPE I,

END OF MYLIST.

DATA LIST TYPE MYLIST.

鼠标放在字段上按F1会打开帮助

基本ABAP语句

赋值

利用Value、Default等语句在声明变量的时候赋初始值

可以使用MOVE 关键字来赋值,下面两个语句具有相同的

功效。

MOVE var1 TO var2.

var2 = var1.

如果var1 和var2 的数据类型不同,就存在类型冲突类型

冲突的可能性,这时候如果存在转换规则转换规则,则会

进行自动类型转换自动类型转换。

关于类型冲突和自动转换,可以查MOVE 的帮助。

CLEAR 语句根据类型清除数据对象,恢复成默认值。各个

类型的初始值不同

运算

ABAP 程序中,数学表达式可以进行任意多层嵌套。

二元操作符包括:

+ :加法

- :减法

* :乘法

/ :除法

** :乘方

DIV :整除忽略余数

MOD :取模

需要注意,圆括号和操作符都是关键字,需要跟操作数之间至少用一个空格分开。

(1+2)*3 应该写成( 1 + 2 ) * 3

ABAP 运行时环境预定义了一些处理不同类型数据的基本函数。例如下面的例子返回字符变量包含的字符数量。

length = STRLEN( cityfrom ).

请注意,左括号是函数名的一部分,必须跟后面至少有一个空格。

跟一般习惯相同,数学运算具有下面的优先级:括号最高、其次乘方、再次乘除、最低加减。

ABAP 的字符串函数相对比较麻烦,而且不能用其他语言常用的& 或+ 连接,需要特别注意。用CONCATENATE

语句来拼接

可以参考COMPUTER 语句的关键字文档,以获取更多的操作和函数的说明。

基本ABAP语句

条件分支

根据条件可能性的多少,有两种条件语句处理分支情况

在IF 模式中,可以定义任何逻辑表达式作为检查条件。如果

满足条件,则执行相应的语句块,如果不满足,则找下一个

ELSEIF 分支进行进一步判断,如果没有ELSEIF,就找

ELSE 执行。ELSEIF 和ELSE 都可选。

可以使用CASE 模式处理明确的区分情况。CASE 部分指定

的字段内容会与每个WHEN 分支的值进行比较,如果字段

内容相符,则执行相应程序块,如果没有找到相符的,就执行

OTHER 后的程序块。CASE 语句至少要包含一个WHEN,

其他都可选。

在这两个语句结构中,条件比较都是从上往下的,如果某个分支满足条件,系统会立即跳出ENDIF 或ENDCASE。

提示:如果仅需要比较一个字段和多个值,建议使用CASE,因为它更清晰而且性能较好。

循环

ABAP 中有四种循环语句,在DO 和WHILE 的循环里,可以利用sy-index 这个系统字段来计算当前循环的次数,

也只有在循环里这个字段的值才有意义。对于嵌套的循环

来说,sy-index 这个字段保存的值是当前所在层的循环次

数,也就是说,系统有一种内在机制保证每层循环计数都

不会搞乱。不推荐使用这个字段。

无条件循环/ 索引控制的循环

DO 和ENDDO 之间的语句块会无限运行,直到遇到条件

控制的跳出循环语句如EXIT 等。在DO 语句中还可以指

定最多运行的次数,否则的话,将会出现无限循环无限循

环。

头控制循环

在WHILE 和ENDWHILE 之间的语句块会一直执行,直

到不再满足WHILE 后面所指定的条件。指定条件会在语

句块执行前被检查,也就是说,WHILE 结构内部的语句可

能一遍都不执行。

读循环

可以用SELECT 循环读取数据库表的若干条目。对于内表

来说,LOOP 循环可以起到同样的效果。

对话消息

可以用MESSAGE 语句向程序的用户发送对话消息,使用MESSAGE 语句必须指定三位数的消息号和消息类。

消息号和消息类可以指明消息的内容,消息类型则指示了消息显示在何处。SAP 系统提供了一个消息测试的程序

DEMO_MESSAGES,可以学习消息的各种类型和用法。

如果所用的消息使用了占位符,则需要在程序里用WITH 关键字指定替代这些占位符的文字,在消息显示的时候,就

会用所输入的文字替代占位符。我们在运行标准程序的时候

偶尔也会看到& 这样的占位符,这可能是配置不恰当造成

没有合适的值传入。

可以从MESSAGE 的关键字文档中获取更多关于它的信息。

我们一般不使用消息类和消息编号,直接在调用MESSAGE 语句时给出文字提示

处理结构

使用全局类型定义结构

ABAP 程序中经常使用结构数据对象(为了跟结构类型区分开,它通常叫做结构变量或简称结构),结构主要能够把

具有一定逻辑关系的多个变量组织到一起。结构允许嵌套,

也就是说一个结构可以包含其他结构和内表的变量。

在程序中,跟定义基本数据对象一样,用DATA 语句来定义结构。

可以用下述对象定义结构的类型:

数据字典中的结构类型

透明表(跟结构类型一样使用)

当前程序中定义的结构类型

本地结构

使用TYPES 语句来定义本地结构类型,语法如下TYPES: BEGIN OF structure_type_name,

…,

END OF structure_type_name.

DATA: structure_name TYPE structure_type_name.

可以在其中使用TYPE或LIKE来指定组件。

如果结构不需要重用,也可以直接用DATA 语句来定义结构变量,用法就是用DATA 关键字替换TYPES。

访问结构的组件

组件和结构用连字符连接:structure_name-component_name

因此,在数据对象名定义的时候不能使用连字符- (不是不能,是不推荐)。

使用MOVE-CORRESPONDING 语句把一个结构的内容同时全部拷贝到另一个结构中。这里,只有源结构和目标结

构中有相同名称的组件才会拷贝,而目标结构中名称无法对

应的组件保持不变。这时就需要注意,如果两个结构中同名

的组件有不同定义的话,拷贝时可能会出错。

单独的组件视同一个基本数据对象,可以用MOVE 进行赋值,也可以用等号。

处理内表

内表的组成

内表是一个数据对象,在运行时可以用内表保存多个相同结构的数据。

ABAP运行时系统动态的管理内表的大小,这就是说,开发人员无需进行内表的内存管理。

每个独立的数据集合在内表中称为一个表行或者表项。而一行中独立的组件对应于内表中的字段或者列。

内表的行类型可以用任何数据类型和表项的行结构来声明。

使用内表是一个处理大量结构化数据的简单办法,主要应用包括:

保存数据库或序列文件中的数据进行进一步处理。

为屏幕和打印输出格式化数据(如:排序等)

为使用其他服务格式化数据(如:子程序、函数、方法调用) 内表的属性

下列几个属性完全描述了一个内表

行类型:行类型描述了表行的结构,一般使用一个结构来定

义行类型,不过实际上可以用任何类型。

键:内表的键由若干个指定顺序的键字段组成,内表就会根

据几个键字段的先后顺序自动排序。根据访问类型,键

可以分为唯一的和不唯一的,唯一的意味着表中的键字

段的值组合在内表中只能出现一次。

表类型:有三种不同的表类型,标准表、排序表和哈希表(散

列表),根据使用的访问类型,可以使用相应的表

定义以获得更好的性能。

三种表的类型

标准表:系统内建维护了表的行号(即索引),索引和键访

问都是允许的。当经常用索引访问表的时候就选择

标准表。

排序表:数据记录在表内自动以升序进行排列,索引是系统

自动维护的,索引和键访问都可以用。如果经常使

用键来访问数据,或者希望数据能够自动排序时,

就用排序表。

哈希表:利用主键的哈希排序对数据记录进行快速访问,哈

希表需要唯一主键,而且只能使用键访问。如果内

表非常大而且希望用主键访问,就用哈希表。

定义内表

使用全局类型

内表的类型称作表类型,表类型也可以在全局声明或在程序

内定义,在ABAP字典中可以定表类型,并且跟其他类型

一样使用DATA 语句来定义一个内表。

使用本地类型

本地表类型定义也通过TYPES 语句完成,并且通过WITH

NON-UNIQUE KEY 关键字来定义主键等。

当列出键字段时,需要注意字段的排列顺序会影响排序语句

(例如:SORT BY KEY)的结果。

还可以用DATA 语句来直接定义内表。

可以用字典对象中的结构、表来定义内表,也可以用基本数

据对象来组合出内表的结构。

DATA l_itb TYPE bkpf. “定义内表

DATA l_wa LIKE LINE OF l_itb. “定义工作区

访问单条记录

一般来说,需要一个与内表行结构相同的工作区来处理单条记录。

APPEND:往内表的最后追加一条记录,只能用于标准表。

APPEND LINE INTO ITAB.

INSERT:向内表插入一条记录,在标准表里跟APPEND 的

效果一样,在排序表里就插入到键指定的位置,

在哈希表里则根据哈希运算法则插入到指定位

置。

INSERT LINE INTO ITAB INDEX 2. “插入在位置2之前

READ:把表的指定行拷贝到结构中。

MODIFY:使用结构的内容重写表的指定行。

DELETE:删除表的指定行。

DELETE ITAB FROM 3 TO 10.

“删除第3至第10个元素

COLLECT:把结构中的内容累加到内表具有相同键的行

上,这时,只有非键字段才执行累加,并且只

有非键字段都是数值的时候才能执行这个语

句。

处理结果集合

LOOP … ENDLOOP:LOOP 语句一条一条的读出内表的

数据行,写入INTO 字句指定的结构中,结构的内容可用

于输出,或者修改后写回内表。在LOOP 语句块中,系统

字段sy-tabix 指示了当前循环到内表的哪一行。

LOOP AT [INTO ] [FROM TO ] [WHERE ]

ENDLOOP.

根据设定的范围选取原素资料, 读完后自动移往下一笔

Example:

LOOP AT ITAB INTO LINE WHERE COL1 >100.

WRITE: / SY-TABIX,LINE-COL1.

ENDLOOP.

仅读取COL1 > 100 的元素

DELETE:删除满足条件的所有行。

语法:

DELETE INDEX

Example:

DELETE ITAB INDEX 4

删除第四个元素

加上删除条件:

DELETE [FROM TO ] [WHERE

Example:

DELETE ITAB FROM 3 TO 10.

删除第3至第10个元素

INSERT:把一个内表中的多行拷贝到另一个内表中。

APPEND:把一个内表中的多行追加到另一个标准表中。

想修改内表的某一行只能先把那行读到工作区,修改工作

区后再写回内表,而不能以数组的方法访问到内表的指定

一行,这是跟其他语言很不一样的地方。

使用索引读表(标准表和排序表)

LOOP 中用FROM - TO 子句可以读指定索引段的记录。

READ 中用INDEX 子句可以读指定索引的一条记录。

使用条件读表

LOOP 中用WHERE 子句可以读满足一定条件的记录。

READ 中用WHERE TABLE KEY 子句可以读满足主键条

件的记录。

内表排序

标准表和排序表可以使用SORT 语句对指定字段进行排序,如果没有指定升序或者降序就默认使用升序。

如果使用AS TEXT 子句,则按照某种语言的字典排序,而不是按照计算机中的文字编码来排序。比如德语中的“?”就

会排在“b”前,而不是在“z”后面,这个对中文影响不大。

如果使用STABLE 子句,则排序时排序字段具有相同值的记录的顺序在排序后仍保持不变。

清除表的内容

REFRESH:清除整个内表的内容,释放部分内存,保留一些以备后续操作。

使用在没有HEADER LINE 的Internal Table中, 清除所有元素

Example:

REFRESH ITAB.

CLEAR:对于没有表头的内表,跟REFRESH 一样,清除内表的内容。对于有表头的内表,则只初始化表头。

使用在有HEADER LINE 的Internal Table中, 清除所有元素

Example:

CLEAR ITAB[ ].

FREE:清除整个内表的内容,释放所有内存。在程序里,当内表以后不再使用的时候可以使用FREE,这样能尽量多

释放一些不用的内存。

释放(Release) Internal Table所占的内存空间, 用在REFRESH和CLEAR指令之后

Example:

FREE ITAB.

表头

WITH HEADER LINE 子句可以在定义表的时候指定表头,如果指定了表头,就会自动建立一个与内表同名并且具有

相同结构的工作区,同时也可以简化很多内表语句。

但是因为以下缺陷,SAP 建议舍弃表头。

表头与内表同名,影响阅读。

有表头的内表不允许使用复杂数据对象(不能把其他内表作

为表的组件)。

有表头的内表不允许使用ABAP 对象(面向对象的ABAP

扩展)。

新的SAP 标准建议舍弃表头,但是老程序还在大量使用,因此有些概念需要澄清。

用itab-col 表示表的工作区的某个字段

用itab[] 可以表示整个表

数据获取

数据获取

SQL 是结构化查询语言(Structured Query Language)的缩写,结构化查询语言用于定义、创建、读取数据库表。

每种关系型数据库都有其本地SQL,是跟数据库相关的,因此,使用本地SQL 的ABAP 程序就无法适应所有SAP

系统(因为不同的SAP 系统可能使用各种不同的数据库)。

而开放SQL则是SAP 为ABAP 语言定义的数据库无关的SQL 标准,开放SQL 语句在程序运行时动态的转化成当前

数据库使用的本地SQL,这种转化完全由ABAP 运行时系

统执行,而我们在编写程序时就不需要考虑SAP 系统使

用的数据库差异。

数据库的读访问

读数据库是我们最经常做的工作。

使用开放SQL的SELECT 语句来执行查询,它包含几个基本的组成部分,下面一一说明。

基本语法:SELECT FROM

INTO [ WHERE ]

SELECT 后面的块说明了需要读表的哪些字段。

FROM 后面的块说明了需要读哪个数据源(数据源可以是表或者视图)。

INTO 后面的块说明了读出的字段要放到哪个目标数据对象中。

WHERE 后面的块说明了读数据的基本条件,可选。

SELECT 语句还有很多非常灵活的用法,可以参考相关的帮助文档,也需要在实际应用中不断积累经验。

读单条记录

使用SELECT SINGLE 语句从数据库表读取单条记录,为了确保读出唯一记录,应当在WHERE 块指定全部主键的

值。Client 字段在这里可以不必指定,系统会自动选定属于

当前client的记录。

在SELECT 语句中使用CLIENT SPECIFIED 子句可以关闭自动客户端选定,从选择条件里指定访问某个客户端的

数据。

可以使用掩码* 来指定选中数据表的全部字段,不过为了减少数据量,建议指定选中字段。

用INTO 指定记录要拷贝到的目标变量,目标变量结构的前若干个字段必须跟选择字段对应。

如果找到合适记录,则系统变量sy-subrc 的值为0。

如果不想用结构来保存数据,也可以在INTO 后面使用一个变量列表,这时数据保存的对应关系就只按顺序而不管

字段名了。?INTO (field_1, field_2, …, field_n) 如果目标结构的数据结构与查询字段的顺序不一致,或者使用* 这样的通配符来指定查询字段,就需要用

CORRESPONDING FIELDS OF 子句,它会自动在源

字段和目标字段之间找名称相同的项自动对应填入。这时

需要确认各个同名字段的类型一致,否则的话,这样可以

编译通过,但在执行时却有可能遇到类型转换失败而造成

的程序错误。建议使用这种方法,因为:

使用它就可以不需要目标结构的前面字段与查询字段一致

将来增加目标结构的字段时不需要修改查询语句。

使用循环读多条记录

可以使用SELECT …ENDSELECT 循环来处理多条数据

库记录。

WHERE 条件可以指定需要选择的记录,用AND 和OR

进行逻辑连接。

使用SELECT 循环时,数据库把数据按一个一个的包发送

到应用服务器的数据库接口,然后进程块把需要的数据一条

一条拷贝到工作区进行处理。

在SELECT 循环后会产生一些返回值,sy-subrc 为0 说明

至少查询到一条记录,而sy-dbcnt 则记录了一共查询到多

少条记录。

可以使用INTO TABLE 把查询结果一次性读到内表中,而

不用一条一条的处理。把数据表的记录一次性

填入内表可以获得比较高的性能,因为数据是成块传输而不

是一条条传输。

由于是成块传输,所以不需要ENDSELECT 结束语句。

跟查询输入到结构一样,也可以使用前面的方法进行字段对

应。

使用APPEND TABLE 可以把新查询到的数据追加到已有

数据的内表后面。

sy-subrc 和sy-dbcnt 在SELECT 后有相同的表现。

自数据库读取记录

语法:

SELECT FROM [INTO ] [WHERE ]

[ GROUP BY ] [ORDER BY ]

SORT [] [BY ] ….

[] : 可分成递减(DESCENDING)和递增(ASCENDING), 空白表ASCENDING

:为指定的字段

Example:

SORT ITAB DESCENDING BY COL2. “将ITAB 根据COL2字段递减排序

例:

1.以回圈方式读取所有记录

语法:

SELECT [DISTINCT] * …

…..

ENDSELECT.

加上[DISTINCT]会自动去除重复的记录

Example:

TABLES SPFLI.

SELECT * FROM SPFLI WHERE COMPANY=’DELTA’. WRITE: / PLANT,TEL.

ENDSELECT.

会以迥圈的方式逐笔印出符合条件的记录

2.读取单笔记录

语法:

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

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

Example:

TABLES SPFLI.

DATA ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE. SELECT * FROM SPFLI INTO ITAB.

一次读10笔(Initial Table的长度)记录存入ITAB 中SELECT .. INTO TABLE PACKAGE SIZE

一次读取 笔记录至

Example:

TABLES SPFLI.

DATA ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE. SELECT * FROM SPFLI INTO ITAB PACKAGE SIZE 5.

一次读取 5 笔记录

5.条件叙述

语法:

abap123入门教材(中文)

1. ABAP/4 Introduction Introduction ABAP/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 process Basic Languange Overview 1.data element 宣告方式, 如数值, 字符数据变量宣告 2.操作数(operate)使用, 如+ - * / 3.Control element使用, 如Boolean 值 4.特殊数据格式, 如日期与时间 5.字符串字料处理function, 如部分字符串的截取 6.子程序或自定函数的呼叫 7.SQL语法使用 8.数据结构的使用, 如process internal table的宣告与使用 Reports Overview 1.Reports Task, 如报表屏幕预览或打印机打印的选择 2.Reports 模块是一个Stand-along 程序, 3.database读取方式, 如可定义logical database(与磁盘的physical storage对映) 4.报表数据的计算与产生 5.报表的输出 Dialog Overview 1.专处理database 的读取与异动, 如使用SQL 指令 2.Dialog 不是一个Stand-Along Progarm, 使用transaction code来产生屏幕对话框 3.由flow logic 控制, flow logic分成PBO(Process Before Output)与PAI(Process After Input)

SAP ABAP ALV基础知识实例讲解

ALV知识 Xiaogangh 一、ALV相关概念 ALV――ABAP LIST VIEWER,这里我姑且称之为ABAP表单浏览器,用它可以标准化,简单化R/3系统中的表单,它可以提供给用户一个统一的表单格式以及用户接口。 ALV即能显示简单表单(SIMPLE LIST)又能显示有序表单(SEQUENTIAL LIST): ●简单表单(SIMPLE LIST)包含一系列不分层次的(NON-HIERARCHICAL),用户 自定义的列。 ●层次表(即有序表SEQUENTIAL LIST)包含列表头以及它的子行,一个列表头的 关键行能带出它下面的一些列项目(我们自己理解的时候可以想到BOM表的层次结构)。 ●我们还可以在简单表单以及关联表单中显示小计和总计 二、结合一个具体的实例来看ALV的功能 首先我们看下图中的这个ALV的布局(这是一般ALV程序表单的典型布局): 根据上面对ALV的直观形象,下面将屏幕上的区域划分成几块,分别来解释它的作用:1.快捷工具栏(如下图)

细节按钮,你首先必须选中列表中的一行,然后点击它的话,就会弹出一个窗口,显示选中行的细节内容。(另外:你双击你要选择的行,也可以显示细节) 按升序排列,首先选中一列,然后再点击它,就可以看到该列是按照升序重新排列。 按降序排列,首先选中一列,然后再点击它,就可以看到该列是按照降序重新排列。 设置过滤器,通过设置它可以达到筛选的目的,以列名称作为筛选的筛选标准,填入过滤器相应的标准值,然后就可以筛选出满足自己条件的记录。 打印预览,点击它之后,就可以预览一下将要打印内容的布局情况。 Microsoft Excel,调用MS的Excel到当前ALV的列表显示区域。(前提:必须安装了MS的Excel) 字处理,字处理的相关设置。 本地文件,将当前表单存储到本地机器上,有几种供选择的存储格式。 邮件收件人,给系统内用户发邮件 图形,点击它可以根据表单情况绘制相关图表。 更改布局,点击它可以对表单中的列项目排列次序的互换,删减等。 选择布局,从已经保存的布局中选择自己满意的布局。 保存布局,对于自己满意的布局,可以通过点击它来将布局保存起来。 2.表单标题区 这个区域主要是用来显示一些抬头信息(总揽信息),类似于WORD中的页眉。我们在使用的时候根据需要来进行相关填写。 3.表单显示区

sap ABAP开发入门到进阶

SAP-A BAP 开发入门到进阶 基础篇 - 以简短的篇幅介绍最基本的语法 增强篇 - 介绍了常用的ABAP技术 希望此书对想从事ABAP开发的读者有相当帮助。 一.基础篇 1.什么是ABAP ? 了解一下ABAP的发展历史是必要的,ABAP产生的最初的目的是用以生成简单打印报表程序,我们知道SAP最初是为解决财务实时数据处理问题 的,ABAP(Advanced Business Application Programming->高级业务应用编程语言)现在用于编写SAP AG的几乎全部产品源代码. 严格地讲,ABAP/4不仅仅是一个开发工具,而且是一套完整的client/server开发环境,这很好理解,微软的Visiual Studio是一开发环境,VB,VC++等是开发工 具.ABAP开发环境包含支持程序开发的一些函数和包等. 如图1-1,是SAP开发环境的一个三层架构的例图,三层(多层)的概念也不新鲜,比如在安装SAP时也可将DB instance安在一台server, Central instance在另一台所谓的Application server(我想这应是相关SAP基础系统包括各种应用程序所在),而通常客户端安装的SAP Logon Front End,SAP会话管理器等是所谓的表示层,它通过TCP/IP,SAP演示协议或RFC和应用服务器进行数据传输,用户看到的只是处理后的数据返回. 和Delphi的三层逻辑相近,在应用层包含多个组件象ABAP开发平台,身份验证,系统管理维护等用以处理会话,更新,排队,网关,数据层处理native 和Open SQL等(这是从内部机制方面看),SAP各模块应用的业务逻辑都在应用层被处理(从用户角度)然后结果被返回.

SAP ABAP OO面向对象入门实例

*& Report Y_TEST_A * *&---------------------------------------------------------------------* *& 简单ABAP对象 * *&---------------------------------------------------------------------* REPORT y_test_a . *&---------------------------------------------------------------------* *& Class simpleobj *&---------------------------------------------------------------------* * Text *----------------------------------------------------------------------* CLASS simpleobj DEFINITION. PUBLIC SECTION. METHODS: show_text. PRIVATE SECTION. DATA text(100) TYPE c VALUE 'This is my first ABAP object.'. ENDCLASS. "simpleobj *&---------------------------------------------------------------------* *& Class (Implementation) SIMPLEOBJ *&---------------------------------------------------------------------* * Text *----------------------------------------------------------------------* CLASS simpleobj IMPLEMENTATION. METHOD show_text. WRITE text. ENDMETHOD. "show_text ENDCLASS. "SIMPLEOBJ * Global Data Declaratioin DATA ob_app TYPE REF TO simpleobj. START-OF-SELECTION. CREATE OBJECT ob_app. CALL METHOD ob_app->show_text.

ABAP基础知识(完整版)---自学

ABAP基础知识(完整版)-上 SAP ABAP / 4 基础知识学习 数据类型 C :字符串 D :日期型格式为YYYYMMDD 例:'1999/12/03' F : 浮点数长度为8 I :整数 N :数值组成的字符串如:011,'302' P : PACKED数用于小数点数值如:12.00542 T : 时间格式为:HHMMSS 如:'14:03:00' X : 16进制数如:'1A03' *-------------------------------------------------------------------------------------* 变量声明 DATA [] [][decimals] 变量名称 变量类型及长度 初值 小数位数 exp: DATA : COUNTER TYPE P DECIMALS 3. NAME(10) TYPE C VALUE 'DELTA'. S_DATE TYPE D VALUE '19991203'. exp: DATA : BEGIN OF PERSON, NAME(10) TYPE C, AGE TYPE I, WEIGHT TYPE DECIMALS 2, END OF PERSON. 另外,有关DATA声明的指令还有: CONSTANTS(声明常数)、STATICS(临时变量声明). exp: CONSTANTS PI TYPE P DECIMALS 5 VALUE '3.14159'. STATICS 关键字 声明的变量仅在目前的程序中使用, 结束后会自动释放 语法: STATICS [] [] [] 系统专用变量说明 系统内部专门创建了SYST这个STRUCTURE,里面的栏位存放系统变量,常用的系统变量有: SY-SUBRC: 系统执行某指令后,表示执行成功与否的变量,'0'表示成功 SY-UNAME: 当前使用者登入SAP的USERNAME; SY-DATUM: 当前系统日期; SY-UZEIT: 当前系统时间; SY-TCODE: 当前执行程序的Transaction code

ABAP入门

ABAP/4语言入门 郑州三全食品股份有限公司信息部 内部培训教材 作者:强晟 日期:2006年8月2日

1.ABAP/4入门 简介 ABAP/4(AdvancedBusinessApplicationProgramming)是SAP/R3目前唯一的系统开发 工具,属4GL(第四代语言),语法比较近似VisualBasic或JAVA,和传统的第三代语言,如C、PASCAL有很大不同,在程序模块(ProgramStructureModule)可分以下三个部分: 1.过程块内的顺序编码 与一般语言语法近似,如IF,WHILE等,但并没有GOTO语法 2.报表 调用一个独立的事件(Depending Event),读取数据库产生数据列表 3.对话框 屏幕参数输入的对话框,专门处理数据库读取或更改的事务过程 基本语言概览 1.数据元素声明方式,如数值,字符数据变量声明 2.操作符使用,如+-*/ 3.控制元素使用,如Boolean值 4.特殊数据格式,如日期与时间 5.字符处理函数,如部分字符串的截取 6.子程序或自定函数的调用 7.SQL语法使用 8.数据结构的使用,如过程内表的声明与使用 报表概览 1.ReportsTask,如报表屏幕预览或打印机打印的选择 2.Reports模块是一个独立的程序 3.数据库读取方式,如可定义逻辑数据库(与磁盘的物理存储对应) 4.报表数据的计算与产生 5.报表的输出

对话框概览 1.专处理数据库的读取与更改,如使用SQL命令 2.对话框不是一个独立程序,使用事务码来产生屏幕对话框 3.由流程逻辑控制,流程逻辑分成PBO(ProcessBeforeOutput,输出前过程)与 PAI(ProcessAfterInput,输入后过程) 2.开始编程 2.1ABAP/4编辑器 创建ABAP/4程序 使用ABAP工作台撰写程序(选择工具->ABAP/4工作台,事务码S001),屏幕如下: 可分成: 1.ABAP/4编辑器:针对简单的报表或程序,仅使用几个组件或不使用 2.对象浏览器:针对复杂的报表或程序,如对话事务模块(Dialog TransactionModule) 的编写

ABAP4基础

ABAP4基础 一概念: 数据类型: 1 不占用内存空间。 2 描述了数据对象的属性。 3 用户可以自定义。 数据对象: 1占用内存空间。 2 一个特殊的类型。 3 是数据类型的具体实例。 //就是类型和变量ex:int i; 二定义数据对象 通过指定预定义的ABAP类型 DA TA: TYPE 例如:DATA: counter TYPE I. 2 通过指定自定义类型 DA TA: TYPE < user-defined-type> 例如:DATA: splight TYPE my_struc. 3 通过指定词典对象 DA TA: LIKE 例如:DATA: data LIKE sy-datum. 4 通过指定一个已经存在的数据对象 DATA: LIKE 例如:DATA: mycounter LIKE counter. //定义变量的时候要在前面加上DATA:变量的数据类型不同,中间的关键词也不相同 如果数据类型是预定义的或者自定义的,关键词用TYPE 如果数据类型是词典对象或者是已经存在的数据对象,关键词用LIKE 三在ABAP/4中按结构和定义对数据类型分类。数据类型是: 基本的(非结构化的)或结构化的。 预定义的或用户定义的。

因此,有四类数据类型。预定义数据类型的名称是固定的。用户定义的数据类型的名称由程序员在程序中定义。 1 预定义的基本的数据类型: ABAP/4 包含8 个预定义基本数据类型。 注意: 类型I 数据 类型I 数据的数值范围是-2**31 到2**31-1 并且仅包括整数。 对算术运算的非整型结果(如分数)进行四舍五入,而不是截断。 类型I 数据可用于计数器、项目号、索引和时间期段等。

abap开发基础知识总结

1.内表的定义 通过关键字DATA对内表进行创建,内一的定义可以直接参考结构体或者其它内表及透明表,也可以直接定义字段,其中关键字如下: UNIQUE|NON-UNIQUE:指定关键字,只能应用于排序表或者哈希表。 INITIAL SIZE n:指定初始化内表大小。 WITH HEADERLINE:定义内表是否有表头。 具体定义有以下几种方式: DATA <内表名> TYPE <结构类型> WITH[UNIQUE|NON-UNIQUE] [INITIAL SIZE n] [WITH HEADER LINE]。 DATA <内表名> LIKE TABLE OF <内表或者透明表> WITH[UNIQUE|NON-UNIQUE] [INITIAL SIZE n] [WITH HEADER LINE]。 DATA BEGIN OF itab OCCURS n, ...... END OF itab [VALID BETWEEN f1 AND f2]。 2.内表的赋值 上面曾介绍过,内表分为有无HEADER LINE两种。对于有HEADER LINE的内表,可以通过填充HEADER LINE数据后或通过外部的Work Area向内表存储空间中追加数据,相关语法如下: APPEND( into) . 3.内表数据管理 3.1.内表的清空 CLEAR :仅清空HEADER LINE,对内表数据存储空间不影响。 REFRESH :清空内表数据存储空间,对HEADER LINE不影响。

REFRESH FROM TABLE:清空内表存储空间,填充从数据库表所获数据。 FREE :清空内表数据存储空间,对HEADER LINE不影响。 3.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]. 3.3.MODIFY(直接修改内表数据) 按内表位置或者具体内表字段值相等条件修改内表数据。 MODIFY itab [FROM wa] [INDEX idx][TRANSPORTING f1...fn] WHERE cond. 3.4.COLLECT(内表数据分类汇总) 将内表中相同的字段合并,若有类型为I的字段,则将其值加总。 COLLECT [wa INTO] itab. 3.5.SORT(内表数据排序) 对内表进行排序,可以指定具体的排序字段、排序方式(升/降),语法如下:SORT itab [BY f2 f2...fn] [ASCENDING/DESCENDING] 3.6.READ(读取) 依据具体行数或字段值等条件读取某一内表的数据。 READ TABLE itab FROM wa. READ TABLE itab WITH [TABLE] KEYk1=v1...kn=vn [BINARY SEARCH]. READ TABLE itab INDEX i.

我的SAP-ABAP基础语法学习笔记

ABAP基础学习笔记 学前说明: 1.ABAP/4每条语句以句号结束; 2.ABAP/4中象= ,>, <,+,-,*,/等符号左右都需要有至少一个空格,否则报错; 3.整行注释用’*’号,星号要放当前行的第一个才有效, 注释本行后面部分用’”’号; 一、基本数据类型: Type Length Range Initial Value Description C 1 1-65535Byte Space 字符串数据, 如’Program’ D 8 8Byte ‘00000000’ 日期数据, 格式为YYYYMMDD F 8 8Byte 0 浮点数 I 4 -2^31至2^31-1 0 整数 N 1 1-65535Byte ‘00…0’ 数值所组成的字符串 P 8 1-16Byte 0 Packed 数, 用在小数点数 T 6 6Byte ‘000000’ 时间数据, 格式为HHMMSS X 1 1-65535Byte X’00’ 16进位数 例: C: 字符(串), 长度为1, 最大有65535 BYTES, 初始值为: space,例: ‘M’; D: 日期, 格式为YYYYMMDD, 最大是’9999/12/31’ ,例:’1999/12/03’. F: 浮点数, 长度为8, 例如: 4.285714285714286E-01 I: 整数范围:-2^31 ~ 2^31-1 N: 数值组成的字符串: 011, ‘302’. P: packed 数,用于小数点数值,例如: 12.00542; T: 时间, 格式为HHMMSS,例如: ’14:03:00’, ’21:30:39’. X: 16进制数, 例如‘1A03’. 二、变量的声明: 变量宣告包含name, length, type, structure等,语法如下: DA TA [] [] [] 其中: [] 里的内容表示可选项。 :变量名称,最长30个字符,不可含有+ , . , : ( ) 等字符; :长度及变量类型; :初值 :小数位数 例如: DA TA:C1 TYPE C, INT1 TYPE I V ALUE 1, TEMP TYPE P DECIMAL 2. DATA后面的冒号表示后面声明多个变量,如果只有一个变量也可以写成: DATA C1 TYPE C. TYPE 也是用来声明变量的,与DATA差不多,不过TYPE不能直接给变量赋值。 例如: TYPES: INT1 TYPE I.(不能VALUE 1)

ABAP基础知识整理

ABAP开发分为RICEF-W Report开发、Interface开发、Conversion 转换开发、Enhancement开发、Form开发、Workflow工作流开发。Table: SE11 1. 建议Field中先定义Data element 不建议先定义field 2. 特殊DataType: CLNT:Data element/Domain有MANDT CURR:小数位设定 CUKY:Currency:Domain like WAERS DATS:日期 YYYYMMDD Domain like DATUM TIMS:时区管理 hhmmss Domain like UZEIT 3. Delivery class A和C A - Application table 业务数据不会经常修改物料供应商客户 C - Customizing table 会产生Transport Request Data browser/table view maint. Not allowed 和allowed区别 4. Sigh 金额有关打钩支持正负号 5. Lowercase 大小写区分 6. Value range 取值限制男、女 Single val。单个取值 Intervals 一段取值 7. Text table 用在master table 8. Append structure 只能用在一个地方 Include structure 能用多次 9. 创建表的时候:设置Technical Setting 10. 设置Enhancement category for table missing: Extras - Enhancement category 11. Table Maintenance Generator:se11->unitilies->table maintenance generator 12. Fixed values——屏幕输入时检查

abap基础

ABAP基础 ABAP简介 ABAP语言也称作ABAP/4,它的全称是Advanced Business Application Programming - 4 th generation Language ABAP是SAP的支柱 所有的R/3应用程序和部分的Basis 系统都是用ABAP语言开发的 数据字典 编辑器 函数库

SAP事务码

ABAP字典 在商业应用软件开发时,部分实际世界必须被描述成数据形式。 商业应用软件的作用在于接收业务数据,并将其用一定的形式储存起来。 这些业务数据在储存后,还可以随时读取出来,再次利用。例如:财务人员向SAP系统中输入会计凭证,保存之后还可以随时把凭证调出来查看。 无论是接收数据、储存数据、读取数据、使用数据,其核心都是数据。 在SAP R/3系统中,基本上所有的数据都是存在数据库表里面的。 数据库表,以及与其相关的视图、结构等构成了ABAP字典 ABAP字典SE11 ABAP字典所包含的要素 表(Table) 视图(View)

结构(Structure) 数据元素(Data Element) 域(Domain) 表类型(Table Type) 搜索帮助(Search Help) 锁对象(Lock Object) ABAP字典-表: SAP R/3 中看到的表并不是真正在数据库中物理上储存数据的表。 SAP中的表和数据库中的物理表是对应起来的。 ABAP 字典中的表分为3种 透明表(Transparent Table) 和数据库中的物理表一一对应,在SAP中激活透明表时,会在数据 库中创建一个同名的物理表。我们用到的绝大多数表都是透明表。 簇表(Cluster Table) 大,多个簇表存在一个物理表中。无索引 共享表(Pooled Table) 小,多个共享表存在一个物理表中。无索引 ABAP字典-视图 ABAP 字典中的视图分为4种 数据库视图 投影视图 维护视图 直接向数据库表中维护数据 帮助视图 对表中内容进行筛选,用来提供搜索帮助 ABAP字典–数据元素和域 数据元素(Data Element)域(Domain) 在SAP字典中,数据库表是有一个一个的字段组成的,每一个字段代表着一个需要储存的现实中的数据。 每一个字段都有自己的一些特性:含义(储存的是什么数据)、数据类型(字符型、数字型、日期型……)、长短等等……在这些特性中,有一些是语义的特性,比如…含义?等;有一些是物理特性,比如…数据类型?及…长度?等。在SAP 中,我们把这两种类型的特性分别储存在不同的ABAP字典对象中,语义特性存放在数据元素中;物理特性存放在域中。 比如:表BKPF中的字段BELNR是用来存凭证号的,那么它的语义特性就是…凭证编号?,这个是存在该字段的数据元素BELNR_D中的;它的物理特性是:该字段是字符型的,而且长度是10位,这些信息是保存在该字段的域BELNR 中的。 搜索帮助 点击条目后的圆点

相关主题
相关文档
最新文档