ABAP基本语法学习关键语句的写法(参考模板)
SAPABAP基础语法培训教程珍藏版

9
SAP实施结构设计
▪ 实施过程中需要多少个R/3系统 ▪ 需要多少个Client,具体任务是什么 ▪ 各个集团将如何分布在不同的系统中 ▪ ——通常将“开发”、“质量控制(测
试)”、“产品”分别置于三个不同系统的 不同集团中
2020/6/12
10
开发过程中标准制定
▪ 制定命名规则:自定制的所有对象应当以“Z”或
15
开发类别
▪ 仓库对象创建时,需要指定所属的开发类别
▪ 仓库对象在R/3仓库中按照开发类别分类,这些对 象的集合形成的组织单元即为开发类别
▪ 开发类别的主要功能是对仓库对象进行管理(目录 管理及传输控制管理等)
▪ 开发类别中所包含的仓库对象可以通过对象浏览器 (SE80)查看和维护
▪ 开发类是ABAP工作台对象,其修改通过Transport Organizer记录,开发类别的开发类别是其自身
助
▪ 事务码:SE11
2020/6/12
23
ABAP Training
▪ SAP及ABAP/4 Overview ▪ 系统开发语言 ▪ 创建企业报表 ▪ 应用事务开发 ▪ 商用文档设计
2020/6/12
24
企业报表类型
▪ 静态报表 ▪ 交互式报表
2020/6/12
25
页 数: XXX 会计年度: XXXX 库存总价: XXXX.XX(货币码)
客户/服务器
PS
项目管理
PM
工厂维护
HR
人事管理
WF
工作流程管理
IS
行业解决方案
财务系统
客户及工业部门的 特殊要求
2020/6/12
4
SAP新的业务模块和组件
一些我工作中经常使用的ABAP新语法和函数,关键字,可以提高工作效率

一些我工作中经常使用的ABAP新语法和函数,关键字,可以提高工作效率我平时工作积累下来的一些代码小片段。
(1) 直接批量生成数据到ABAP内表里:* 2017-05-14 7:17PM in Xun's house, WieslochINSERT demo_join1 FROM TABLE @( VALUE #(( a = 'a1' b = 'b1' c = 'c1' d = 'uu' )( a = 'a2' b = 'b2' c = 'c2' d = 'uu' )( a = 'a3' b = 'b3' c = 'c3' d = 'vv' )( a = 'a4' b = 'b4' c = 'c4' d = 'ww' ) ) ).(2) 采用内联方式遍历ABAP内表:DATA address_annos TYPE STANDARD TABLE OF field_anno-annonameWITH EMPTY KEY.address_annos = VALUE #(( '.FULLNAME' )( 'SEMANTICS.ADDRESS.STREET' )( 'SEMANTICS.ADDRESS.CITY' )( 'SEMANTICS.ADDRESS.ZIPCODE' )( 'SEMANTICS.ADDRESS.COUNTRY' ) ).DATA address_components TYPE STANDARD TABLE OF field_anno-fieldnameWITH EMPTY KEY.address_components = VALUE #(FOR address_anno IN address_annos( VALUE #( fieldannos[ annoname = address_anno ]-fieldnameDEFAULT '---' ) ) ).(3) 两个内表间数据的复制,两个内表的列结构可以不同,开发人员需要额外传入一个映射表,告诉corresponding关键字,源内表的哪一列应该赋到目标内表的哪一列。
ABAP语法完整版

SAP ABAP / 4 基础知识学习数据类型C :字符串D :日期型格式为YYYYMMDD 例:'1999/12/03'F : 浮点数长度为8I :整数N :数值组成的字符串如:011,'302'P : PACKED数用于小数点数值如:12.00542T : 时间格式为:HHMMSS 如:'14:03:00'X : 16进制数如:'1A03'*-------------------------------------------------------------------------------------* 变量声明DATA <F> [<Length>] <type> [<value>][decimals]<F> 变量名称<length><type> 变量类型及长度<value> 初值<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 <c> [<length>] <type> [<value>] [<decimals>]系统专用变量说明系统内部专门创建了SYST这个STRUCTURE,里面的栏位存放系统变量,常用的系统变量有: SY-SUBRC: 系统执行某指令后,表示执行成功与否的变量,'0'表示成功SY-UNAME: 当前使用者登入SAP的USERNAME;SY-DATUM: 当前系统日期;SY-UZEIT: 当前系统时间;SY-TCODE: 当前执行程序的Transaction codeSY-INDEX: 当前LOOP循环过的次数SY-TABIX: 当前处理的是internal table 的第几笔SY-TMAXL: Internal table的总笔数SY-SROWS: 屏幕总行数;SY-SCOLS: 屏幕总列数;SY-MANDT: CLIENT NUMBERSY-VLINE: 画竖线SY-ULINE: 画横线TYPE 关键字用来指定资料型态或声明自定资料型态Example:TYPES: BEGIN OF MYLIST,NAME(10) TYPE C,NUMBER TYPE I,END OF MYLIST.DATA LIST TYPE MYLIST.LIKE 关键字跟TYPE关键字使用格式相同, 如DATA TRANSCODE LIKE SY-TCODE.不同的是LIKE 用在已有值的资料项, 如系统变量, 而TYPE关键字则是用在指定资料型态。
SAP ABAP程序设计基础教程第4章ABAP语言基本语法

