SAP-ABAP基础语法培训教程(珍藏版)-PP课件

上传人:m**** 文档编号:568433216 上传时间:2024-07-24 格式:PPT 页数:247 大小:2.90MB
返回 下载 相关 举报
SAP-ABAP基础语法培训教程(珍藏版)-PP课件_第1页
第1页 / 共247页
SAP-ABAP基础语法培训教程(珍藏版)-PP课件_第2页
第2页 / 共247页
SAP-ABAP基础语法培训教程(珍藏版)-PP课件_第3页
第3页 / 共247页
SAP-ABAP基础语法培训教程(珍藏版)-PP课件_第4页
第4页 / 共247页
SAP-ABAP基础语法培训教程(珍藏版)-PP课件_第5页
第5页 / 共247页
点击查看更多>>
资源描述

《SAP-ABAP基础语法培训教程(珍藏版)-PP课件》由会员分享,可在线阅读,更多相关《SAP-ABAP基础语法培训教程(珍藏版)-PP课件(247页珍藏版)》请在金锄头文库上搜索。

1、SAP ABAP基础语法培训教程(珍藏版)ABAP TrainingSAP及ABAP/4 Overview系统开发语言创建企业报表应用事务开发商用文档设计2SAP介绍ERP巨人SAP:创立于1972年,ERP思想的倡导者,ERP领域中处于领导地位,全球最优秀的企业管理软件供应商SAP:System, Application and Products in Data Processing,即数据处理的系统、应用和产品3SAP R/3一体化ERP系统客户客户客户客户/ / / /服务器服务器服务器服务器FIFI财务会计财务会计财务会计财务会计COCO财务控制财务控制财务控制财务控制TR司库司库PS

2、PS项目管理项目管理项目管理项目管理WFWF工作流程管理工作流程管理工作流程管理工作流程管理ISIS行业解决方案行业解决方案行业解决方案行业解决方案MMMM物料管理物料管理物料管理物料管理HRHR人事管理人事管理人事管理人事管理SDSD销售与分销销售与分销销售与分销销售与分销PPPP生产计划生产计划生产计划生产计划QMQM质量管理质量管理质量管理质量管理PMPM工厂维护工厂维护工厂维护工厂维护后勤系统后勤系统财务系统财务系统人力资源人力资源客户及工业部门的客户及工业部门的特殊要求特殊要求4SAP新的业务模块和组件CRM顾客关系管理SCM供应链管理BW商业信息仓库APO高级计划与优化(Advan

3、ced Planner and Optimizer)5R/3主要业务模块介绍生产计划控制物料管理销售与分销财务会计管理会计人力资源6SAP其他业务模块跨应用组件(CA,Cross-Application Compo-nents)基础系统组件(BC,Basis Components)品质管理(QM,Quality Management)资产管理(AM,Assets Management)7 SAP 业务流程S&D 销售订单 PP主生产计划物料需求计划采购订单库存管理生产执行开票运输生产订单发票校验成本财务 MMCO/FI8大家学习辛苦了,还是要坚持继续保持安静继续保持安静9ERP实施步骤总体规划

4、,分步实施教育和培训原形测试数据准备系统开发模拟运行切换10SAP实施结构设计实施过程中需要多少个R/3系统需要多少个Client,具体任务是什么各个集团将如何分布在不同的系统中通常将“开发”、“质量控制(测试)”、“产品”分别置于三个不同系统的不同集团中11开发过程中标准制定制定命名规则:自定制的所有对象应当以“Z”或“Y”开头;避免命名冲突界面风格指南:应与SAP的标准保持一致文档维护:项目文档:项目设计、实施进度等最终用户文档:对象说明、程序说明等技术说明文档:程序代码说明、程序规格等修订列表维护:对所有对象的修改清单对象模块化、在线文档标准等12ABAP TrainingSAP及ABA

5、P/4 Overview系统开发语言创建企业报表应用事务开发商用文档设计13R/3开发平台介绍R/3体系结构R/3仓库与开发平台系统开发工具第一个ABAP程序ABAP数据字典介绍14R/3逻辑体系结构逻辑上分为显示层、应用层、数据库层数据库层:主要业务数据及开发过程中的程序和元数据通过关系数据库管理系统进行操作;应用层:从数据层提取数据进行处理或者存储新数据显示层:SAPGUI,系统和用户间的接口,用户通过该层访问系统应用、输入新数据并接受工作过程的处理结果15R/3仓库R/3仓库储存所有SAP系统开发过程中的对象,这些对象也被称之为仓库对象:ABAP程序数据库表结构定义系统数据类型仓库对象不

6、是企业业务数据,而是系统内部数据,与Client无关仓库对象要从R/3系统传入另一R/3系统,需要开发类别辅助16开发类别仓库对象创建时,需要指定所属的开发类别仓库对象在R/3仓库中按照开发类别分类,这些对象的集合形成的组织单元即为开发类别开发类别开发类别的主要功能是对仓库对象进行管理(目录管理及传输控制管理等)开发类别中所包含的仓库对象可以通过对象浏览器(SE80)查看和维护开发类是ABAP工作台对象,其修改通过Transport Organizer记录,开发类别的开发类别是其自身17ABAP工作台工具介绍(1)对象导航器:Object Navigator,通过开发类别组织R/3对象的浏览及

7、维护程序编辑器:ABAP Editor,编辑ABAP程序代码数据建模器:Data modeler,业务数据建模工具数据字典:ABAP Dictionary,定义系统数据类型及数据库对象简单报表创建器:ABAP Query18ABAP工作台工具介绍(2)函数创建器:Function Builder,创建功能模块类创建器:Class Builder,创建ABAP类及方法等面向对象元素菜单绘制器:Menu Painter,用于创建屏幕的标题、菜单、工具栏中的元素及功能设定屏幕绘制器:Screen Painter,用于创建SAP标准屏幕工作台管理器:Workbench Organizer,用于管理修改

8、请求19对象导航器ABAP工作台的众多开发工具的中心入口,可对各种R/3仓库对象进行维护,具体见下图事务码:SE80包括导航区域、对象浏览及工具区域三大块导航区域:对象列表选择及名称输入区域对象列表:对象列表机上下文菜单(context menu)工具区域:ABAP工作台工具、工具栏、菜单、标准工具栏、应用工具栏及附属窗口等20ABAP对象导航器图例导航区域工具区域对象列表附属窗口21ABAP编辑器路径事务码SE3822Abap程序及相关介绍ABAP advanced business application programming 是“高级商业应用编程”的缩写“Hello World”程序系

9、统程序实例:ABAPDOCU、DWDM23ABAP(DDIC)数据字典介绍数据字典:定义和管理数据元素及数据库元素的中心工具,所有的数据库表结构及系统全局数据类型等都需要在其中创建并维护功能:自定义系统共用数据类型(基本类型、结构和表)定义数据库对象结构(数据库表、视图和索引等)进行屏幕字段的格式化、编辑,比如F1和F4帮助事务码:SE1124ABAP TrainingSAP及ABAP/4 Overview系统开发语言创建企业报表应用事务开发商用文档设计25企业报表类型静态报表交互式报表26报表格式27报表格式28ABAP TrainingSAP及ABAP/4 Overview系统开发语言创建

10、企业报表应用事务开发商用文档设计29对话编程简介事务是实施 与用户对话 的程序。在 典型的对话 中,用户可 以在系统显 示的屏幕上 输入或请求 信息。作为 对用户输入 或请求的响 应,程序执 行适当的动 作:转到下 一个屏幕, 显示输出或 更改数据库 。SAP 系统中的每 个对话都是 由动态程序 控制的。动 态程序包含 一个屏幕和 它的流逻辑 并且精确控 制一个对话 步骤。流逻 辑决定在显 示屏幕前( 输出前的 PBO 处理)和接 收到用户在 屏幕上制作 的条目后( 输入后的 PAI 处理)进行 的处理。30ABAP TrainingSAP及ABAP/4 Overview系统开发语言创建企业报

11、表应用事务开发商用文档设计31主要工具SMART FORMSSCRIPT32ABAP基础ABAP语言概述数据定义基本数据操作结构控制处理字符数据使用内表动态数据对象模块化技术错误处理程序调试33ABAP程序结构ABAP是一种事件驱动语言,包括:数据定义:整个程序中可见的全局数据类型和数据对象处理块(Processing blocks):ABAP程序的主要结构单元,除数据定义和声明语句外的所有ABAP语句都必须隶属于某一个处理块ABAP程序基本结构如下图所示:程序内部全局数据定义对话模块事件块子程序等ABAP程序34处理块类型事件块(Event blocks):事件关键字开头,至下一事件关键字出

