ABAP 数据类型&基本语法&命名规则笔记(详细)
刚刚开始学习ABAP开发的小白,看着书整理的笔记,求大佬带飞
数据类型
DATA语句
DATA语句用于定义数据变量,变量名包括“_”,最长可以定义30位。
TYPE type
- 定义变量的数据类型
LIKE num
- 定义一个变量 gv_num1 相同类型的变量时使用该语句。
- num可以是任何一种数据类型变量(字段、参数、结构体、系统变量等)
VALUE int
- 所有数据类型都存在初始值。
- DATA语句中可以使用VALUE选项设置初始值int。基本数据类型性自带的初始值
LENGTH n
- LENGTH n 用于指定字段长度,但只适用于C、N、P、X类型
- 如果使用VALUE IS INITIAL语句,则变量的初始值为锁参照的数据类型的初始值(此语句可以省略,结果相同)但是定义固定值时一定要使用VALUE语句定义其初始值
DECIMALS n
- DECIMALS n 用于指定1~14位小数,只适用于数据类型P
ABAP基本数据类型
固定长度的ABAP基本数据类型
- ABAP提供八种固定长度的基本数据类型
- 数据类型D、F、I已经定义了技术属性,因此不用在程序中定义即可直接使用
- 使用数据类型C、N、X时需要指定其长度
- 类型P不指定DECIMALS就无法识别小数位
数字运算符
基本运算法则
- 在使用类型F时需要调用FLTP_CHAR_CONVERSION函数把类型转换成字符型后进行输出,调用函数时指定参数DECIM,则通过四舍五入计算出相应长度的小数位
数字运算用函数
FLoating-Point函数
数字型
整形I
- 值的范围是-2147483648~2147473647
- 值支持证书类型
- 非证书类型的数据会进行四舍五入
- 用于计算行数、条目数、索引值等
浮点型F
- 值的范围是1X10-307~1X10308
- 用于定义指数,因此需要调用“FLTP_CHAR_CONVERSION"函数把其他类型转换为其他数据类型后才可以输出。
- 类型F转化成二进制后才可以输出
- 若要显示高进度的数据,则应该使用类型P
- 数值较大或者不需要进行四舍五入时可以使用类型F(因为在取近似值时使用,因此使用的时候需要注意)
小数型P
- 允许有小数位
- 可用的长度为1~16,小数位最大长度是14位
- 程序属性设置中应该选择Fixed Point arithmetic,若不选择,类型P就没有意义,与整数类型相同
- 常用于精度比较高的数据
字符串类型
文本字段C
- 定义C类型数据时需要指定其字段长度。如果没有指定字段长度或数据类型时,默认为1位。指定类型C的长度是可以在变量后使用“()”也可以用关键字LENGTH指定。
- 关键字LENGTH只适用于指定类型C、N、X、P的长度
数字文本型N
- 以字符串的形式显示数字类型
日期型D
- sy-datum是存储当天日期的系统变量
- 日期型变量进行计算时可以计算出天数
时间型T
- 系统变量sy-uzeit中包含现在的时刻
- 时间型变量以秒为单位进行运算
Hexadecimal类型
- 十六进制类型是指将1B由2个码位显示的类型
- 十六进制是为了满足二进制编码形式无法变现的数字而出现的类型,是低级PC Assembly表示方法。
- C语言等很多语言都在使用此类型。在ABAP程序中十六进制主要用于印刷和图片处理
不定长ABAP基本数据类型
String字符串
常用的字符串命令
Find
- 当ABAP字母中存在字母B是,返回0
REPLACE
- 替换
TRANSLATE
- 大小写字母转换
SHIFT
- 依次向左移动
CONDENSE
- 去掉空格并向左对齐,经常与NO-GAPS一起使用去掉空格
OVERLAY
- 填充Character的空格,但不覆盖原来字幕
CONCATENATE
- 连接两个字符串
SPLIT
- 分割,如ABCAP》以字符C为中间分为AB和AP
在ABAP程序中参照次数据类型定义补丁长度的变量,最有代表性的类型时String型与基本数据类型C不同之处在于当程序执行是产生动态内存
局部数据类型
声明类型
- 在程序中声明的数据类型视为局部数据类型
- 利用关键字TYPES声明
结构体类型
- 嵌套结构体类型
ABAP数据字典数据类型
概述
- ABAP数据字典(表、结构体、数据元素)是在所有程序中都可以用来声明变量的因素
- 数据字典中的数据类型为全局数据类型。
- 可以通过T-CODE:SE11创建、修改、查询数据字典
赋值
给变量赋值
在ABAP中定义变量或者处理实际数据时会给变量赋值。
定义变量时可以通过VALUE语句赋初始值,实际处理数据中使用MOVE或者WRITE to 语句给变量赋值
MOVE TO 语句与a=b中的= equal语句相同
赋值字符串字段值时可以使用MOVE-CORRESPONDING语句。这是TO的字段名可以不相同
MOVE-VORRESPONDING语句还常用于不同结构体之间赋值
- 特点是找到名字相同的字段名进行赋值
变量与常量
概述
- 变量是用于在程序的分配的存储区域中存储值的命名数据对象。
- 您必须先声明所有变量,然后才能使用它们。
- 用户可以在ABAP语句的帮助下更改变量的内容。
- ABAP中的每个变量都有一个特定的类型,它决定了变量内存的大小和布局;
- 可以存储在该存储器内的值的范围; 以及可以应用于该变量的一组操作。
系统变量
- ABAP系统变量可从所有ABAP程序访问。
- 这些字段实际上由运行时环境填充。
- 这些字段中的值指示系统在任何给定时间点的状态。
- 您可以在SAP中的SYST表中找到系统变量的完整列表。
- 可以使用“SYST-"或“SY-"访问SYST结构的各个字段。
参考变量
- REF TO附加声明一个引用变量ref。
- REF TO之后的规范指定了引用变量的静态类型。
- 静态类型限制< ref>的对象集合。 可以参考。
- 引用变量的动态类型是它当前引用的数据类型或类。
- 静态类型总是更加通用或与动态类型相同。
- TYPE添加用于创建绑定引用类型和起始值,并且只能在VALUE添加后指定IS INITIAL。
常量
- 分配给常数的值在程序执行期间不能更改。
- 程序中经常使用的值可以定义为常量
- 当修改常量时只需要修改一处即可,这样就可以接上时间
- 为数字起有意义的名字作为常量使用可以提高程序的可读性
- 子主题 5
- 子主题 6
静态变量
在子程序块中(FORM,FUNCTION)中要持续保存局部变量值时定义为静态变量
在FORM语句块内用STATICS定义的局部变量的值可以保持到程序结束
LV_VAL在每次调用PERFORM语句时
- 不会初始化,一直保持原有值
没有使用STATIC语句而是使用DATA语句定义了变量lv_val
- 因此每次调用PERFORM语句时,局部变量LV_VAL都会被初始化,丢失原有值
TABLES
使用TABLES语句定义ABAP数据字典中的数据表、视图、就结构体,会生成与ABAP数据字典具有相同结构的数据对象
这种表工作区,在程序中与结构体的用法相同
ABAP命名规则
概述
为什么要有命名规则
- 可以提高代码可读性
- 减少变量间的冲突
- 提高结构统一性
SAP规定创建ABAP数据字典的程序及数据对象后命名时,要以Z或Y开头且不能使用如INSERT/APPEND等关键字
每个客户自己制定统一规范并遵守即可
ABAP程序允许定义的变量名最大长度为30位
包含“_“符号
变量名的前两位表示范围及类型,区分符号“_”和最后单词将省略变量的具体功能
如果需要戏份命名规则,可以吧前缀长度设为三位
前缀一
- 范围
前缀二
- 数据类型
前缀三
- 数据类型
如GVF_CARRID变量中前缀GVF代表的意思是
G全局,V字段,F浮点型
检查命名规则(Code Inspector)
- 检查命名规则是检查ABAP程序是否符合命名规则的工具,执行T-CODE:SCI的效果
全局变量
- 全局变量是指在一个程序或函数内可以访问的数据类型。在程序内部的所有领域里都可以参照并修改,因此没有局限性。在程序激活状态下全局变量一直占用着内存地址。
- 定义全局变量时以G开头
局部变量
- 是指只有在程序模块内部有效的变量。所谓的模块式只函数子程序等为了实现单位功能集合成块的代码。
- 定义局部变量时以L开头
ABAP基本语法
ABAP程序使用句号“ . ”表示一个语句的结束
代码的注释方法有下列两种
- 符号“*” 如 *abcd
- 符号“ “ ” 如 “aaaaa
字符串使用单引号显示‘ ’
命令要用空格分开
冒号表示法
- 如果每个语句的开头是相同的,则连续语句可以链接在一起。 这是使用冒号(:)运算符和逗号,用于终止单个语句,就像句点结束正常语句。
MOVE语句
- MOVE语句与符号“=“有相同功能,用于赋值,另外还有MOVE-CORRESPONDING语句,两个不同结构的结构体或内边之间相互赋值时使用,此句的特点是复制时与顺序无关,自动查找仙童名字的变量进行复制。
Strlen语句
- 用于返回字符串长度
WRITE语句
- WRITE语句用于输出报表数据用“/”表示换行
关于系统变量SY-SUBRC
在使用String的FIND时有个疑惑,为什么我前面没有定义这个变量,这个变量时哪来的,看前缀SY,猜测SY-SUBRC是系统变量
使用SELECT语句选择查询:
- SY-SUBRC = 0: 至少有一行数据,当ENDSELECT语句执行完,SY-DBCNT中保存着记录的个数。
- SY-SUBRC = 4: 没有数据。
- SY-SUBRC = 8: 只有使用“SELECT SINGLE FOR UPDATE”时才会有,
表示: WHERE条件指定的记录不止一行,结果是没有记录被选中。
使用INSERT语句,向表中插入一行,必须注意INSERT的顺序与表中字段的顺序一致
- SY-SUBRC = 0: 插入成功,SY-DBCNT包含了插入的行数,0或1。
- SY-SUBRC = 4: 由于有相同的KEY存在,所以插入失败。
使用LOOP语句来遍历一个内表:
- SY-SUBRC = 0: 循环至少被执行一次。
- SY-SUBRC = 4: 循环没有被执行,可能是没有数据,也可能是没有符合条件的记录。
使用DELETE语句来删除一条记录:
- SY-SUBRC = 0: 找到一行并删除之,如果该表有不唯一主键,也就是有多条重复的记录,则只删除第一条记录。
- SY-SUBRC = 4: 没有找到符合条件的记录,也没有删除。
使用UPDATE语句来更新一条记录:
- SY-SUBRC = 0: 找到记录并更新,(如果有多条记录呢?)
- SY-SUBRC = 4: 没有找到符合条件的记录,也没有更新。
文章来自于网络,如果侵犯了您的权益,请联系站长删除!