为代码行设置断点
ABAP程序的流程控制-逻辑表达式
比较所有基本类型的数据对象
运算符 含义
EQ
或 =
等于
NE
或 <> 或
><
不等于
LT
或 <
小于
LE
或 <=
小于等于
GT 或 >
大于
GE
或 >=
大于等于
比较字符串
运算符 含义 CO 仅包含
CN
不仅包含
CA
包含任何
NA
不包含任何
CS
包含字符串
NS
不包含字符串
CP
包含模式
处理字符串
连接字符串 : CONCATENATE <s1> ... <sn> INTO <s> [SEPARATED BY <c>]. 拆分字符串 : SPLIT <s> AT <sep> INTO <s1> ... <sn>. 搜索字符串 : SEARCH <s> FOR <sub>. 获得字符串长度 [COMPUTE] <n> = STRLEN( <s> ). 替换字符串内容 : REPLACE <s1> WITH <s2> INTO <src> [LENGTH <l>]. 字符串的大小写转换: TRANSLATE <s> TO UPPER CASE. :将字符串转换成大写 TRANSLATE <s> TO LOWER CASE. :将字符串转换成小写
第4章ABAP语言基本语法
ABAP新语法记录(一)

ABAP新语法记录(⼀)原⽂链接:主要内容内联声明构造表达式内表操作Open SQL其他本⽂列出了ABAP新语法的⼀些使⽤⽅式,供⼤家学习参考。
内联声明代码实现:*&----------------------------------------------------------------------* 主题⼀:内联声明* 语法:DATA(...) ,FILED-SYMBOL(…)* 1. 定义变量* 2. 定义结构* 3. 定义内表* 4. 定义指针*&---------------------------------------------------------------------** 记录时间:23.03.2019 记录⼈: YALUOO*&---------------------------------------------------------------------**&*********取数"客户的标签信息表SELECT *FROM ztcust_tagINTO TABLE @DATA(gt_data)UP TO 5 ROWS.cl_demo_output=>write( gt_data ).*&*********定义变量DATA(lv_card_no) = '1000023312'. "会员号cl_demo_output=>write( lv_card_no ).*&*********定义结构READ TABLE gt_data INTO DATA(gs_data) INDEX 1.IF sy-subrc EQ 0.DATA(ls_data) = gs_data.cl_demo_output=>write( ls_data ).ENDIF.*&*********定义内表DATA(lt_data) = gt_data.cl_demo_output=>write( lt_data ).*&*********定义指针LOOP AT lt_data ASSIGNING FIELD-SYMBOL(<fs_data>) WHERE card_no EQ lv_card_no.<fs_data>-create_user = 'YALUOO'. "修改创建⼈ENDLOOP.cl_demo_output=>write( lt_data ).cl_demo_output=>display( ).运⾏结果:构造表达式代码实现:*&----------------------------------------------------------------------* 主题⼆:构造表达式* 1. 实现构造: NWE -创建数据对象或类的实现* 1.1 构造单值* 1.2 构造结构* 1.3 构造内表* 1.4 构造类* 2. 值构造: VALUE - 创建⼀个类型为dypee的数据* 2.1 构造结构* 语法: ... VALUE dtype | #( [BASE dobj] comp1 = dobj1 comp2 = dobj2 ... ) ...* 2.2 构造内表:* 语法: ... VALUE dtype | #( [BASE itab] ( (line1-com1 = dobj1) ( line2 ..) ... ) ...* note: dytpe可接具体类型或者# ,接#数据类型必须确定* 可以嵌套使⽤;* 内表赋值不能带表头;* 3. 组件构造: CORRESPONDING* 语法:... CORRESPONDING dtype | #( [BASE dobj] comp1 = dobj1 comp2 = dobj2 ... ) ... *&---------------------------------------------------------------------** 记录时间:23.03.2019 记录⼈: YALUOO*&---------------------------------------------------------------------*" ⾃定义类型TYPES: BEGIN OF ty_man,name TYPE char10, " 姓名sex TYPE char1, " 性别age TYPE p DECIMALS 2," 年龄school TYPE char20, " 学校END OF ty_man.DATA: gt_man TYPE TABLE OF ty_man.*&*********结构赋值DATA(gs_man) = VALUE ty_man( name = 'Tom' sex = 'B' ).cl_demo_output=>write( gs_man )."附加年龄信息gs_man = VALUE #( name = 'Tom' sex = 'B' age = 18 ).*DATA(gs_man_02) = VALUE #( name = 'Tom' sex = 'B' age = 18 ) . "错误,未明确类型cl_demo_output=>write( gs_man )."附加学校信息gs_man = VALUE ty_man( BASE gs_man school = 'A SCHOOL' ).cl_demo_output=>write( gs_man )."调整学校信息gs_man = VALUE #( BASE gs_man school = 'B SCHOOL' ).cl_demo_output=>write( gs_man ).*&*********内表赋值gt_man = VALUE #( ( name = 'Anna' sex = 'G' age = 17 ) ( name = 'Ann' sex = 'G' age = 16 ) ).cl_demo_output=>write( gt_man )."内表基础上附加额外数据gt_man = VALUE #( BASE gt_man ( name = 'Xiaohong' sex = 'G' age = 20 school = 'C SCHOOL' ) ( name = 'Xiaoming' sex = 'B' age = 21 school = 'D SCHOOL' ) ).cl_demo_output=>write( gt_man ).cl_demo_output=>display( ).&*********Range 表赋值DATA: r_data TYPE RANGE OF ztcust_tag-data_type. "内表不带表头RANGES: r_data_01 FOR ztcust_tag-data_type. "内表带表头-不⽀持"逐步往下填充内表数据r_data = VALUE #( sign = 'I' option = 'BT' ( low = 10 high = 20 )( low = 100 high = 150 )option = 'GT' ( low = 180 )option = 'LT' ( low = 200 )option = 'EQ' ( low = 8 )sign = 'E' option = 'BT' ( low = 15 high = 18 )).cl_demo_output=>write( r_data ).cl_demo_output=>display( ).运⾏结果:代码实现:TYPES: BEGIN OF ty_data.INCLUDE TYPE ztcust_tag.TYPES: flag TYPE char1,END OF ty_data.TYPES: BEGIN OF ty_data_t.INCLUDE TYPE ztcust_tag.TYPES: flag_t TYPE char1,END OF ty_data_t.DATA: gs_data_02 TYPE ty_data,gs_data_03 TYPE ty_data_t.*&*********取数SELECT SINGLE *FROM ztcust_tagINTO @DATA(gs_data).*&*********对应字段赋值gs_data_02 = CORRESPONDING #( gs_data ).cl_demo_output=>write( gs_data_02 ).gs_data_03-flag_t = abap_true.gs_data_03 = CORRESPONDING #( BASE ( gs_data_03 ) gs_data_02 )."不指定BASE 初始值会丢失 cl_demo_output=>write( gs_data_03 ).gs_data_03 = CORRESPONDING #( gs_data_02 )."初始值丢失cl_demo_output=>write( gs_data_03 ).cl_demo_output=>display( ).运⾏结果:内表操作代码实现:*&----------------------------------------------------------------------* 主题三:内表操作* 1. 内表表达式- 相当于READ TABLE* 语法:… itab[ … ] …* note: 如果未找到对应的记录就会抛出CX_SY_ITAB_LINE_NOT_FOUND异常,SY-SUBRC不会记录* 可以通过line_exists预定义函数改进* 2. 內表预定义函数* 2.1 line_exists( ) - 判断记录是否存在* 2.2 line_index( ) - 获取符合记录的索引值* 3. 內表推导 - FOR 理解为LOOP,是对实现操作符 NEW 和值操作符VALUE的⼀种增强,作⽤是构造內表内容* 语法1 : …FOR i = ... [THEN expr] UNTIL | WHILE log_exp ...* 语法2 : …FOR wa|<fs> IN itab [INDEX INTO idx][cond][let_exp]...* 4. 內表筛选-FILTER -筛选内表中的数据* 语法: FILTER type( itab [EXCEPT] [IN ftab] [USING KEY keyname ]* WHERE c1 op f1 [AND c2 op f2 [...] ] ) ...* note: WHERE对应过滤的条件,是必须要指定的,注意有些操作符是不能在WHERE中使⽤的,如:OR , NOT 等* EXCEPT如果不指定则表⽰满⾜条件的找出来,如果指定则表⽰不满⾜条件的找出来* 5. 內表缩减* 语法: ... REDUCE type(* [let_exp]* INIT {x1 = rhs1}|{<x1> = wrexpr1}|{x1|<x1> TYPE dtype1}* {x2 = rhs2}|{<x2> = wrexpr2}|{x2|<x2> TYPE dtype2}* ...* FOR for_exp1* FOR for_exp2* ...* NEXT ...* {x1 = rhs1}|{<x1> = wrexpr1}* {x2 = rhs2}|{<x2> = wrexpr2}* ... ) ...* 6. 内表分组*&---------------------------------------------------------------------** 记录时间:23.03.2019 记录⼈: YALUOO*&---------------------------------------------------------------------**&*********取数SELECT *FROM ztcust_tagINTO TABLE @DATA(gt_data)UP TO 5 ROWS.*&*********定义变量DATA(lv_card_no) = '1000023312'. "会员号cl_demo_output=>write( gt_data )."通过索引值判断某⼀⾏记录是否存在,也可通过条件判断IF line_exists( gt_data[ 4 ] )."获取第4⾏记录DATA(ls_data) = gt_data[ 4 ]."获取第4⾏记录中的标签类型DATA(lv_classify) = gt_data[ 4 ]-classify."标签类型cl_demo_output=>write( ls_data ).cl_demo_output=>write( lv_classify ).ENDIF."获取符合条件的索引值,未找到LV_INDEX为0DATA(lv_index) = line_index( gt_data[ card_no = lv_card_no classify = lv_classify ] ).IF lv_index NE 0 AND line_exists( gt_data[ lv_index + 1 ] ) .CLEAR ls_data."获取下⼀⾏记录ls_data = gt_data[ lv_index + 1 ].cl_demo_output=>write( ls_data ).ENDIF.cl_demo_output=>display( ).运⾏结果:代码实现:TYPES: BEGIN OF ty_line,col1 TYPE i,col2 TYPE i,col3 TYPE i,END OF ty_line, "结构体ty_tab TYPE STANDARD TABLE OF ty_line WITH EMPTY KEY.*&*********通过语法1给新內表赋值 - 类似于JAVA中的FOR循环"for每次遍历⼀次都将结果,通过value赋值给内表gt_itabDATA(gt_itab) = VALUE ty_tab( FOR j = 11 THEN j + 10 UNTIL j > 40 "初始值,递增量,结束条件" 结构中的字段赋值-参考类型ty_tab( col1 = j col2 = j + 1 col3 = j + 2 )"11 12 13 - value 到 gt_itab"21 22 23 - value 到 gt_itab"31 32 33 - value 到 gt_itab"41 - 结束循环).cl_demo_output=>display( gt_itab ).运⾏结果:代码实现:*&*********同过语法2给新內表赋值*&*********取数"客户标签信息SELECT *FROM ztcust_tagINTO TABLE @DATA(gt_data)UP TO 5 ROWS.IF gt_data IS NOT INITIAL."标签⽇期⽇志表SELECT *FROM ztcust_tag_logINTO TABLE @DATA(gt_data_t)FOR ALL ENTRIES IN @gt_dataWHERE tag_id = @gt_data-tag_id.SORT gt_data_t BY tag_id.DELETE ADJACENT DUPLICATES FROM gt_data_t COMPARING tag_id.ENDIF.cl_demo_output=>write( gt_data ).cl_demo_output=>write( gt_data_t ).TYPES: BEGIN OF ty_tag_line,"标签表tag_id TYPE ztcust_tag-tag_id, "标签IDcard_no TYPE ztcust_tag-card_no, "会员号tag_name TYPE ztcust_tag-tag_name, "标签值"⽇志表sernumber TYPE ztcust_tag_log-sernumber, "流⽔号uname TYPE ztcust_tag_log-uname, "⽤户名log_date TYPE ztcust_tag_log-log_date, "备份⽇期log_time TYPE ztcust_tag_log-log_time, "备份时间message_type TYPE ztcust_tag_log-message_type,"消息类型message TYPE ztcust_tag_log-message, "消息⽂本END OF ty_tag_line,ty_tag_tab TYPE STANDARD TABLE OF ty_tag_line WITH EMPTY KEY.*&*********将标签表和⽇志表的数据整合在⼀起,构建新的内表DATA(gt_itab) = VALUE ty_tag_tab( FOR ls_itab IN gt_data WHERE ( classify = 'brands' )"遍历标签类型为brands; ls_itab 为隐形声明或者<fs> (tag_id = ls_itab-tag_idcard_no = ls_itab-card_notag_name = ls_itab-tag_namesernumber = VALUE #( gt_data_t[ tag_id = ls_itab-tag_id ]-sernumber ) "通过VALUE语句和内表表达式赋值uname = VALUE #( gt_data_t[ tag_id = ls_itab-tag_id ]-uname )log_date = VALUE #( gt_data_t[ tag_id = ls_itab-tag_id ]-log_date )log_time = VALUE #( gt_data_t[ tag_id = ls_itab-tag_id ]-log_time )message_type = VALUE #( gt_data_t[ tag_id = ls_itab-tag_id ]-message_type )message = VALUE #( gt_data_t[ tag_id = ls_itab-tag_id ]-message ))).cl_demo_output=>write( gt_itab ).*&*********使⽤操作符FILTER过滤DATA: gt_filter TYPE HASHED TABLE OF ty_tag_lineWITH UNIQUE KEY uname.***INitialize filter Tablegt_filter = VALUE #( ( uname = 'XUWENPAN' ) )."找出满⾜条件的数据DATA(gt_out) = FILTER #( gt_itab IN gt_filter WHERE uname = uname ) .cl_demo_output=>write( gt_out )."找出不满⾜条件的数据DATA(gt_out_t) = FILTER #( gt_itab EXCEPT IN gt_filter WHERE uname = uname ) .cl_demo_output=>write( gt_out_t ).cl_demo_output=>display( ).运⾏结果:代码实现:*&*********取数TYPES: BEGIN OF ty_man,name TYPE char10, " 姓名sex TYPE char1, " 性别age TYPE p DECIMALS 2," 年龄school TYPE char20, " 学校END OF ty_man.DATA: gt_man TYPE TABLE OF ty_man.gt_man = VALUE #( ( name = 'Anna' sex = 'G' age = 17 )( name = 'Ann' sex = 'G' age = 16 ) ).cl_demo_output=>write( gt_man )."内表基础上附加额外数据gt_man = VALUE #( BASE gt_man ( name = 'Xiaohong' sex = 'G' age = 20 school = 'C SCHOOL' )( name = 'Xiaoming' sex = 'B' age = 21 school = 'D SCHOOL' ) ).cl_demo_output=>write( gt_man )."内表⾏数DATA(lv_lines) = lines( gt_man )."内表中符合条件的数据有⼏条DATA(lv_lines_g) = REDUCE i( INIT x = 0FOR ls_man IN gt_man WHERE ( sex = 'G' )NEXT x = x + 1 ).cl_demo_output=>write( lv_lines ).cl_demo_output=>write( lv_lines_g )."累计内表中符合条件的年龄之和TYPES: ty_age TYPE p DECIMALS 2.DATA(lv_sum_age) = REDUCE ty_age( INIT dage = VALUE ty_age( )FOR wa IN gt_man WHERE ( sex = 'G' )NEXT dage = dage + wa-age ).cl_demo_output=>write( lv_sum_age )."综合例⼦TYPES:BEGIN OF ty_result,sum TYPE p DECIMALS 2, "总和max TYPE p DECIMALS 2, "最⼤值avg TYPE p DECIMALS 2, "平均cunt TYPE i, "记录数END OF ty_result.DATA(ls_result) = REDUCE ty_result( INIT res = VALUE ty_result( ) "可以默认值:ty_result( min = 0 max = 0 ) FOR <fs_man> IN gt_man WHERE ( sex = 'G' ) "性别为GNEXT res-sum = res-sum + <fs_man>-age "年龄总和res-max = nmax( val1 = res-max val2 = <fs_man>-age )"最⼤年龄res-cunt = res-cunt + 1 "满⾜条件的条⽬数).ls_result-avg = ls_result-sum / ls_result-cunt. "平均值cl_demo_output=>write( ls_result ).cl_demo_output=>display( ).运⾏结果:Open SQL代码实现:*&----------------------------------------------------------------------* 主题四:Open SQL**&---------------------------------------------------------------------** 记录时间:23.03.2019 记录⼈: YALUOO*&---------------------------------------------------------------------*DATA(lv_card_no) = '1000023083'.SELECT a~tag_id, "标签IDcard_no, "会员号tag_name, "会员值sernumber, "流⽔号uname, "⽤户名log_date, "备份⽇期log_time, "备份时间message_type, "消息类型message "消息⽂本FROM ztcust_tag AS aINNER JOIN ztcust_tag_log AS bON a~tag_id = b~tag_idINTO TABLE @DATA(gt_tag)WHERE a~card_no = '1000023312' OR a~card_no = @lv_card_no AND classify = 'brands' .cl_demo_output=>display( gt_tag ).运⾏结果:。
SAPABAP基础语法培训教程