12、现(或程序结束),无事件结束关键字报表事件:Initialization,Start-of-selection列表事件:At-line-selection屏幕事件(对话事件):Process before output, process after input对话模块(Dialog Modules):有开始和结束关键字,用于事务程序设计,从属于对话事件,在对话事件块中调用过程(Procedure):有开始和结束关键字,独立的程序单元,包括功能模块和子程序、ABAP对象的类方法35ABAP处理块调用范例REPORT z_processing_blocks .DATA: text1(20) TYP

13、E c VALUE Basic List:, text2(20) TYPE c VALUE Secondary List:.* Processing block1: Event block - Start-of-selectionSTART-OF-SELECTION. DO 5 TIMES. PERFORM frm_output_line USING sy-index. ENDDO.* Processing block2: Event block - at line-selectionAT LINE-SELECTION. WRITE:/ text2,sy-lsind.* Processing

14、block3: Procedure - subroutine frm_output-lineFORM frm_output_line USING p_index. WRITE:/ text1,sy-lsind,Value:,p_index.ENDFORM. 36ABAP处理块调用范例运行结果37程序类型的设定程序类型包括应用程序类型和其它程序类型,在创建程序时在程序属性中设定,如下图所示:38应用程序类型可执行程序(Executable Program):创建报表,由Report关键字引导,可包括屏幕,可包含除功能模块外的所有处理块,可直接在ABAP编辑器中运行,类型代码为1。对应为报表程序模

15、块池(Module Pool):由Program关键字引导,包括自定义的屏幕和对话模块,必须通过事务码运行,类型代码M。对应为事务程序(也叫对话程序、动态程序)39其它程序类型不可直接运行,可为ABAP程序提供模块化单元,包括:功能组(Function Group):由Function-pool语句引导,包含一个或多个功能模块,类型代码为F类库(Class Pool):由Class-pool语句引导,类型代码K接口库(Interface Pool):由Interface-pool语句引导,类型代码J子程序池(Subroutine pools):由Program语句引导,类型代码S,包含子程序代

16、码或类方法类型组(Type groups):由Type-pool语句引导,在数据字典中定义,无类型代码包含程序(Include Program):不需要语句引导,类型代码I,只是代码复用,可直接插入其它程序中,成为该程序一部分40ABAP语言概述程序结构程序类型程序元素语句格式程序运行内存管理41程序元素类型ABAP元素:在ABAP编辑器中维护的元素屏幕元素:通过屏幕绘制器维护的元素GUI元素:通过菜单绘制器维护的元素42程序元素源代码(source code)变式(Variants):与选择屏幕相关,用于存放输入的数据选择值,以便反复调用该程序时重复输入数据文本元素(Text element

17、s):存储于文本池中的文本,包括文本符号、选择文本、列表标题等文档(Documentation):写给用户的说明,用于解释程序的功能、使用方法等文本元素和文档均具有语言相关性,可以由系统翻译工具进行翻译 43文本元素维护界面44屏幕元素SAP标准屏幕(Screen):多用于SAP事务程序设计,包括屏幕布局(Layout)和流逻辑(Flow Logic)选择屏幕(Selection Screen):多用于报表程序中接受用户输入报表的选择标准,可通过ABAP语句控制其输出格式传统列表屏幕(Lists):只包含列表输出区域,伸出内容通过write和uline等ABAP语句生成45GUI元素为屏幕的一

18、个组成部分,但设计时独立于屏幕存在,各种屏幕都可以独立分配GUI包括屏幕上方的菜单、标准工具栏、应用工具栏以及功能键和功能代码等GUI元素在程序调用时分为状态(GUI status)和标题(GUI Title)两部分46ABAP语句结构以一个ABAP语句关键字引导,句号结束ABAP语句中还可以含附加项和操作元素各关键字、选项、操作数之间应至少保留一空格范例:Report z_simple_program.Data Text(20) VALUE Simple program.Start-of-selection.WRITE text.47ABAP语句类型(1)声明语句:用于数据元素的定义和声明(

19、如变量)DATA,PARAMETER,TABLES,TYPES模块化语句:用于定义运行时的处理代码块,分为事件关键字语句和过程定义关键字语句事件关键字包括:AT-SELECTION-SCREEN,START-OF-SELECTION,AT USER-COMMAND过程定义关键字包括:FORM/ENDFORM,FUNCTION/ENDFUNCTION,MODULE/ENDMODULE控制语句:以条件控制程序处理块内部的程序流程IF/ENDIF,WHILE/ENDWHILE,CASE/ENDCASE48ABAP语句类型(2)调用语句:用于调用已定义好的处理块PERFORM,CALL,SUMBIT,

20、LEAVE TO操作语句:用于程序内部数据操作或输出WRITE,MOVE,ADD以及运算符等数据库语句:用于数据库操作,含Open SQL和Native SQL两种49语句链关键字“:”和“,”可以把连续使用的相同关键字引导的语句连接在一起,以简化代码,如:WRITE: text1,text2.等价于WRITE text1.WRITE text2.50注释“*”,在行的开头使用,可注释该行“”,单个双引号,可注释该行中其后的文字,如下所示* This whole line is commentsWRITE text.“Contents behinds this is comments51程序调

21、用直接运行:在事务SE38或SA38中直接运行通过系统目录或者在命令域中输入事务代码运行内部调用:事务代码调用:LEAVE TO TRANSACTION,CALL TRANSACTION(调用返回)SUBMIT,SUBMIT AND RETURN(调用返回)52程序结束自动结束:程序完全运行,自动结束强制结束:通过LEAVE PROGRAM.语句可以在任意点结束程序53内存管理(1)运行时内存管理与用户对话相关(同一个用户和系统进行最多六个SAP GUI对话),包括SAP内存和ABAP内存两部分主对话:又称外部对话,用户登录SAP之后,即开始和应用服务器之间的主对话,各对话间无联系内部对话:在

22、主对话中运行可执行程序或者模块池程序,开始内部对话调用序列:调用不返回,新程序内部对话代替原程序内存,并删除原程序内存;调用返回时,生成程序调用序列,生成堆栈,调用结束时,恢复上一级程序内存状态54内存管理(2)ABAP内存:主对话内部有一个ABAP内存区域,在该对话内部,可通过EXPORT TO和IMPORT FROM MEMORY在内存堆栈之间进行数据传递,以队列的方式存储SAP内存:所有对话都可以访问的内存区域,可在SAP各对话间共享,通过SET PARAMETER和GET PARAMETER访问装载程序:调用或执行程序时,程序实例被装载到ABAP内存,第一个被装载的程序为主程序;程序装

23、载,触发LOAD-OF-PROGRAM事件对象创建:创建对象(CREATE OBJECT),类的实例被装载到内部对话,该内部对话中的程序及对象都可以使用该类实例55ABAP基础ABAP语言概述数据定义基本数据操作结构控制处理字符数据使用内表动态数据对象模块化技术错误处理56数据定义与宣告语句DATA:用于定义变量以及内表、工作区间TYPE:定义类型TABLES:宣告某一个系统中的表或者结构,以便于程序中使用,同时创建表的工作区间CONSTANTS:定义一个常量Parameters、selection-options57数据对象生存周期:程序的运行期保存:存储于数据库或者输出到文件范例:DATA

24、 txt1(15) TYPE c VALUE Data Object.初始值类型为字符串存储长度15个字节58数据类型体系基本类型(Element Types)分为固定长度和可变长度两种固定长度(C、N、T、D、I、P、F、X)可变长度 String 、XString复杂类型结构类型:结构体表类型:内表引用类型:基于基本数据定义参考变量的数据参考变量的对象59基本类型固定长度60基本类型可变长度String:字符串,如A StringXString:十六进制字符串,如A3FF61补充文本文字最 长可达 255 个字符。如 果某文本文 字包含引号 ,必须重复 引号,以使 系统能够将 内容识别为

25、文本文字而 不是文字的 结尾。新压缩类型P在系统中存放时所占内存空间只有同长度的浮点数、整数的一半数字字符N,实际上是一个字符串,但是其中的字符只能是数字。如果给该类型变量赋值不足与定义的长度,系统会自动在左边补零62确定数据对象属性DESCRIBE语法格式:DESCRIBE FIELD f LENGTH TYPE t COMPONENTS n OUTPUT-LENGTH o DECMIALS d EDIT MASK m HELP-ID h变量:LENGTH,对象长度TYPE,对象类型OUTPUT-LENGT,确定输出长度DECIMALS,确定P类型数据对象的小数位长度EDIT MASK确定在

