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[/]在插入空行后光标定位在空行的下面,在其它数据前加[/]在插入空行后光标定位于所插的空行。
SAPABAP语法实例(二)
*SAP ABAP 语法实例调试1调试键R10巨4亘F5 F6 F7F8*巧为单袖执拧・按F5键程序将逹軒扌丸行.苦代屑中包含子程序或函数・则会辖人 该函數中单帧谓试。
•區只在本强序中单柄执行,遇到子樨序或翡數时会直蛭执疔°*F7会一丈牲执行毛労前代码所在的过程.如子桂序和函數*苦屈主程序中+则直 接执行芜廡桎序。
并返E®」上一层谓用竝F8跳过后面所有断点,程序执行完2外部、会话、调试断点调试断点-debug 时打的断点,程序远程完后就会消失 会话断点-程序运行前通过 会话断点按钮打的断点,在同一登录会话不同窗口都有效,用户注销后消失外部断点-程序运行前通过 二,外部断点按钮打的断点,用户注销后再登录还是有效,但只针对同一用户有效ABAP Ec«tor: Change Report Z3ZJ_TEXT_EDITOR2□田|函固画HI1圖 ®DH.PatteSELECT • INTO TABLE it ZSpJli 7R0M upfli.HEAT TJiSLEWITH 住丫 caixid - cclt_Z3p±ll-di5tfinGe = 2 j J 2 ・MODIFY zsptll FROM it_Z3ptli + FFReportZJZJ」EXT E0ITQR2Active三二己三.39r专4;* SelectSELECT <result> FROM <source> INTO <target> [WHERE <condition>] [GROUP BY <fields>] [HAVING <cond>] [ORDER BY <fields>].GROUP BY:用于将一组数据条目压缩为一个单行作为选择最终结果;HAVING :用于限定ORDER BY子句子数据目组的选择条件;ORDER BY :用于限定行排序;SELECT整体语法结构。
SAP ABAP基本语法介绍
类池 (程序类型为 K)
包含了类。类和接口都在类制作器中管理,事务码 SE24
7
数据类型和数据对象
形式上的变量描述叫做数据类型,由数据类型具体定义 的变量叫做数据对象 数据类型
标准数据类型(预定义数据类型)、本地数据类型、全 局数据类型
如果可能的话,尽量减少使用文字,而多用常数,这样 可以给程序维护带来很大的便利。
14
基本ABAP语句:赋值
程序开始时,程序内容被读到应用服务器的内存区,程 序中定义的数据对象也分配了相应的内存空间。 可以使用MOVE 关键字来赋值。
MOVE var1 TO var2. var2 = var1. 如果var1 和var2 的数据类型不同,就存在类型冲突的可能性,这 时候如果存在转换规则 ,则会进行自动类型转换 。
明 用内表是一个处理大量结构化数据的简单办法
19
内表类型 标准表
系统内建维护了表的行号(即索引),索引和键访问都是允许的。 当经常用索引访问表的时候就选择标准表。
排序表
数据记录在表内自动以升序进行排列,索引是系统自动维护的,索 引和键访问都可以用。如果经常使用键来访 问数据,或者希望数据 能够自动排序时,就用排序表。
定义数据类型用关键字TYPES 定义数据对象用关键字DATA
8
数据类型:预定义类型
它是SAP内置的基本数据类型,所有其他数据元素和域都是由这 些基本数据类型组合而成的。它可以分为完整的和非完整的。
完整的数据类型指它包含了与类型相关的固定长度的信息
D :日期类型,格式为YYYYMMDD,长度为8 T :时间类型,格式为HHMMSS,长度为6 I :整数类型,长度为4字节 F :浮点类型,长度为8 STRING:变长字符串类型 XSTRING:变长字节序列类型
ABAP基本语法学习关键语句的写法(参考模板)
ABAP基本语法学习关键语句的写法(参考模板)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 关键字可以预先声明一个未被定义的类。
ABAP最基础也最重要的语句之SELECT语句
ABAP最基础也最重要的语句之SELECT语句1、select⾥⾯⽤for all entries in itab 语句的话在之前要先对这个内表itab进⾏是否为空判断,即:if itab is initial的判断!2、select bukrs gjarhINTO CORRESPONDING FIELDS OF TABLE LT_DATA注意这样的写法,要放⾜够的字段去判别每⼀条数据是否⼀样,否则就会导致本来要抓两条数变成只抓到⼀条。
例如如果有两条数据: a b c e 和a b d e 如果只select前⾯两个字段,最终抓出来的结果就只有⼀个!3、select ⾥⾯的and or嵌套例⼦:SELECT VBELNPOSNN AS POSNRVBELVPOSNVFROM VBFAINTO TABLE IT_VBFAFOR ALL ENTRIES IN I_IT_SEARVBRKWHERE VBELN = I_IT_SEARVBRK-VBELNAND POSNN = I_IT_SEARVBRK-POSNRAND ( VBTYP_V = 'C'OR VBTYP_V = 'K'OR VBTYP_V = 'L' )AND VBELV IN S_VBELNAND POSNV IN S_POSNR.4、where条件的⼀些⽤法:between的⽤法: where bldat between a and b包含某个字符的where⽤法: ‘%abc%' 字符串⾥⾯包含abc’%abc‘ 字符串往右包含abc’abc%‘ 字符串往左包含abcin的⽤法: 可以是in s_bukrs(选择屏幕),也可以是 in ('3001','3002')表⽰可以为3001到3002之间5、也可以单独抓某个字段放进⼀个变量⾥⾯的:select single bukrsinto l_bukrsselect single bukrs vbelninto (l_burks, l_vbeln)6、join的⽤法:SELECT mkpf~mblnr mkpf~mjahr mseg~zeile mkpf~budat mkpf~xblnrmseg~matnr mseg~rsnum mseg~rspos mseg~menge mseg~smblnmseg~sjahr mseg~smblp mseg~bwart mseg~werks mkpf~bktxtFROM mkpf JOIN msegON mkpf~mblnr = mseg~mblnrAND mkpf~mjahr = mseg~mjahrINTO CORRESPONDING FIELDS OF TABLE imsegWHERE ( mkpf~budat BETWEEN st_date AND sy-datum )AND mkpf~mblnr GE cs_mblnrAND mkpf~mjahr GE st_yearAND mseg~werks IN werksAND mseg~rsnum NE spaceAND ( ( mseg~bwart = 'Z33' AND mseg~shkzg = 'S' )OR ( mseg~bwart = 'Z34' AND mseg~shkzg = 'H' ) ).7、SELECT语句⾥⾯的where条件,放空和 = ' '注意是不⼀样的,如果select的时候需要⽤到⼀条索引,但是⾥⾯的某个字段你是不需要输⼊的,这个时候你就要定义⼀个选择屏幕变量,这个可以作为不显⽰出来或者是⾃⼰通过renge定义的,然后放到where⾥⾯。
abap基本语法汇总(2021年整理精品文档)
(完整版)abap基本语法汇总编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整版)abap基本语法汇总)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整版)abap基本语法汇总的全部内容。
一数据类型和对象在ABAP中,可以使用与标准数据声明相似的语法处理数据类型,而与数据对象无关。
在程序中必须声明要使用的全部数据对象。
声明过程中,必须给数据对象分配属性,其中最重要的属性就是数据类型。
1。
1对算术运算的非整型结果(如分数)进行四舍五入,而不是截断。
类型 P 数据允许在小数点后有数字。
有效大小可以是从 1 到 16 字节的任何值。
将两个十进制数字压缩到一个字节,而最后一个字节包含一个数字和符号。
在小数点后最多允许 14 个数字。
1。
2 系统定义的数据对象1。
3 确定数据对象的属性如果要查明数据对象的数据类型,或者要在程序的运行期间使用其属性,可使用 DESCRIBE 语句.语法如下:DESCRIBE FIELD 〈f〉 [LENGTH <l〉] [TYPE <t> [COMPONENTS 〈n>]][OUTPUT-LENGTH 〈o>][DECIMALS 〈d〉][EDIT MASK 〈m>].将由语句的参数指定的数据对象〈f〉的属性写入参数后的变量。
DESCRIBE FIELDS 语句具有下列参数:1.3.1 确定字段长度要确定数据对象的长度,利用DESCRIBE FIELD 语句使用 LENGTH 参数,如下所示:DESCRIBE FIELD <f> LENGTH <l>。
SAPABAP基础语法培训教程
SAPABAP基础语法培训教程SAPABAP语言是用于在SAP系统中开发和定制应用程序的编程语言。
对于想要了解和掌握ABAP语言的人来说,基础语法是必不可少的。
本教程将介绍ABAP语言的基础语法,并提供一些实例和注释来帮助读者更好地理解和掌握ABAP编程。
1.ABAP编程环境在开始编写ABAP程序之前,需要在SAP系统中设置ABAP开发环境。
可以使用SAP GUI(图形用户界面)或ABAP开发工具(比如Eclipse)来进行ABAP编程。
2.第一个ABAP程序ABAP程序通常以“REPORT”关键字开头,后跟一个程序名称。
然后是“BEGINOFREPORT”(BEGIN...END)语句和程序代码。
以下是一个简单的例子:REPORTZ_MY_FIRST_PROGRAM.BEGINOFREPORT.WRITE: 'Hello, world!'.ENDOFREPORT.在这个程序中,第一行指定了程序名称为“Z_MY_FIRST_PROGRAM”。
然后使用“BEGIN OF REPORT”和“END OF REPORT”来定义程序范围。
在范围内,使用WRITE语句打印“Hello, world!”。
3.变量和数据类型在ABAP中,可以使用关键字“DATA”来声明变量。
以下是一些常见的数据类型:-STRING:字符串-CHAR:字符-INT:整数-DECIMALS:小数-DATE:日期-TIME:时间声明变量的语法如下:DATA var_name TYPE data_type.以下是一个声明变量并赋值的例子:DATA lv_name TYPE STRING.lv_name = 'John'.在这个例子中,我们声明了一个名为“lv_name”的字符串类型变量,并将其赋值为“John”。
4.条件语句ABAP提供了一些条件控制语句,比如IF、CASE和LOOP。
以下是一个使用IF语句的例子:DATA lv_age TYPE INT.WRITE: 'You are an adult.'.ELSE.WRITE: 'You are a minor.'.ENDIF.在这个例子中,我们声明一个名为“lv_age”的整数类型变量,并将其赋值为25、然后使用IF语句检查年龄是否大于等于18,如果是,则打印“You are an adult.”,否则打印“You are a minor.”。
ABAP学习(1):基本语法介绍
ABAP学习(1):基本语法介绍ABAP学习ABAP学习基本资料整理。
ABAP基本语法ABAP中不区分⼤⼩写,例如:Type 和type表⽰⼀个意思。
1基本数据类型ABAP基本数据类型:I : 整形数据;C:字符型数据;N:只包含数字的字符串;P:包装数据类型;F:浮点类型;D:⽇期类型;T:时间类型;X:⼗六进制数据。
F和P类型都保存浮点数,P的精度⽐F更⾼,⼀般使⽤P类型。
⽰例:"整型DATA:num1 type I."字符型DATA:num2(3) type C."数字字符型DATA:num3(4) type N."包装类型,decimals指定⼩数位数,只有P类型可⽤DATA:num4(10) type P DECIMALS 4."浮点型DATA:num5 type F."⽇期型DATA:num6 type D."时间型DATA:num7 type T."16进制型DATA:num8(10) type X."字符串DATA:num9 type string."C,N,X,P可以使⽤length定义长度DATA:num10 TYPE C LENGTH 14."赋值操作"move to 语句"MOVE 1333 TO num1.num1 = 1234567890.num2 = 'abc'.num3 = '0010'.num4 = '1.23456789'.num5 = '12.3456789'.num6 = sy-datum.num7 = sy-uzeit.num8 = 1234567890.write :/ 'num1=',num1,'num2=',num2,'num3=',num3,'num4=',num4,'num5=',num5,'num6=',num6,'num7=',num7,'num8=',num8."字符串转I,"不能有汉字,不能是科学计数法"num9 = '1.23300000E+2'.num9 = '12.33334'.num1 = num9.WRITE:/ 'num1',num1."字符串转Cnum9 = '中'.num2 = num9.WRITE:/ 'num2',num2."字符串转N,会将⼩数点去掉num9 = '22.33'.num3 = num9.WRITE:/ 'num3',num3."字符串转P,num9 = '12.3456'.num4 = num9.WRITE:/ 'num4',num4."字符串转F,会变成科学计数法显⽰num9 = '12.34567'.num5 = num9.WRITE:/ 'num5',num5."字符串转D,MMDDYYYY"输出:09302018num9 = '20180930'.num6 = num9.WRITE:/ 'num6',num6."字符串转T,hhmmssnum9 = '014423'.num7 = num9.WRITE:/ 'num7',num7."字符串转X,长度超过20位,截取前20字符num9 = '123456789012345678901234'.num8 = num9.WRITE:/ 'num8',num8."科学计数法转换DATA:str TYPE char25 VALUE '4.3999999999999997E-2'. DATA:m_str LIKE CHA_CLASS_DATA-SOLLWERT. DATA:c_str(16) TYPE C.DATA:c_num(16) TYPE P DECIMALS 3.MOVE str to m_str."科学计数法字符串转换成数字CALL FUNCTION'QSS0_FLTP_TO_CHAR_CONVERSION' EXPORTINGI_NUMBER_OF_DIGITS = 3I_FLTP_VALUE = m_strI_VALUE_NOT_INITIAL_FLAG = 'X'I_SCREEN_FIELDLENGTH = 16 IMPORTINGE_CHAR_FIELD = c_str.IF sy-subrc = 0.WRITE:/ c_str.c_num = c_str.WRITE:/ c_num.ENDIF."不⽤function转换,QSOLLWERTE作为中间数据"将科学计数法字符串转换为其他数据DATA:mid_str TYPE QSOLLWERTE.mid_str = str.c_num = mid_str.View Code2 type定义数据类型语法结构:Types :<类型名> type <数据类型>Types :<类型名> like <数据对象或数据类型>定义结构体Types: begin of <结构名>,<资料名> type <数据类型>,…………end of <结构名>.Data: begin of <结构名>,<资料名> type <数据类型>,…………end of <结构名>."******************************************************************"type定义数据类型"******************************************************************TYPES: length TYPE I.TYPES: str(20) TYPE C.TYPES: BEGIN OF person,Name(10) type C,Age type I,END OF person.3变量声明相关语法:data: <变量名> type <数据类型> [value <值>] 。
ABAP基本语法
标准文档ABAP基本语法目录1.表声明 (1)2.定义变量 (1)3.常用算术操作符: (1)4.常用比较操作: (1)5.赋值语句 (2)6.IF语句 (2)7.CASE语句 (2)8.DO语句 (2)9.WHILE语句 (2)10.从数据库中取数据集 (2)11.取出单行记录 (2)12.WRITE语句 (3)13.ULINE语句 (3)14.SKIP语句 (3)15.定义常量 (3)16.定义结构 (3)17.TYPES语句 (4)18.LIKE语句 (4)19.输入参数 (5)20.分块语句 (5)21.定义内表 (5)22.往内表中添加记录 (6)23.用LOOP读取内表数据 (6)24.用READ读取内表数据 (6)25.把数据库的记录读入内表 (6)26.CLEAR清空表头和表记录 (6)27.DELETE删除内表记录 (6)28.REFRESH删除内表记录 (6)29.FREE删除内表记录 (7)30.在内表中插入记录 (7)31.修改内表记录 (7)32.对内表进行排序 (7)33.内表的控制语句 (7)34.循环跳转语句 (7)35.常用系统变量 (8)36.子程序的定义 (8)37.子程序的调用 (8)38.子程序的参数传递 (8)39.常用事件 (9)40.跳出事件的方法 (10)ABAP/4:Advanced Business Application Programming1.表声明Tables: 表名[,表名]. 声明多个表时可用逗号分隔当你声明了一个数据表的同时,系统也同时自动生成了一个和数据表同名的结构,结构的变量集等于数据表里面的字段。
2.定义变量Data: v1[(l)] [type t] [decimals d] [value 'xxx'].v1 是变量名。
(l) 是变量的长度。
t 是数据类型。
d 是小数位。
'xxx' 是缺省值。
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关键字则是用在指定资料型态。
abap基础语法
abap基础语法ABAP基础语法ABAP(Advanced Business Application Programming)是一种高级业务应用编程语言,主要用于SAP系统开发。
它由SAP公司开发并广泛应用于企业资源计划(ERP)系统中。
ABAP基础语法是学习ABAP编程的第一步,掌握基础语法对于编写高效、可维护的ABAP程序至关重要。
本文将介绍ABAP基础语法的一些重要概念和常用语句。
1. 数据类型在ABAP中,我们可以声明各种不同的数据类型,如整数型(INT)、字符型(CHAR)、浮点型(FLOAT)等。
声明变量时需要指定变量的数据类型,并可以为其赋初值。
2. 变量和常量ABAP中可以通过“DATA”关键字声明变量,并使用“CONSTANTS”关键字声明常量。
变量和常量用于存储和操作数据,在程序中起到关键的作用。
3. 运算符ABAP支持各种算术、比较和逻辑运算符,用于进行数值计算、条件判断和逻辑操作。
例如,加法运算符(+)、等于运算符(=)和逻辑与运算符(AND)等。
4. 控制语句ABAP提供了多种控制语句,用于根据条件执行不同的代码块。
常用的控制语句包括IF语句、CASE语句和LOOP语句等。
这些语句可以帮助我们实现程序的流程控制和逻辑判断。
5. 函数和方法ABAP中可以定义函数和方法,用于封装一段可重用的代码。
函数是一段独立的代码,可以接受输入参数并返回一个结果。
方法是与对象相关联的代码,可以访问对象的属性和方法。
6. 内部表内部表是ABAP中一种重要的数据结构,类似于其他编程语言中的数组或列表。
内部表用于存储一组有序的数据,并可以通过索引或关键字访问。
我们可以使用内部表来处理和操作数据。
7. 结构体ABAP中的结构体是一种复合数据类型,可以包含多个字段。
结构体用于组织和存储相关的数据,并可以通过字段名访问各个字段的值。
8. 类和对象ABAP是一种面向对象的编程语言,支持类和对象的概念。
ABAP语法示例
第三章 ABAP语法示例3.1 FIELD-SYMBOLSFIELD-SYMBOLS是字段符号,类似于FOXPRO的宏,FOXPRO能把一段程序存入一个字符串中,再通过某种方式使该字符串运行。
SAP的FIELD-SYMBOLS,把一个结构定义分配给字段符号,通过字段符号来引用结构中的成员。
【例3.1】REPORT YTEST001.DATA:BEGIN OF MAN,NAME(30) TYPE C,HIGH TYPE P DECIMALS 2,WEIGHT TYPE P DECIMALS 2,END OF MAN.FIELD-SYMBOLS <FSA> LIKE MAN.DATA MAN1 LIKE MAN.MAN1-NAME = '张林'.MAN1-HIGH = '1.78'.MAN1-WEIGHT = 140.ASSIGN MAN1 TO <FSA>.WRITE: / <FSA>-NAME,<FSA>-HIGH,<FSA>-WEIGHT.输出结果如图3-1所示。
图3-13.2 字符串处理3.2.1 合并字符串【例3.2】REPORT YTEST001.DATA: C1(2) TYPE C,C2(2) TYPE C,C3(2) TYPE C,C4(2) TYPE C,C5(20) TYPE C,C9(2) TYPE C.C1 = 'AB'.C2 = 'CD'.C3 = 'EF'.C4 = 'GH'.C9 = '+'.CONCATENATE C1 C2 C3 C4 INTO C5.WRITE C5.CONCATENATE C1 C2 C3 C4 INTO C5 SEPARATED BY C9.WRITE / C5.输出结果如图3-2所示。
ABAP语法基础篇(5)——字符串处理
ABAP语法基础篇(5)——字符串处理五、字符串5.1 移动字符串5.1 .1 按给定位置数移动字符串要按给定位置数移动字段内容,使⽤ SHIFT 语句,⽤法如下:SHIFT <c> [BY <n> PLACES] [<mode>].该语句将字段<c>移动<n>个位置。
如果省略BY <n> PLACES,则将<n>解释为⼀个位置。
如果<n>是0 或负值,则<c>保持不变。
如果<n>超过<c>长度,则<c>⽤空格填充, <n>可为变量。
对不同(<mode>)选项,可以按以下⽅式移动字段<c>:LEFT: 向左移动<n>位置,右边⽤<n>个空格填充(默认设置)。
RIGHT: 向右移动<n>位置,左边⽤<n>个空格填充。
CIRCULAR:向左移动<n>位置,以便左边<n>个字符出现在右边。
5.1.2 移动字符串到给定串位置要移动字段内容以到给定串位置,则使⽤ SHIFT 语句,⽤法如下:SHIFT <c> UP TO <str><mode>.ABAP/4 查找<c>字段内容直到找到字符串<str>并将字段<c>移动到字段边缘。
<mode>选项与按给定位置数移动字符串中所述相同,<str>可为变量。
如果<c>中找不到<str>,则将SY-SUBRC设置为 4 并且不移动<c>。
否则,将SY-SUBRC设置为 0 。
5.1.3 根据第⼀个或最后⼀个字符移动字符串假设第⼀个或最后⼀个字符符合⼀定条件,则可⽤SHIFT语句将字段向左或向右移动。
- 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。