SAPABAP基础语法培训教程SAP ABAP(Advanced Business Application Programming)是一种基于ERP平台的开发语言,ABAP基础语法是程序员学习和掌握ABAP语言的基础。
本教程将为大家介绍ABAP语言的基本概念和语法规则。
1.ABAP程序结构ABAP程序由模块(MODULE)、函数(FUNCTION)和方法(METHOD)组成。
每个程序都由声明、定义和执行部分构成。
声明部分包括程序名称、输入输出参数和局部变量的声明。
定义部分包括逻辑处理和函数实现。
执行部分包括调用其他程序或函数的操作。
2.数据类型ABAP支持多种数据类型,包括整数、小数、字符串、日期和时间等。
声明和定义变量时需要指定数据类型,如:DATA num TYPE I.(整数类型的变量)ABAP还支持结构体和表格类型的数据。
在声明变量时,可以使用LIKE关键字指定一个已有变量的数据类型。
3.控制语句ABAP的控制语句包括条件语句和循环语句。
条件语句包括IF、CASE和WHEN等关键字。
例如:IF condition.statement.ELSEIF condition.statement.ELSE.statement.ENDIF.循环语句包括DO、WHILE和LOOP等关键字。
例如:DOnTIMES.statement.ENDDO.WHILE condition.statement.ENDWHILE.LOOP AT itab.statement.ENDLOOP.4.函数和方法ABAP可以定义自己的函数和方法,以供其他程序或函数调用。
函数由FUNCTION关键字定义,例如:FUNCTION function_name.statement.ENDFUNCTION.方法由METHOD关键字定义,例如:METHOD method_name.statement.ENDMETHOD.在函数和方法中可以通过EXPORTING关键字指定输出参数,通过IMPORTING关键字指定输入参数。
abap 语法手册