26、数据字典中定义转换例程HELP-ID确定数据字典中定义的F1帮助信息63其他定义方式Data A like B.Emp:Data:matnr like mara-matnr, date like sy-datum.64ABAP基础ABAP语言概述数据定义基本数据操作结构控制处理字符数据使用内表动态数据对象模块化技术错误处理程序调试65基本的数据操作数据赋值MOVE:把源字段的值赋给目标变量,如MOVE source TO destination.等价于Destination = source.注意事项:源对象和目标完全兼容(类型,长度等),则赋值过程中结果不变不完全兼容但可以进行类型转换,按固

27、定的转换规则转换不兼容且不能转换,则不能赋值,提示语法错误或者编译过程中有错误,否则会出现运行时错误66基本的数据操作结构体赋值两个结构体组件结构完全一致,可以直接赋值,如stur1 = stur2两结构体组件结构不完全一致,但有部分组件有对应关系,可逐个组件赋值或者使用move-corresponding stru1 to stru2.语句赋值67基本的数据操作初始值设定将已经赋值的变量值晴空,恢复为初始状态,采用clear语句,如:clear g_var1.Clear基本数据类型:初始值根据数据类型定Clear结构体类型:逐层、逐个组件拆分按上一规则执行Clear内表,清除内表表头数据语句

28、为:clear it_test.;清除内表标题数据语句为:clear it_test.或者refresh it_test.引用类型数据:恢复初始状态,不指向任何数据对象68数值运算算术预算语句69数值运算算术预算原则运算后赋值时需要注意类型转换多种数学表达式共存时注意优先级除法/整除运算时要注意除数不能为0运算符号及括号都是ABAP关键字,前后都需要有空格使用P类型进行计算时,程序属性Fixed Pointed arithmetic没有选中的话,运算时会被当作整数类型进行处理两个结构体同名字段也可以整体进行算术运算,语句为ADD-CORRESPONDING,前缀和运算关键字一样70数值运算任意

29、类型参数的数学函数71数值运算浮点数类型的数学函数72数值运算时间日期运算系统将日期时间先转换为数值类型,根据这两种特殊的类型进行合理的增减,如下所示DATA: seconds TYPE i, hours TYPE i, time1 TYPE t VALUE 100000, time2 TYPE t VALUE 080000.seconds = time1 - time2.hours = seconds / 3600.WRITE:/ Seconds between time1 and time2:, seconds, / Hours between time1 and time2:, hour

30、s.73数据输出基本输出格式数据输出及格式化语句:WRITE, ULINE, FORMAT, SKIP. 基本输出语法如下:WRITE / f.ULINE.FORMAT color .SKIP n.74基本数据类型的默认输出模式75格式化输出(write语句)语法格式:write f .具体的格式化选项请参考F1帮助在用户主记录中,可以设置输出时显示的日期分隔符、小数点字符和千分符等选项,进入方式为:任意一SAP屏幕的菜单System-User Profile-Own data76逻辑表达式基本格式: f1 f2 通用逻辑表达式列表77逻辑表达式特殊操作符IS INITIAL:检查变量是否是初

31、始值BETWEEN:检查对象的值是否属于特定范围之间: f1 between f2 and f3 IN:用于检查数据对象的内容是否遵从某个选择表的逻辑条件选择表:一种特殊的内表,每一行包含一个特定的逻辑条件,DATA seltab like range of f.组合逻辑表达式:AND, OR, NOT,如下IF ( A LT N ) and ( N GT F ).78逻辑表达式比较两种类型数据兼容类型:不需要做转换,按照通常的比较方式进行不兼容类型:可转换的则先转换,转换规则:操作数之一为F类型,则其他操作数转为F类型操作数无F类型,之一为P类型,则其他操作数转为P类型无F,P类型,之一为T

32、或D类型,其他操作数转为T或D类型无F,P,T,D类型,之一为C类型且其他为X类型,X类型转为C类型操作数之一为C类型,其他为N类型,则两种类型均转换为P类型比较结构化数据:可转换,则逐个组件比较;若不可转换,则先转为C类型在比较比较内表:首先决定于行数,若行数相同,则逐行逐个组件进行比较;如果使用等于之外的操作副,则系统找到不对等的组件即停止比较并返回结果79ABAP基础ABAP语言概述数据定义基本数据操作结构控制处理字符数据使用内表动态数据对象模块化技术错误处理程序调试80结构控制程序处理块内部的代码由下列三种结构组织顺序结构:程序顺序执行分支结构:根据不同的条件执行不同的语句块循环结构:

33、反复执行某个语句块在ABAP中,控制结构都是在程序处理块内部的,作用范围不能超出一个处理块,所以称为处理块内部块内部控制81分支控制包括两种分支控制条件分支语句:IF/ENDIFIf conditions.elseif conditions.Endif.CASE/ENDCASECASE f. when f1 or f2 or when when others. Endcase.82循环控制无条件循环无条件循环,使用DO语句实现DO n times. ENDDO.N用于控制循环次数,可以是数字或者变量如果N为0或者负数,则不进入该循环;如果不限定N的值,则需要用EXIT(推出当前循环),STOP

34、或REJECT等语句强制结束循环,避免死循环系统变量SY-INDEX为已经处理过的循环次数值,DO循环可以嵌套,SY-INDEX为当前循环的次数83无条件循环范例REPORT z_do_loop.DATA: out_index TYPE i, in_index TYPE i.DO 2 TIMES. out_index = sy-index. WRITE:/ out_index. SKIP. DO 3 TIMES. in_index = sy-index. WRITE: out_index NO-GAP,- NO-GAP, in_index LEFT-JUSTIFIED. ENDDO. SKIP

35、.ENDDO.84条件循环使用WHILE语句实现,进入循环之前,先检查语句中逻辑表达式的值,如果为真,执行后面的语句;当逻辑值不再为真或者执行到中止语句时,结束循环,语句格式如下: WHILE . ENDWHILE.SY-INDEX包含已执行的循环次数,可以嵌套循环,要避免死循环问题,一般需要在程序中修改逻辑表达式某变量值,确保一定次数后语句条件为假,否则语句块中必须含有循环中止语句85条件循环语句范例REPORT z_while_loop.DATA: g_lenth TYPE i, g_str01(30) TYPE c VALUE Beijing 2008.WHILE g_str01 NE

36、space. g_lenth = sy-index. SHIFT g_str01.ENDWHILE.skip 5.WRITE:/ Length of g_str01:,g_lenth.注释:该程序确定字符串的有效长度,每次执行循环时,将字符串左移一位,直到其仅包含空格为止86循环的中止无条件循环:设定循环次数实现中止条件循环:在循环过程中修改逻辑表达式中变量的值,使条件语句为假强制结束循环语句CONTINUE用于无条件中止当前循环,运行该语句后跳过当前语句块所有生于语句执行但并非结束循环,而是开始下一轮循环或条件判断CHECK用于有条件中止当前循环,与CONTINUE语句类似EXIT,无条件中

37、止循环,系统退出当前循环,继续执行当前循环后面的代码,嵌套循环时执行上一级循环STOP、REJECT,退出循环并无条件结束程序87循环中止范例REPORT z_terminate_loop.DO 4 TIMES. IF sy-index = 2. CONTINUE. ENDIF. WRITE sy-index.ENDDO.SKIP.DO 4 TIMES. CHECK sy-index BETWEEN 2 AND 3. WRITE sy-index.ENDDO.SKIP.DO 4 TIMES. IF sy-index = 3. EXIT. ENDIF. WRITE sy-index.ENDDO.

38、88ABAP基础ABAP语言概述数据定义基本数据操作结构控制处理字符数据使用内表动态数据对象模块化技术错误处理程序调试89处理字符数据字符数据操作连接字符串拆分字符串查找字符串替换字符串内容确定字符串长度其他操作语句字符串比较定位操作字符串90字符数据操作连接字符串语句关键字:CONCATENATE concatenate s1 sn into s_dest separated by sep连接字符串s1sn并将结果赋给字符串s_destseparated by用于指定一个字符(串)作为分隔符如果连接字符串后的总长度超过目标字符串长度,则把结果截断后赋值;一旦出现截断情况,sy-subrc为4

39、,否则为0为了避免截断,可以把目标字符串定义为string类型91连接字符串范例REPORT z_string_concatenate.data: g_s1(9) type c value Firstname, g_s2(10) type c value Secondname, g_s3(20) type c, g_sp(1) type c value .concatenate g_s1 g_s2 into g_s3.write / g_s3.concatenate g_s1 g_s2 into g_s3 separated by g_sp.write / g_s3.92字符数据操作拆分使用S

40、PLIT语句可将字符串拆分未多个小串split source at sep into s1 sn.在源字符串中搜索分隔符(sep),并根据该分隔符把源串拆分为多个小串并放到目标字串s1sn中子串中不包括分隔符与连接语句类似,如果目标字串长度不够会进行截断,且sy-subrc为4,否则为0如果源串拆分的字串数量多于目标字串数量,则源串最后剩余部分包括其后的分隔符都将写入最后一个字串。可采用内表来避免这种情况93字符串拆分范例REPORT z_string_split.DATA: text TYPE string, itab TYPE TABLE OF string.text = ABAP is

41、a programming language.SPLIT text AT space INTO TABLE itab.LOOP AT itab INTO text. WRITE / text.ENDLOOP.94字符数据操作查找字串使用search语句:search c for str.在变量C中茶中字符串str,如果找到,sy-subrc返回0,sy-fdpos返回变量C中该字符串的位置(从左算起的字符偏移量),否则将sy-subrc返回4字符串str,可以使用通配符*,也可以设定保存或者忽略str末尾的空格,如下所示:str,搜索str并忽略尾部空格.str.,搜索str不忽略尾部空格*s

42、tr,搜索以str结尾的单词str*,搜索以str开头的单词注意:单词是指以符号(空格,标点符号,其他字符)分隔的字串95查找字符串范例REPORT z_string_search.DATA g_str(30) TYPE c VALUE This is a test sentence.WRITE:/ Searched,SY-SUBRC,SY-FDPOS.SEARCH g_str FOR X.WRITE:/ X,sy-subrc UNDER SY-SUBRC, sy-fdpos UNDER SY-FDPOS.SEARCH g_str FOR e .WRITE:/ e,sy-subrc UNDER

43、 SY-SUBRC, sy-fdpos UNDER SY-FDPOS.SEARCH g_str FOR .e .WRITE:/ .e.,sy-subrc UNDER SY-SUBRC, sy-fdpos UNDER SY-FDPOS.SEARCH g_str FOR *e.WRITE:/ *e,sy-subrc UNDER SY-SUBRC, sy-fdpos UNDER SY-FDPOS.SEARCH g_str FOR s*.WRITE:/ s*,sy-subrc UNDER SY-SUBRC, sy-fdpos UNDER SY-FDPOS.96字符数据操作替换字符串内容用其他字符串替换

44、字段的某些部分,使用replace str1 with str2 into s_dest length l先对字段s_dest进行搜索,发现字串str1即用str2替换第一次出现的部分如果指定length,则只搜索前L个字节如果SY-SUBRC返回为0,则找到并替换成功,否则为进行任何替换97替换字符串范例REPORT z_string_replace.DATA name TYPE string.name = Michael-Cheong.WRITE:/ not replaced:,name.WHILE sy-subrc = 0. REPLACE - WITH INTO name.ENDWHI

45、LE.WRITE:/ replaced:,name.98字符数据操作确定字串长度字符串长度:从首字符开始到最后一个非空字符的长度,即不包括结尾空格,使用:n = STRLEN( str ).将操作数str作为字符数据类型处理,不考虑其实际类型,也不进行转换,范例如下:REPORT z_strlen.DATA: text(24) type c VALUE ABAP Language, len TYPE i.Len = strlen( text ).Write:/ Length of ,text, is, len.99字符数据操作其他操作语句SHIFT,将字符串整体或者字串进行位移CONDENSE

46、,删除字符串中多于的空格TRANSLATE,字符转换CONVERT TEXT创建一个可以排序的格式OVERLAY用一个字符串覆盖另一个字符串100字符数据比较101定位操作字串通过制定长度及偏移量来操作指定的部分字串,语句为:s+o(L)对变量S从第o+1位开始且长度为L的部分执行该语句的操作,如果未指定长度,则对第o+1位至程序末尾之间的所有位进行处理,偏移量和长度可以为变量动态指定,但是只能是如下情况:MOVE赋值;WRITE TO赋值;ASSIGN分配给字段符号;PERFORM将数据传给子程序。范例如下:REPORT z_string_comparison.DATA: f1(8) VAL

47、UE ABCDEFGH, f2(20) VALUE 123456789.f2+6(5) = f1+3(5).102系统变量所有的系统字段存放于结构SYST中,可以通过SE11来浏览SY-SUBRC,该变量是多数命令行执行成功与否的标志,比如数据库操作、功能函数调用等等,0表示操作成功,其他为操作失败。是ABAP编程中最常用、最有用的系统变量103建表Data elementDomin104谢谢大家Q/A105ABAP基础ABAP语言概述数据定义基本数据操作结构控制处理字符数据使用内表动态数据对象模块化技术错误处理程序调试106结构、工作区、内表结构(Structure)工作区(Work are

48、a)内表(Inner table)107结构属于复杂类型,内容包含定义的数据字段 TYPES:BEGIN OF line, id TYPE i, name(30), age type i, END OF line.108内表 工作区内表:用于在程序运行期间存储多行结构相同的数据工作区:内表是按行 进行访问的 。必须使用 某个工作区 域作为与表 格互相 传输数据的接口 。工作区与内表的定义 data:wa_line type line, it_line type table of line.表头行(with header line):隐式工作区 读取数据行 更新数据行工作区 内表109内表的分类

49、内表种类:标准表 排序表 哈希表110定义内表语法格式:TYPES|DATA itab TYPE|LIKE tablekind OF LINETYPE|LINEOBJECT WITH key INITIAL SIZE n with header line.tablekind: 内表类型linetype | lineobject:行结构key: 表关键字Initial size n:内表分配的初始内存大小with header line: 定义表头行111内表的重要概念逻辑索引对于标准表和排序表,每一条数据记录都有一个逻辑索引在对标准表和排序表进行插入、删除、附加操作的时候,系统自动的对每一条数

50、据记录赋一个逻辑索引,记录该数据记录在该内表中的逻辑位置(第X行)对于标准表和排序表,可以通过逻辑索引操作数据行,关键字为INDEX n,表示读取第多少行数据记录112内表的重要系统变量SY-TABIX,当前内表的当前数据记录的逻辑索引值内表嵌套循环时,如果需要使用到sy-tabix变量,请尽量把sy-tabix赋给一个变量再进行处理113内表类型标准表标准表(standard table或者省略关键字):系统为每一行数据生成一个逻辑索引;填充标准表时,可附加在现有行之后或者是插入到指定位置;程序对内表的寻址操作可以通过关键字或者索引进行;对内表进行插入、删除等操作时,其数据行在内存中的位置不

51、变,系统近重新排列各数据行的索引值不能定义唯一关键字,相同关键字的数据可重复出现标准表的另一种定义方式: data: begin of itab occurs 0, end of itab.114内表类型排序表关键字SORTED TABLE,也有一个逻辑索引总是按照关键字升序排序后再进行存储可按照关键字访问内表行也可按照逻辑索引寻找内表行,与标准表相同可以把排序表的关键字定义为唯一关键字或者普通关键字115内表类型哈希表关键字:HASHED TABLE无索引,只能通过关键字访问系统用哈希算法管理表中的数据寻址一条数据记录的时间与表的行数无关必须定义且只能定义为唯一关键字不可能有关键字相同的两行

52、数据出现116表关键字WITH key:指定内表关键字,如不指定,则系统使用默认(标准)关键字可以用UNIQUE|NON-UNIQUE来决定内表中具有相同关键字的数据记录是否可以重复出现如果未指定关键字,则默认关键字为非数字和非内表的组件字段。比如内表中含有C,N,P三种类型的字段,则默认关键字为C,N类型的字段117初始内存大小关键字: initial size n N可以为正数或者0N值的选择不影响程序执行的正确性,但可能影响执行效率:如果N设置过小,重新分配内存空间要占用时间如果N设置过大,则造成内存分配的浪费如果n为0或者不指定,则程序为内表对象分配8KB的内存118工作区(Work

53、Area/Work Space)程序不能直接进行内表的行操作,需要通过工作区来处理工作区必须具有与内表行一致或者可以互相转换的结构,通常是与内表行类型相同的结构体定义内表对象的同时,需要定义一个与该内表行结构相同的工作区供程序使用添加内表数据时,先给工作区赋值,然后把工作区内的数据添加、插入到内表修改内表数据时,把已定位的内部行内容覆盖工作区的内容,修改工作区内容,再回写119工作区与内表数据交换图例读取数据行更新数据行120隐式工作区表头行(Header Line)创建内表的时候隐式地定义一个同名工作区,这个同名工作区就叫表头行或标题行表头行或标题行语法:DATA itab WITH HEA

54、DER LINE创建内表的时候,通过该附加项决定内表是否带表头行 创建带表头行的内表,则创建了内表和与内表行结构一致的结构体一致的结构体;对带表头行的内表,不需要指定工作区,系统隐式使用表头行作为工作区表头行作为工作区表头行带来方便也增加了混淆:同一语句内表名称可能代表内表或者同名工作区,加代表内表,不带表示表头行121行访问方式通过关键字访问(适合所有内表):通过索引访问(不适合哈希表):所有行操作成功,SY-SUBRC为0,否则为非0值122行操作性能分析标准表:定位一行数据所需时间取决于表的行数,随行线性增长排序表:定位一行数据所需时间取决于表的行数,随行数对数级增长哈希表:定位一行数据