abap 语法手册ABAP语法手册ABAP(Advanced Business Application Programming)是一种用于SAP软件开发的编程语言。
这份手册将介绍ABAP语言的基本语法和常用用法,为开发人员提供一个参考指南。
1. 数据类型和变量声明:ABAP支持多种数据类型,例如整数(INT),浮点数(FLOAT),字符串(STRING)和日期(DATE)。
变量声明可以通过关键字DATA进行,例如:DATA: my_integer TYPE i.DATA: my_string TYPE string.2. 控制结构:ABAP支持常见的控制结构,如条件语句(IF...ELSE...ENDIF)和循环语句(DO...ENDDO,WHILE...ENDWHILE)。
例如:IF my_integer > 10.WRITE: 'The value is greater than 10'.ELSE.WRITE: 'The value is less than or equal to 10'.ENDIF.3. 函数和方法:ABAP允许定义函数和方法来实现特定的功能。
函数可以通过关键字FUNCTION和ENDFUNCTION来定义,而方法可以通过关键字METHOD和ENDMETHOD来定义。
例如:FUNCTION my_function.WRITE: 'Hello, world!'.ENDFUNCTION.4. 数据表和内表:ABAP中的数据表可以通过关键字DATA和TABLE来声明,内表可以通过关键字INTERNAL TABLE和TYPES来声明。
例如:DATA: my_table TYPE TABLE OF my_structure.DATA: my_internal_table TYPE TABLE OF my_structure.5. 数据访问:ABAP提供了方便的数据访问方法,例如通过SELECT语句从数据库中检索数据,或者通过READ TABLE语句从内表中检索数据。
ABAP基本语法