55、通过关键字进行,查找速度与行数无关Notes: 程序中使用何种内表,取决于预计需要容纳的数据行数及访问频率:行数很少,用标准表;数据量巨大,且不存在重复行,用哈希表;运行期内必须用某种排序形式出现时,用排序表。多数程序都使用标准表123行操作语句插入行(INSERT):附加行(APPEND):聚集附加(COLLECT):读取行(READ):修改行(MODIFY):删除行(DELETE):循环处理(LOOPENDLOOP):124聚集附加语句COLLECT检查工作区中的标准关键字段值(非数字字段)与内表中已存在的数据行是否相同如果不同,collect和append语句一样,将新行附加至内表的最后

56、一行如果相同,collect语句不附加新行,而是将工作区内数字字段的内容累加到已有数据行(与其具有相同关键字值)中数字字段内容上125COLLECT范例126操作整个内表语句(1)数据行排序(SORT BY ):控制级操作(需要先按照行组进行排序):AT FIRST: 第一次循环操作执行该语句块AT LAST: 最后一次循环操作执行该语句块AT NEW f: 行组的开头执行该语句块。行组是指f以及f左边的全部字段(指字符字段)AT END OF f:行组的结尾执行该语句块sum初始化内表、工作区CLEAR:it_mara,it_mara,REFRESH,FREE127操作整个内表语句(2)整体

57、赋值:MOVE语句或者赋值操作符=,需要注意内表是否具有表头行,若有表头行整体赋值时需要在内表名称后加比较内表大小:使用逻辑操作符,EQ,=,NE, ,=,LE,LT,,等等128Extract Datasets允许动态动态地存储并排序结构化数据,其列数目是可变的通过循环处理每一个程序,只能有一个未命名的ABAP Extract行结构分配语法:FIELD-GROUPS fg.动态生成fg的结构:INSERT f1 f2 fn into fg.填充的语法格式:EXTRACT fg.可以包含多个不同结构的字段组可以排序:SORT. 该语句无内表,则为Extract排序LOOP: 逐行获得Extra

58、ct中的字段组129Extract Datasets程序示例REPORT z_extract_datasets.*Extract处理DATA: f1 TYPE i, f2 TYPE i.FIELD-GROUPS header.INSERT f1 f2 INTO header.DO 10 TIMES. f1 = sy-index. f2 = sy-index * 2. EXTRACT header.ENDDO.SORT DESCENDING.LOOP. WRITE:/ f1,f2.ENDLOOP.130动态数据对象概述普通数据对象普通数据对象的寻址静态地通过对象名称进行,动态数据对象动态数据对象

59、只有在程序运行时,系统才知道其名称和属性,并进行动态寻址字段符号字段符号(Field symbols):数据对象语义上的名称,可以看作是解除引用的指针。访问它时,实际操作的时分配给该对象的数据对象内容数据引用数据引用(Data reference):数据对象的地址,程序访问的时期指向的数据对象的地址,要通过数据引用操作实际的数据对象的内容,需要先进行引用解除(Dereferencing)操作131动态数据对象字段符号声明字段符号:FIELD-SYMBOLS TYPE type |Like dobj分配数据对象:静态分配,程序运行前指定分配给字段符号的对象名称 ASSIGN f+o(L) to

60、.若声明时完全限定类型,则保持其技术属性否则将只适用其定义的一般属性可在分配时指定分配数据对象的偏移量和长度动态分配,运行时才确定分配给字段符号的数据对象名 ASSIGN (f) to .找到字段f的内容,将其内容作为一个新的数据对象分配给不能指定偏移量和长度成功分配给,sy-subrc返回0,否则为4132字段符号动态分配范例REPORT z_fs_dynamic_assign.*字段符号动态分配范例field-symbols: .data: str(20) type c value Output String, name(20) type c value str.*静态分配assign n

61、ame to .write / .*动态分配assign (name) to .write / .133字段符号强制类型转换运行时可将任何数据对象分配给字段符号字段符号继承数据对象的所有属性采用强制转换,无论原始对象类型如何,系统都按照字段符号的类型对分配的对象进行处理强制转换,要求字段符号的类型完全指定或者是ABAP内置类型C、N、P、X之一134字段符号强制类型转换范例REPORT z_fs_casting.*字段符号强制类型转换范例TYPES: BEGIN OF t_date, year(4) TYPE n, month(2) TYPE n, day(2) TYPE n, END OF

62、t_date.FIELD-SYMBOLS TYPE t_date.*ASSIGN sy-datum TO .ASSIGN sy-datum TO CASTING.WRITE:/ -year, / -month, / -day.135动态数据对象数据引用(1)数据引用:数据引用:程序通过引用数据对象地址进行操作或者动态的创建数据对象,以数据引用和对象引用两种形式存在声明引用变量声明引用变量:引用类型定义:TYPES t_dref TYPE REF TO DATA引用变量定义:DATA t_dref TYPE REF TO DATA引用对象指向实际操作对象的方法:通过变量动态创建数据对象通过变量获

63、取一个数据对象的引用给该变量分配其他已经存在的数据引用变量136动态数据对象数据引用(2)动态对象创建动态对象创建:CREATE DATA dref TYPE type | LIKE obj.动态的创建一个对象,且引用变量dref指向它无名称,可通过数据引用变量寻址操作该对象之前,需要通过字段符号解除引用数据类型可以是变量获取对象引用:获取对象引用:GET REFERENCE OF obj into dref.Obj可以是通过data语句定义的静态变量或者是指向某数据对象的字段符号解除数据引用:解除数据引用:ASSIGN dref-* TO CASTING 将数据引用变量dref指向的数据对象

64、赋给字段符号若数据引用变量的值为初始值或者不正确,则无法进行解引用操作,sy-subrc为4;若解引用成功,则为0动态创建的数据对象,解引用是获取其内容的唯一方式137数据引用范例REPORT z_data_reference.*数据引用范例TYPES: BEGIN OF t_struct, col1 TYPE i, col2 TYPE i, END OF t_struct.DATA: dref1 TYPE REF TO data, dref2 TYPE REF TO data.FIELD-SYMBOLS: TYPE t_struct, TYPE i.CREATE DATA dref1 TYP

65、E t_struct.ASSIGN dref1-* TO .-col1 = 1.-col2 = 2.dref2 = dref1.ASSIGN dref2-* TO CASTING.WRITE:/ Value of first,.GET REFERENCE OF -col2 INTO dref2.ASSIGN dref2-* TO .WRITE:/ Value of second,.138模块化技术概述模块化的作用:使程序结构清晰、易懂、易读、易于维护实现代码复用实现数据封装,数据或功能仅通过接口与模块外部发生关联模块化技术:处理块子程序功能模块包含程序宏对象方法对话模块139模块化技术子程序程

66、序内部的模块实现定义为某一个程序使用,可以将一个程序只能给的具体功能分解成几个子程序实现子程序往往位于程序的最后,不属于任何处理模块,减少出现不属于任何处理块而无法执行的代码(两子程序之间无事件代码的程序不属于任何事件块)定义:FORM subr using value()p type t chaning value() p type t. ENDFORM.调用:PERFORM subr using p changing p .140子程序范例REPORT z_subr.*子程序范例data: int1 type i value 1, int2 type i value 2, sum type

67、 i.start-of-selection. perform frm_add. write:/(1) int1 no-gap, + no-gap, (1) int2 no-gap, = no-gap, (1) sum.form frm_add. sum = int1 + int2.endform. frm_add141子程序参数接口参数:子程序和主程序之间传递的数据对象使用USING|CHANING实现,子程序中为形参,主程序中为实参REPORT z_subr.data: int1 type i value 1, int2 type i value 2, sum type i.start-of

68、-selection. perform frm_add using int1 int2 changing sum. write:/(1) int1 no-gap, + no-gap, (1) int2 no-gap, = no-gap, (1) sum.form frm_add using p_int1 p_int2 changing p_sum. p_sum = p_int1 +p_int2.endform. frm_add142参数传递方式传递方式通过形参的定义来决定值传递:using value(pi1)修改子程序中形参的值时不影响主程序中实参的值引用传递:using pi1 chang

69、ing pi2 修改子程序中形参的值时影响主程序中实参的值值和结果传递:changing value(pi2)修改子程序中形参的值时影响主程序中实参的值,但如果子程序非正常结束,则实参的值不改变143参数传递方式范例data: int1 type i value 1, int2 type i value 1.write:/ Before calling subroutine:, int1, int2.perform frm_self_add Using int1 int2.write:/ After calling subroutine: , int1, int2.form frm_self_

70、add using p1 type i value(p2) type i. p1 = p1 + 1. p2 = p2 + 1. write:/ Inside Subroutine: , p1, p2.endform.144参数类型及兼容形参获取实参的所有技术属性,形参可以代表多种类型的实参实参必须有指定的属性参数传递时不会进行类型转换,因此实参和形参必须能够兼容145功能模块(Function Module)最常用的复用组件,是独立的仓库对象,可由ABAP程序或者外部程序调用功能模块基本思想和子程序一致,但是它是独立的R/3对象需要通过单独的工作台工具维护,通过Function Builder

71、在功能组(Function Group)中维护每一功能模块在系统中是唯一的功能模块与功能组的关系,类似于普通的ABAP程序和子程序之间,系统通过功能组来管理功能模块146功能组和功能模块功能组是工作模块的容器功能组包括的程序:LTOP:功能组内部全局变量定义区LUXX:具体的功能代码,XX为序号LFXX:用于容纳功能组内部的子程序147功能模块创建步骤(1)初始界面148功能模块创建步骤(2)创建功能组149创建功能组描述信息150创建功能组保存151创建功能模块步骤(3)功能模块152功能模块和功能组关联153忽略提示,继续创建154功能模块设计界面简述Attribute:属性维护,定义类型

72、名称等Import:输入参数维护Export:输出参数维护Changing:输入输出参数维护Tables:内表参数维护Exceptions:异常维护155功能模块属性维护156功能模块输入参数维护157功能模块输出参数维护158创建功能模块步骤(4)源代码159创建功能模块步骤(4)激活160创建功能模块步骤(5)测试161测试功能模块界面162测试功能模块结果163功能模块的调用164查找功能模块165代码自动生成166完善代码167测试输出结果168数据对象的生存期和可见性局部数据:在过程内部创建的数据对象,作用域仅限于过程内部全局数据:在过程内部外创建的数据对象,作用于限于程序内部当局部

73、对象和全局对象同名,则过程中访问的为局部对象静态数据:局部对象,过程结束后,该值保留,下次调用该过程可以继续使用,但在过程外无法访问,关键字statics169源代码复用单纯的源代码复用,与ABAP过程和处理块无关包含程序(Include program):类型为I的ABAP程序,应用主要有:将主程序分为几个独立的部分维护在多个程序中使用相同的语句代码段包含程序不是可执行程序;不能调用其自身宏(Marcos):语句定义:define marco. . End-of-definition.170宏宏中的语句可以包含最多9个占位符&1,&2占位符的意义在于暂时不指定代码,调用的时候直接进行替换宏的

74、引用语句:marco p1 p2 p9.宏的定义不属于数据定义和声明部分,其定义需要出现在引用它的程序段之前171宏范例DATA: result TYPE i, int1 TYPE i VALUE 1, int2 TYPE i VALUE 2.DEFINE operation. result = &1 &2 &3. output &1 &2 &3 result.END-OF-DEFINITION.DEFINE output. write:/ The result of &1 &2 &3 is,&4.END-OF-DEFINITION.operation 1 + 2.operation int2

75、 - int1.172错误处理语法错误:程序语言中不合规范之处,程序编辑器提供语法错误检查语义错误:程序运行期间内,和上下文有关的逻辑错误,程序编辑器不能发现其错误,比如被0除173静态错误检查主要是语法错误和程序间接口错误检查语法检查:通过ABAP编辑器中check功能按钮随时可以进行;在程序激活或者运行前会自动进行,如果发现错误,则在程序下方提示错误信息扩展语法检查(SLIN检查):执行事物码或者ABAP编辑器-Program-Check-Extended Syntax Check引用程序检查功能模块语法检查静态断点检查接口类型兼容性检查等等174运行时错误控制可捕捉的运行时错误:语法结构

76、如下CATCH SYSTEM-EXCEPTIONS EXC1 = RC1 ENDCATCH.EXC1代表一个可捕捉错误或者一个ERROR类rc1代表一个数字,如果错误出现在该语句中,程序不会中止,调制ENDCATCH之后,系统指定的错误代码rc1赋给系统字段sy-subrcCatch控制结构可以嵌套,但必须在同一处理块内结束只能捕获当前调用级别的运行时错误175可捕捉的运行时错误范例REPORT z_string_replace.DATA: a TYPE i VALUE 5, b TYPE i VALUE 10, c TYPE i VALUE 0.CATCH SYSTEM-EXCEPTIONS

77、 arithmetic_errors = 3. a = b / 0.ENDCATCH.IF sy-subrc = 3. WRITE:/ Division by zero!.ENDIF.176不可捕捉的运行时错误如果运行时错误无法捕捉或者未对可捕捉的错误进行捕捉,系统无法处理程序,将进入short dump界面SHORT DUMP显示系统变量返回值,程序中断点等信息系统可以保存14天的short dump,可以通过事物码ST22查看177Short dump图示178其他补充Append lines of itab1 to itab2179数据库操作数据库基础数据库表维护提取数据更新数据数据一致

78、性其他数据操作形式180数据库基础数据定义(DDL)数据操纵(DML)数据控制(DCL)语句形式:Open SQL / Native SQL181数据库操作数据库基础数据库表维护提取数据更新数据数据一致性其他数据操作形式182数据库表维护表字段关键字索引提示 :create table xvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

79、vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv cxzz x q1xxx (无此形式)183数据库操作数据库基础数据库表维护提取数据更新数据数据一致性其他数据操作形式184提取数据selectSelect语法结构SELECT FROM INTO WHERE GROUP BY ORDER BY .提示:隐式工作区提示:隐式工作区select single * from mara.185提取数据select186选择单行数据语法结构语法结构 select single into fro

80、m where 187选择多行数据循环选择循环选择 select endselect.选择至内表选择至内表 select into | corresponding corresponding fields of table itab. 188选择字段选择全部字段选择全部字段 select *选择指定字段选择指定字段 select field1 field2 from into . where select tabfield1 tabfield2 from into where 189INTO Into field / wa / itab 190指定查询条件指定查询条件Select where

81、.比较运算符:如比较运算符:如= 范围限定运算符范围限定运算符 :wheref NOT between g1 and g2字符比较运算符字符比较运算符 wheref NOT like _dfad%检查列表值检查列表值 :wheref NOT in (g1,g2,gn)检查空值检查空值 : wheref NOT is null 检查选择表:检查选择表:wheref NOT in itab_ranges 191多表结合查询SELECT语句嵌套语句嵌套select carrid connid from spfli into (wa_carrid,wa_connid) where cityfrom =