ABAP基本语法目录1.表声明12.定义变量13.常用算术操作符:14.常用比较操作:15.赋值语句26.IF语句27.CASE语句28.DO语句29.WHILE语句210.从数据库中取数据集211.取出单行记录212.WRITE语句213.ULINE语句314.SKIP语句315.定义常量316.定义结构317.TYPES语句418.LIKE语句419.输入参数520.分块语句521.定义内表522.往内表中添加记录623.用LOOP读取内表数据624.用READ读取内表数据625.把数据库的记录读入内表626.CLEAR清空表头和表记录627.DELETE删除内表记录628.REFRESH删除内表记录629.FREE删除内表记录730.在内表中插入记录731.修改内表记录732.对内表进行排序733.内表的控制语句734.循环跳转语句735.常用系统变量836.子程序的定义837.子程序的调用838.子程序的参数传递839.常用事件840.跳出事件的方法9ABAP/4:Advanced Business Application Programming1.表声明Tables: 表名[,表名]. 声明多个表时可用逗号分隔当你声明了一个数据表的同时,系统也同时自动生成了一个和数据表同名的结构,结构的变量集等于数据表里面的字段。
2.定义变量Data: v1[(l)] [type t] [decimals d] [value 'xxx'].v1 是变量名。
(l) 是变量的长度。
t 是数据类型。
d 是小数位。
'xxx'是缺省值。
如:data num(10) type p decimals 3 value '1.12'.3.常用算术操作符:5.赋值语句total = 10.mess = 'this is a test!'.如果字符串中包括 ' 号,用 '' 进行付值,如:mess = 'this is a ''test''! '.6.IF语句if i = 2.write 'i 等于 2'.[else.write 'i 不等于 2'.]endif.7.CASE语句case i. 类似于VFP中的DO CASE语句when 1. write 'i = 1'.when 2. write 'i = 2'.[when others. write 'i <> 1 and i <> 2'.]endcase.8.DO语句do [n] times. 类似于VFP中的FOR语句[执行代码]enddo.9.WHILE语句while [条件]. 类似于VFP中的DO WHILE语句[执行语句]endwhile.10.从数据库中取数据集select * from 数据表 [where 条件].[操作语句]endselect.如:select * from t000 [where mandt < 200].write: / t000-mandt,t000-mtext.endselect.11.取出单行记录select single * from 数据表 [where 条件]. 注:仅取出符合条件的第一行记录select single 字段 from 数据表 into 变量 [where 条件].12.WRITE语句write: [/][定位][数据1][,[定位] [数据2]]……[/] 为插入一行空行,注意单独write一个[/]和在其它数据之前加 [/] 的效果是不一样的,单独的write[/]在插入空行后光标定位在空行的下面,在其它数据前加[/]在插入空行后光标定位于所插的空行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ABAP基本语法学习关键语句的写法内表建立过程:1、声明一个结构体2、用声明好的结构体作为工作区,声明一个内表内表名称like standard table of 结构体名称,内表名称like sorted table of 结构体名称,内表名称like harshed table of 结构体名称。
后面可以用到with 选项来进行关键字的声明。
基本语法如下:DATA itab { {TYPE tabkind OF [REF TO] type}| {LIKE tabkind OF dobj} }[WITH key] [INITIAL SIZE n][WITH HEADER LINE][VALUE IS INITIAL][READ-ONLY].DATA rtab {TYPE RANGE OF type}|{LIKE RANGE OF dobj}[INITIAL SIZE n][WITH HEADER LINE][VALUE IS INITIAL][READ-ONLY].此语句可以定义一个范围表,在操作数据库时可以用来作为判断数据选择的条件描述。
3、向内表中插入数据,插入数据可以用insert数据into内表语句或者是append数据to内表语句。
可以插入整个内表到另一内表insert lines of 内表名称 into table 另一内表名称。
亦可以进行累加插入:collect 数据into 内表名称。
相同的数据进行累积。
4、修改内表数据,利用modify 关键字,modify 内表名称 from 数据(用结构体表示的数据)。
可以修改多行,modify 内表名称 from 数据 transporting 关键字 where 条件。
5、读内表数据的几种操作方法:用Include来构造一个结构体INCLUDE { {TYPE struc_type} | {STRUCTURE struc} }[AS name [RENAMING WITH SUFFIX suffix]].TYPES: BEGIN OF t_day,work TYPE c LENGTH 8,free TYPE c LENGTH 16,END OF t_day.DATA BEGIN OF week.INCLUDE TYPE t_day AS monday RENAMING WITH SUFFIX _mon.INCLUDE TYPE t_day AS tuesday RENAMING WITH SUFFIX _tue.INCLUDE TYPE t_day AS wednesday RENAMING WITH SUFFIX _wed. DATA END OF week.可以用两种方式来访问结构体的内容:1、直接用结构体的名称来访问:week-monday-work, week-monday-free, week-tuesday-work2、用重新命名的后缀名字来访问:week-work_mon, week-free_mon, week-work_tue类对象的定义方式:CLASS class DEFINITION [class_options].[PUBLIC SECTION.[components]][PROTECTED SECTION.[components]][PRIVATE SECTION.[components]]ENDCLASS.类对象的实现方式:CLASS class IMPLEMENTATION....METHOD ......ENDMETHOD....ENDCLASS.类对象的继承:CLASS class DEFINITIONLOCAL FRIENDS class1 class2 ...intf1 intf2 ... CLASS class DEFINITION { {DEFERRED [PUBLIC]} | LOAD }.[PUBLIC][INHERITING FROM superclass][ABSTRACT][FINAL][CREATE {PUBLIC|PROTECTED|PRIVATE}][SHARED MEMORY ENABLED][FOR TESTING][[GLOBAL] FRIENDS class1 class2 ...intf1 intf2 ...].Deferred 关键字可以预先声明一个未被定义的类。
类方法声明语句:METHODS meth [ABSTRACT|FINAL][IMPORTING parameters [PREFERRED PARAMETER p]][EXPORTING parameters][CHANGING parameters][{RAISING|EXCEPTIONS} exc1 exc2 ...].METHODS meth [ABSTRACT|FINAL][IMPORTING parameters [PREFERRED PARAMETER p]]RETURNING VALUE(r) typing[{RAISING|EXCEPTIONS} exc1 exc2 ...].重载函数的声明方法:METHODS meth [FINAL] REDEFINITION。
访问上级类的函数:super->meth()。
大小写字母转换语句:TRANSLATE typ TO LOWER CASE.在ABARP程序中各种报错情况需要的例外类:CX_ROOT||--CX_STATIC_CHECK||--CX_DYNAMIC_CHECK| || |--CX_SY_ARITHMETIC_ERROR| | || | |--CX_SY_ZERODIVIDE| | || | |--CX_SY_ARITHMETIC_OVERFLOW| | || | |--CX_SY_ARG_OUT_OF_DOMAIN| | || | |--CX_SY_PRECISION_LOSS| || |--CX_SY_ASSIGN_ERROR| | || | |--CX_SY_ASSIGN_CAST_ERROR| | | || | | |--CX_SY_ASSIGN_CAST_ILLEGAL_CAST| | | || | | |--CX_SY_ASSIGN_CAST_UNKNOWN_TYPE| | || | |--CX_SY_ASSIGN_OUT_OF_RANGE| || |--CX_SY_CODEPAGE_CONVERTER_INIT| || |--CX_SY_CONVERSION_ERROR| | || | |--CX_SY_CONVERSION_OVERFLOW| | || | |--CX_SY_CONVERSION_NO_NUMBER| | || | |--CX_SY_CONVERSION_CODEPAGE| | || | |--CX_SY_CONVERSION_BASE64| | || | |--CX_SY_CONV_ILLEGAL_DATE_TIME| || |--CX_SY_CREATE_ERROR| | || | |--CX_SY_CREATE_OBJECT_ERROR| | || | |--CX_SY_CREATE_DATA_ERROR| || |--CX_SY_DATA_ACCESS_ERROR| | || | |--CX_SY_RANGE_OUT_OF_BOUNDS| | || | |--CX_SY_TAB_RANGE_OUT_OF_BOUNDS| | || | |--CX_SY_OFFSET_NOT_ALLOWED| || |--CX_SY_DYN_CALL_ERROR| | || | |--CX_SY_DYN_CALL_ILLEGAL_CLASS| | || | |--CX_SY_DYN_CALL_ILLEGAL_FORM| | || | |--CX_SY_DYN_CALL_ILLEGAL_FUNC| | || | |--CX_SY_DYN_CALL_ILLEGAL_METHOD| | || | |--CX_SY_DYN_CALL_PARAMETER_ERROR| | || | |--CX_SY_DYN_CALL_EXCP_NOT_FOUND | | || | |--CX_SY_DYN_CALL_ILLEGAL_TYPE| | || | |--CX_SY_DYN_CALL_PARAM_MISSING | | || | |--CX_SY_DYN_CALL_PARAM_NOT_FOUND | || |--CX_SY_FILE_ACCESS_ERROR| | || | |--CX_SY_FILE_AUTHORITY| | || | |--CX_SY_FILE_CLOSE| | || | |--CX_SY_FILE_IO| | || | |--CX_SY_FILE_OPEN| | || | |--CX_SY_FILE_OPEN_MODE| | || | |--CX_SY_FILE_POSITION| | || | |--CX_SY_FILE_TRUNCATE| || |--CX_SY_FIND_INFINITE_LOOP| || |--CX_SY_GEN_SOURCE_TOO_WIDE| || |--CX_SY_IMPORT_MISMATCH_ERROR| | || | |--CX_SY_IMPORT_FORMAT_ERROR| || |--CX_SY_INVALID_REGEX| || |--CX_SY_MATCHER| | || | |--CX_SY_REGEX_TOO_COMPLEX| | || | |--CX_SY_INVALID_REGEX| || |--CX_SY_MOVE_CAST_ERROR| || |--CX_SY_PROGRAM_NOT_FOUND| || |--CX_SY_PROVIDE_EXCEPTION| | || | |--CX_SY_PROVIDE_INTERVAL_OVERLAP | | || | |--CX_SY_PROVIDE_TABLE_NOT_SORTED | || |--CX_SY_READ_SRC_LINE_TOO_LONG| || |--CX_SY_REF_IS_INITIAL| || |--CX_SY_REPLACE_INFINITE_LOOP| || |--CX_SY_SCAN_SOURCE_TOO_WIDE| || |--CX_SY_SQL_ERROR| | || | |--CX_SY_OPEN_SQL_ERROR| | | || | | |--CX_SY_OPEN_SQL_DB| | | || | | |--CX_SY_DYNAMIC_OSQL_ERROR| | | || | | |-- CX_SY_DYNAMIC_OSQL_SEMANTICS | | | || | | |-- CX_SY_DYNAMIC_OSQL_SYNTAX | | || | |--CX_SY_NATIVE_SQL_ERROR| || |--CX_SY_WRITE_SRC_LINE_TOO_LONG| || |--CX_XSLT_EXCEPTION| || |--CX_XSLT_SYSTEM_ERROR| || |--CX_XSLT_ABAP_CALL_ERROR| || |--CX_XSLT_DESERIALIZATION_ERROR| || |--CX_XSLT_FORMAT_ERROR| || |--CX_XSLT_RUNTIME_ERROR| || |--CX_XSLT_SERIALIZATION_ERROR||--CX_NO_CHECK||--CX_SY_EXPORT_NO_SHARED_MEMORY||--CX_SY_EXPORT_BUFFER_NO_MEMORY||--CX_SY_GENERATE_SUBPOOL_FULL||--CX_SY_LOCALIZATION_ERROR||--CX_SY_NO_HANDLER||--CX_SY_PIPES_NOT_SUPPORTED||--CX_SY_PIPE_REOPEN||--CX_SY_REMOTE_CALL_ERROR| || |--CX_SY_RMC_COMM_FAILURE| || |--CX_SY_RMC_INVALID_STATUS| || |--CX_SY_RMC_SYSTEM_FAILURE||--CX_SY_TOO_MANY_FILES数据分配过程:1、声明一个数据引用:data 数据引用名 type ref to 类型名.2、声明字段符号:field-symbols <fs> type any.3、建立数据引用:create date(object) 数据引用名 type 类型名.4、分配引用到字段:assign 数据引用名->* to <fs>.循环程序中语句的控制级操作语句语法结构:LOOP AT itab result ...[AT FIRST....ENDAT.][AT NEW comp1....ENDAT.[AT NEW comp2....ENDAT.[...]]][ ... ][[[...]AT END OF comp2....ENDAT.]AT END OF comp1....ENDAT.][AT LAST....ENDAT.]ENDLOOP.内表数据插入的语法格式:INSERT line_spec INTO itab_position [result].读内表的语法:READ TABLE itab { table_key| free_key| index } result.描述字段属性的语句:DESCRIBE FIELD dobj[TYPE typ [COMPONENTS com]][LENGTH ilen IN {BYTE|CHARACTER} MODE][DECIMALS dec][OUTPUT-LENGTH olen][HELP-ID hlp][EDIT MASK mask].Form打印程序中的几个主要函数:Open_Form,Start_Form,Write_Form,Write_Form_Lines,Control_Form,Close_F orm,END_FORM。