82、 Singapore.select carrname from scarrinto wa_carrname where carrid = wa_carridwrite wa_carrname.endselect.endselect. 192多表结合查询For all entries 选项选项select for all rntries in itab where 注意:在select之前判断 itab是否为空使用视图使用视图 193多表结合查询结合查询(结合查询(inner join / left outer join) inner join:select from inner join jo

83、intable on . inner join jointable on .left outer join:select from left outer join jointable on . left outer jointable on . 194多表结合查询子查询Select . From . .into . . where exist / in / = ( select . 195组合查询结果总计功能select max(f1) / min(f1) / sum(f1) / avg(f1) . 分组总计 select group by 指定分组条件 select having 指定行顺序

84、 select order by 196数据库操作数据库基础数据库表维护提取数据更新数据数据一致性其他数据操作形式197更新数据更新数据INSERT UPDATE MODIFY DELETEINSERT插入单行数据 insert into dbtab values / from wa插入多行数据 insert dbtab from table itab.注意:在插入过程中数据库表的关键字段值唯一 insert dbtab from table itab accepting duplicate keys. 198更新数据更新数据UPDATE更新单行数据 update dbtab set upda

85、te dbtab from wa.更新多行数据 update dbtab set update dbtab from table itab.MODIFY = INSERT + UPDATE修改单行数据 modify dbtab from wa.修改多行数据 modify dbtab from table itab.DELETE删除单行数据 delete dbtab from wa.删除多行数据 delete dbtab where. 清空数据库 delete dbtab. 199数据库操作数据库基础数据库表维护提取数据更新数据数据一致性其他数据操作形式200数据一致性数据一致性数据库提交数据库

86、提交显式提交:commit work and wait.锁定锁定数据库锁定SAP锁定:锁对象权限检查权限检查 201数据库操作数据库基础数据库表维护提取数据更新数据数据一致性其他数据操作形式202其他数据操作形式其他数据操作形式文件操作文件操作 应用服务器文件应用服务器文件 本地文件本地文件 203报表上期补充报表开发ALV报表204上期补充日期练习12月份问题 select aid aname bmobile into table it_test from zzhangyj_test1 as a* LEFT OUTER JOIN zzhangyj_test1_1 inner join zzh

87、angyj_test1_1 as b on aid = bid.Message205报表创建及生成工具Quick viewerSAP Query (SQ01)ABAP开发报表类型普通列表交互式列表ALV列表206ABAP报表设计报表事件选择屏幕标准列表交互式列表ALV列表207报表事件报表事件分类运行时事件触发事件块中止208标准列表事件分类(一)过程化事件:INITIALIZATION初始化事件,用于程序开始运行时某些变量或者参数的初始化START-OF-SELECTION选择开始事件,若有选择屏幕,则处理完选择屏幕后触发,报表程序默认事件块,不属于其他事件的代码,则自动插入该事件块的初始部

88、分END-OF-SELECTION选择结束事件,在该事件后输出列表,若使用逻辑数据库,在逻辑数据库处理结束后触发选择屏幕事件:INITIALIZATION后,START-OF-SELECTION之前开始AT SELECTION-SCREEN OUTPUT选择屏幕PBO事件,显示选择屏幕之前触发AT SELECTION-SCREEN 选择屏幕PAI事件,在选择屏幕上执行某些功能后触发,可包含多个附加项,用于控制选择屏幕状态,并对用户交互进行响应:输入错误值,选择可选值等209标准列表事件分类(二)逻辑数据库事件,若程序中使用逻辑数据库,则在start-of-selection后触发,其作用也是选

89、择并整理数据,可以看作过程事件GET node 选择逻辑数据库当前级别数据源中的数据GET node LATE 选择上一级别数据源中的数据列表事件TOP-OF-PAGE页眉控制,在每个新页面时触发END-OF-PAGE页脚控制,当前页面结束时触发AT-LINE-SELECTION行选择控制,用户选择某列表行时触发,用于交互式报表AT-USER-COMMAND用户交互控制,选择某个GUI功能出发,用于交互式报表210运行时事件触发图示开始运行程序初始化过程选择屏幕处理单行数据读取(逻辑数据库或者Select循环全体数据处理列表输出单行数据处理211运行时事件触发解释运行程序触发INITIALIZ

90、ATION事件触发AT SELECTION-SCREEN OUTPUT、AT SELECTION-SCREEN事件触发START-OF-SELECTION事件触发逻辑数据库事件(如果使用逻辑数据库)触发END-OF-SELECTION事件触发TOP-OF-PAGE、END-OF-PAGE事件触发列表事件和用户交互(AT LINE-SELECTION, AT-USER-COMMAND)212事件块示例程序REPORT zr_list_sample NO STANDARD PAGE HEADING LINE-COUNT 27(2).DATA: header(30), footer(30), it_

91、mara LIKE mara OCCURS 0 WITH HEADER LINE, wa_mara LIKE mara.INITIALIZATION. header = Demo program for report event. footer = Footer of Demo program.START-OF-SELECTION. SELECT * INTO CORRESPONDING FIELDS OF TABLE it_mara FROM mara.END-OF-SELECTION. LOOP AT it_mara. WRITE:/ it_mara-matnr under Materia

92、l Number, it_mara-mtart under Mat. Type, it_mara-matkl under Mat. Group. ENDLOOP.TOP-OF-PAGE. WRITE: / header. WRITE:/(18) Material Number, (10) Mat. Type, (10) Mat. Group.END-OF-PAGE. SKIP. WRITE: / footer.213事件块中止无条件中止STOP:中止当前事件块,直接转向END-OF-SELECTIONEXIT:离开任何事件块,转向列表输出屏幕有条件离开任何事件块CHECK:离开当前事件块,转向

93、下一事件块214事件块中止范例REPORT z_ending_event_blocks.PARAMETER p_mode(5).START-OF-SELECTION. CASE p_mode. WHEN STOP. WRITE:/ Testing STOP. STOP. WHEN EXIT. WRITE:/ Testing EXIT. EXIT. WHEN OTHERS. CHECK p_mode = CHECK. WRITE:/ Testing CHECK. ENDCASE. WRITE:/ End of START-OF-SELECTION.END-OF-SELECTION. WRITE:

94、/ End of Report.215ABAP报表设计报表事件选择屏幕逻辑数据库标准列表交互式列表ALV列表216选择屏幕选择屏幕 选择表格式化选择屏幕选择屏幕事件217选择屏幕定义定义:parameters / select-optionsParameters语法 :PARAMETERS . DEFAULT .示例:PARAMETERS: WORD(10) TYPE C, DATE TYPE D, NUMBER TYPE P DECIMALS 2.218选择屏幕定义Parameters其他格式 默认值:default 大小写:lower/upper case必输项: OBLIGATORY复选

95、框: as chechbox单选按钮:radiobutton group XXX.219选择屏幕定义Select-options语法SELECT-OPTIONS FOR DEFAULT TO .其他格式: . NO-EXTENSION . . NO INTERVALS .lower/upper caseobligatory220选择表:格式DATA: BEGIN OF it_seltab occurs 0,sign(1),option(2),low,high, END OF it_seltab.221选择表:解释SIGN: 长度为1的C类型数据,允许值:I 表示包含,IncludeE 表示排除

96、,Exclude OPTION:长度为2的C类型数据,包含运算符,允许值:如果HIGH为空,可为EQ,NE,GT,LE,LT,GE,CP等如果HIGH不为空,可使用BT和NB(位于,不位于)LOW:与Option结合,该字段的选择下界,若只填LOW,则为单值选择HIGH:该字段的选择上界,若填入HIGH,则为选择范围;若HIGH/LOW均不填,则选择所有222格式化选择 屏幕下划线要在选择屏 幕中给一行 或行中的一 部分加下划 线,请使用 SELECTION-SCREEN 语句的 ULINE 选项。语法 如下:SELECTION-SCREEN ULINE / .该语句创建 下划线。如果不使用

97、格式选项 , 则在当前行 下面创建新 行。如果使 用格式选项 , 下划线将从 当前行的位 置 处开始,连 续 个字符。通 过一行中的 几个元素, 也可以不通 过 来指定 ()。SELECTION-SCREEN ULINE /1(50).注释要在选择屏 幕中书写文 本,请使用 SELECTION-SCREEN 语句的 COMMENT 选项。语法 如下:SELECTION-SCREEN COMMENT / .使用该选项 时必须定义 格式(开始 位置和长度 只有一行上 具有几个元 素时才可以 省略 )。SELECTION-SCREEN COMMENT /10(30) COMM1.223 将几个元素

98、放在一行上要将参数或 注释集合定 位在选择屏 幕的一行上 ,必须在由 下列两条语 句封闭的块 中声明元素 :SELECTION-SCREEN BEGIN OF LINE. .SELECTION-SCREEN END OF LINE.请注意,使 用该选项时 不会显示选 择文本(参 数名或文本 元素)。要 显示选择文 本,必须通 过与 COMMENT 选项一起使 用 SELECTION-SCREEN 语句提供描 述。另外,请不 要把斜杠与 格式选项 一起使用。 在该格式选 项中,可以 在上述语句 中省略位置 说明 。 随后对象将 定位在行中 的当前位置 。SELECTION-SCREEN BEGI

99、N OF LINE. SELECTION-SCREEN COMMENT 1(10) TEXT-001. PARAMETERS: P1(3), P2(5), P3(1).SELECTION-SCREEN END OF LINE.该示例使下 列行出现在 选择屏幕上 :224定位元素要在选择屏 幕上定位下 一个参数或 注释,请和 POSITION 选项一起使 用 SELECTION-SCREEN 语句。语法 如下:SELECTION-SCREEN POSITION .对于 ,可以指定 数字 POS_LOW 或 POS_HIGH。 POS_LOW 和 POS_HIGH 是使用SELECT-OPTION

100、S 语句时“从 ”和“到” 字段在选择 屏幕上出现 的位置。请只在 BEGIN OF LINE 和 END OF LINE 选项之间使 用位置选项 。REPORT SAPMZTST.TABLES SPFLI.SELECT-OPTIONS AIRLINE FOR SPFLI-CARRID.SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION POS_HIGH. PARAMETERS FIELD(5).SELECTION-SCREEN END OF LINE.选择屏幕如 下所示:参数 FIELD 的输入字段 出现在选择 标准 AIRLI

101、NE 的“到”字 段之下。对 于 FIELD, 不显示任何 选择文本。225创建元素块要在选择屏 幕上创建元 素逻辑块, 请用 SELECTION-SCREEN 语句的 BEGIN OF BLOCK 选项选择块 的开始,然 后定义各个 元素并用 END OF BLOCK 选项选择块 的结束,如 下所示:语法SELECTION-SCREEN BEGIN OF BLOCK WITH FRAME TITLE . .SELECTION-SCREEN END OF BLOCK .必须为每个 块定义名称 。可以嵌套 块。如果增加 WITH FRAME 选项,在块 的周围将画 外框。最多 可以嵌套 5 层带

102、外框的 不同块。可以使用 TITLE 选项给每个 外框增加标 题。就象 COMMENT 选项中的 , 可以是文本 符号或字符 文字。该字 符字段的长 度是外框的 宽度,该宽 度自动按照 外框的嵌套 深度进行设 置。226创建元素块SELECTION-SCREEN BEGIN OF BLOCK RAD1 WITH FRAME TITLE TEXT-002. PARAMETERS R1 RADIOBUTTON GROUP GR1. PARAMETERS R2 RADIOBUTTON GROUP GR1. PARAMETERS R3 RADIOBUTTON GROUP GR1.SELECTION-S

103、CREEN END OF BLOCK RAD1.在选择屏幕 上,三个单 选按钮 R1 、 R2 、 R3 组成块,该 块被外框包 围并且具有 在文本符号 002 中指定的标 题,如下所 示:227格式化示例228选择屏幕事件(1)AT SELECTION-SCREEN OUTPUT选择屏幕PBO事件,每次选择屏幕调用之前触发,在其中进行选择屏幕输出之前的准备工作AT SELECTION-SCREEN选择屏幕最后被触发的事件,用户在选择屏幕上回车、选择某个GUI按钮、功能键或者菜单项时触发AT SELECTION-SCREEN ON field针对某个选择字段输入的PAI事件,该字段值传给程序时

104、触发,可用于该字段本身正确性检查,若错误,该字段可重新输入,其他元素不可输入229选择屏幕事件(2)AT SELECTION-SCREEN ON BLOCK block选择屏幕元素区域输入的PAI事件,该区域所有字段的值传递给程序时产生。错误时,该区域元素可重输,其他区域元素不可输入AT SELECTION-SREEN ON RADIOBUTTON GROUP group1与元素区域PAI事件类似,对象换成了单选按钮组AT SELECTION-SCREEN ON seltabAT SELECTION-SCREEN ON END OF seltab使用多行选择对话框时出现,前者用于输入后正确性检

105、查;后者用于选择表输入结束后的检查230选择屏幕事件(3)AT SELECTION-SCREEN ON HELP-REQUEST FOR field AT SELECTION-SCREEN ON VALUE-REQUEST FOR field选择屏幕的POH和POV事件,即F1和F4事件,分别定义字段帮助和输入帮助用户可以通过Back、Cancel、Exit等按钮退出选择屏幕231选择屏幕事件范例REPORT z_selection_screen_event.TABLES: marc.PARAMETERS: p_matnr LIKE marc-matnr, p_werks LIKE marc-

106、werks, p_dismm LIKE marc-dismm, p_pwd01(16) type c.AT SELECTION-SCREEN. IF p_matnr IS INITIAL. MESSAGE e888(abapdocu) WITH Please input some value. ENDIF.AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. IF sy-dynnr = 1000. IF screen-name = P_WERKS. p_werks = 1000. screen-input = 0. MODIFY SCREEN. ENDIF.

107、IF screen-name = P_PWD01. screen-invisible = 1. MODIFY SCREEN. ENDIF. ENDIF. ENDLOOP.232ABAP报表设计报表事件选择屏幕逻辑数据库标准列表交互式列表ALV列表233标准列表格式化列表输出页面格式设定数据整理输出234格式化列表输出(1)字段输出语句WRITE:除ULINE外的唯一列表屏幕输出语句,write at /pos(len) f /表示换行输出;len指定输出长度;pos定位输出如果未通过pos定位输出,且当前行没有足够的空间,则会自动地将后续内容输出到新行中如果指定的输出长度小于字段内容的长度,将

108、被截断如果没有no-gap选项,系统将当前输出光标置于上次输出结尾错后一个空格的位置上ULINE的功能也可以由write语句实现235格式化列表输出(2)输出图标符号,先在程序中使用INCLUDE 和INCLUDE 或者单独使用INCLUDE , 关于icon和symbol可通过F1 Help获得信息WRITE field AS SYMBOL输出图标WRITE field AS ICON输出符号WRITE field AS CHECKBOX输出复选框,若field的第一个字段为X,则复选框为选中状态,否则为为选中,可以通过单击鼠标来改变其状态SAP标准列表不能随意插入非系统内部的图标,如果需要

109、可以通过Script Form或Smart Form等工具进行版式设计236格式化列表输出(3)输出线水平线:ULINE AT /pos(len).该语句等价于WRITE AT /pos(len) SY-ULINE.pos为起始位置,len为输出长度,若长度不指定则该线贯穿整个屏幕区域或者用连接字符-输出水平字段竖线: WRITE AT /pos(len) SY-VLINE.或者WRITE AT /pos(len) |. 竖线只在一行内有效,从上到下贯穿多行的竖线,需要在每一行的同一位置都使用该语句空行: skip n.使用SET BLANK LINES on|off后,可采用write /

110、.实现空行237格式化列表输出(4)设定输出位置:手工重新设定输出位置,填入或者修改原有内容POSITION col.指定列位置SKIP TO LINE n.指定行位置,用于指定光标绝对位置NEW-LINE.指定光标起始于一个新行,类似write语句中的/选项WRITE UNDER f.指定光标位于当前行,但列位置设定为以前输出的字段f的正下方238格式化列表输出(5)设定输出格式:使用format实现屏幕格式化功能format ON|OFF ON|OFF on|off 默认值为on,可由变量代替,变量0为off,否则为on. 适用后续输出语句,直至再次使用off|on语句,format选项可

111、用于WRITE语句的格式化选项COLOR n ON|OFF,设置列表行的背景色INTESIFIED ON|OFF,设定字段是否高亮度输出INVERSE ON|OFF,设定是否将背景色即文字色反转输出HOTSPOT ON|OFF,设定光标为手型显示,单击触发行选择时间INPUT ON|OFF,设定该字段为输入字段,允许用户输入RESET恢复上述所有设定默认值239标准列表格式化列表输出页面格式设定数据整理输出240页面格式设定(1)列表标题和栏目标题维护列表标题和栏目标题:ABAP Editor-Goto-Text Elements-List Headings如未维护,则程序使用程序属性的Tit

112、le中内容作为标题隐藏预设定的表头行和标题栏REPORT|PROGRAM NO STANDARD PAGE HEADING.使用自定义的表头行和标题替代标准设定NEW-PAGE NO-TITLE|WITH TITLE NO-HEADING|WITH HEADING使用TOP-OF-PAGE事件在程序中手工设定标题行241页面格式设定(2)设定页长和页宽在REPORT或者PROGRAM语句中使用:LINE-SIZE width,设定每页列数LINE-COUNT count(footer_count),设定每页行数(页脚行数)该设定应用于所有级别的列表使用NEW-PAGE语句在列表级内部设定:NE

113、W-PAGE LINE-SIZE width LINE-COUNT count(footer_count)242页面格式设定(3)页眉:TOP-OF-PAGE,该事件在每一个新页面生成时触发始终出现在页面顶部页脚:END-OF-PAGE,该事件在每个页面结束时触发,前提是LINE-COUNT附加项为期预留出行数或者通过REVERSE语句触发始终出现在页面下方243页面格式设定(5)设定固定栏设定列作为左侧边界:SET LEFT SCROLL-BOUNDARY column n,设定列表的固定栏跳至任意的列表行SCROLL LIST TO FIRST PAGE|LAST PAGE PAGE pa

114、g INDEX idx LINE lin244系统页面列表系统字段SY-LINCT, Report语句中设定的LINE-COUNTSY-LINSZ, Report语句中设定的LINE-SIZESY-SROWS,当前窗口中的列表行数SY-SCOLS,当前窗口中的列表栏目数SY-PAGNO,当前页的页码SY-LINCO,当前输出页面的当前选定行序号SY-COLNO,当前输出页面的当前选定列序号注释:系统依次填充SY-PAGNO、SY-LINCO、SY-COLNO三个字段245标准列表格式化列表输出页面格式设定选择屏幕设定(略)数据整理输出246数据整理输出定义内表:按照程序规格要求定义需要的内表填充数据:通过OPEN SQL|NATIVE SQL等数据库操作语句从数据库表或逻辑数据库提取整理数据:排序、加总、平均、删除重复数据等DELETE ADJACENT DUPLICATES FROM ITAB.删除相邻行的重复数据控制级处理:通过内表中的at等语句处理输出结果247

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号