SAP ABAP基础语法培训教程(珍藏版)PPT课件.ppt_第1页
SAP ABAP基础语法培训教程(珍藏版)PPT课件.ppt_第2页
SAP ABAP基础语法培训教程(珍藏版)PPT课件.ppt_第3页
SAP ABAP基础语法培训教程(珍藏版)PPT课件.ppt_第4页
SAP ABAP基础语法培训教程(珍藏版)PPT课件.ppt_第5页
已阅读5页,还剩242页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2020 4 8 1 ABAP 4培训 Sap及abap概述 2020 4 8 2 ABAPTraining SAP及ABAP 4Overview系统开发语言创建企业报表应用事务开发商用文档设计 2020 4 8 3 SAP介绍 ERP巨人SAP 创立于1972年 ERP思想的倡导者 ERP领域中处于领导地位 全球最优秀的企业管理软件供应商SAP System ApplicationandProductsinDataProcessing 即数据处理的系统 应用和产品 2020 4 8 4 SAPR 3 一体化ERP系统 客户 服务器 FI财务会计 CO财务控制 TR司库 PS项目管理 WF工作流程管理 IS行业解决方案 MM物料管理 HR人事管理 SD销售与分销 PP生产计划 QM质量管理 PM工厂维护 2020 4 8 5 SAP新的业务模块和组件 CRM顾客关系管理SCM供应链管理BW商业信息仓库APO高级计划与优化 AdvancedPlannerandOptimizer 2020 4 8 6 R 3主要业务模块介绍 生产计划控制物料管理销售与分销财务会计管理会计人力资源 2020 4 8 7 SAP其他业务模块 跨应用组件 CA Cross ApplicationCompo nents 基础系统组件 BC BasisComponents 品质管理 QM QualityManagement 资产管理 AM AssetsManagement 2020 4 8 8 SAP业务流程 S D 销售订单 PP 主生产计划 物料需求计划 采购订单 库存管理 生产执行 开票 运输 生产订单 发票校验 成本 财务 MM CO FI 2020 4 8 9 ERP实施步骤 总体规划 分步实施教育和培训原形测试数据准备系统开发模拟运行切换 2020 4 8 10 SAP实施结构设计 实施过程中需要多少个R 3系统需要多少个Client 具体任务是什么各个集团将如何分布在不同的系统中 通常将 开发 质量控制 测试 产品 分别置于三个不同系统的不同集团中 2020 4 8 11 开发过程中标准制定 制定命名规则 自定制的所有对象应当以 Z 或 Y 开头 避免命名冲突界面风格指南 应与SAP的标准保持一致文档维护 项目文档 项目设计 实施进度等最终用户文档 对象说明 程序说明等技术说明文档 程序代码说明 程序规格等修订列表维护 对所有对象的修改清单对象模块化 在线文档标准等 2020 4 8 12 ABAPTraining SAP及ABAP 4Overview系统开发语言创建企业报表应用事务开发商用文档设计 2020 4 8 13 R 3开发平台介绍 R 3体系结构R 3仓库与开发平台系统开发工具第一个ABAP程序ABAP数据字典介绍 2020 4 8 14 R 3逻辑体系结构 逻辑上分为显示层 应用层 数据库层数据库层 主要业务数据及开发过程中的程序和元数据通过关系数据库管理系统进行操作 应用层 从数据层提取数据进行处理或者存储新数据显示层 SAPGUI 系统和用户间的接口 用户通过该层访问系统应用 输入新数据并接受工作过程的处理结果 2020 4 8 15 R 3仓库 R 3仓库储存所有SAP系统开发过程中的对象 这些对象也被称之为仓库对象 ABAP程序数据库表结构定义系统数据类型仓库对象不是企业业务数据 而是系统内部数据 与Client无关仓库对象要从R 3系统传入另一R 3系统 需要开发类别辅助 2020 4 8 16 开发类别 仓库对象创建时 需要指定所属的开发类别仓库对象在R 3仓库中按照开发类别分类 这些对象的集合形成的组织单元即为开发类别开发类别的主要功能是对仓库对象进行管理 目录管理及传输控制管理等 开发类别中所包含的仓库对象可以通过对象浏览器 SE80 查看和维护开发类是ABAP工作台对象 其修改通过TransportOrganizer记录 开发类别的开发类别是其自身 2020 4 8 17 ABAP工作台工具介绍 1 对象导航器 ObjectNavigator 通过开发类别组织R 3对象的浏览及维护程序编辑器 ABAPEditor 编辑ABAP程序代码数据建模器 Datamodeler 业务数据建模工具数据字典 ABAPDictionary 定义系统数据类型及数据库对象简单报表创建器 ABAPQuery 2020 4 8 18 ABAP工作台工具介绍 2 函数创建器 FunctionBuilder 创建功能模块类创建器 ClassBuilder 创建ABAP类及方法等面向对象元素菜单绘制器 MenuPainter 用于创建屏幕的标题 菜单 工具栏中的元素及功能设定屏幕绘制器 ScreenPainter 用于创建SAP标准屏幕工作台管理器 WorkbenchOrganizer 用于管理修改请求 2020 4 8 19 对象导航器 ABAP工作台的众多开发工具的中心入口 可对各种R 3仓库对象进行维护 具体见下图事务码 SE80包括导航区域 对象浏览及工具区域三大块导航区域 对象列表选择及名称输入区域对象列表 对象列表机上下文菜单 contextmenu 工具区域 ABAP工作台工具 工具栏 菜单 标准工具栏 应用工具栏及附属窗口等 2020 4 8 20 ABAP对象导航器图例 导航区域 工具区域 对象列表 附属窗口 2020 4 8 21 ABAP编辑器路径 事务码SE38 2020 4 8 22 Abap程序及相关介绍 ABAPadvancedbusinessapplicationprogramming是 高级商业应用编程 的缩写 HelloWorld 程序系统程序实例 ABAPDOCU DWDM 2020 4 8 23 ABAP DDIC 数据字典介绍 数据字典 定义和管理数据元素及数据库元素的中心工具 所有的数据库表结构及系统全局数据类型等都需要在其中创建并维护功能 自定义系统共用数据类型 基本类型 结构和表 定义数据库对象结构 数据库表 视图和索引等 进行屏幕字段的格式化 编辑 比如F1和F4帮助事务码 SE11 2020 4 8 24 ABAPTraining SAP及ABAP 4Overview系统开发语言创建企业报表应用事务开发商用文档设计 2020 4 8 25 企业报表类型 静态报表交互式报表 2020 4 8 26 报表格式 2020 4 8 27 报表格式 2020 4 8 28 ABAPTraining SAP及ABAP 4Overview系统开发语言创建企业报表应用事务开发商用文档设计 2020 4 8 29 对话编程简介 事务是实施与用户对话的程序 在典型的对话中 用户可以在系统显示的屏幕上输入或请求信息 作为对用户输入或请求的响应 程序执行适当的动作 转到下一个屏幕 显示输出或更改数据库 SAP系统中的每个对话都是由动态程序控制的 动态程序包含一个屏幕和它的流逻辑并且精确控制一个对话步骤 流逻辑决定在显示屏幕前 输出前的PBO处理 和接收到用户在屏幕上制作的条目后 输入后的PAI处理 进行的处理 2020 4 8 30 ABAPTraining SAP及ABAP 4Overview系统开发语言创建企业报表应用事务开发商用文档设计 2020 4 8 31 主要工具 SMARTFORMSSCRIPT 2020 4 8 32 ABAP基础 ABAP语言概述数据定义基本数据操作结构控制处理字符数据使用内表动态数据对象模块化技术错误处理程序调试 2020 4 8 33 ABAP程序结构 ABAP是一种事件驱动语言 包括 数据定义 整个程序中可见的全局数据类型和数据对象处理块 Processingblocks ABAP程序的主要结构单元 除数据定义和声明语句外的所有ABAP语句都必须隶属于某一个处理块ABAP程序基本结构如下图所示 2020 4 8 34 处理块类型 事件块 Eventblocks 事件关键字开头 至下一事件关键字出现 或程序结束 无事件结束关键字报表事件 Initialization Start of selection列表事件 At line selection屏幕事件 对话事件 Processbeforeoutput processafterinput对话模块 DialogModules 有开始和结束关键字 用于事务程序设计 从属于对话事件 在对话事件块中调用过程 Procedure 有开始和结束关键字 独立的程序单元 包括功能模块和子程序 ABAP对象的类方法 2020 4 8 35 ABAP处理块调用范例 REPORTz processing blocks DATA text1 20 TYPEcVALUE BasicList text2 20 TYPEcVALUE SecondaryList Processingblock1 Eventblock Start of selectionSTART OF SELECTION DO5TIMES PERFORMfrm output lineUSINGsy index ENDDO Processingblock2 Eventblock atline selectionATLINE SELECTION WRITE text2 sy lsind Processingblock3 Procedure subroutinefrm output lineFORMfrm output lineUSINGp index WRITE text1 sy lsind Value p index ENDFORM 2020 4 8 36 ABAP处理块调用范例 运行结果 2020 4 8 37 程序类型的设定 程序类型包括应用程序类型和其它程序类型 在创建程序时在程序属性中设定 如下图所示 2020 4 8 38 应用程序类型 可执行程序 ExecutableProgram 创建报表 由Report关键字引导 可包括屏幕 可包含除功能模块外的所有处理块 可直接在ABAP编辑器中运行 类型代码为1 对应为报表程序模块池 ModulePool 由Program关键字引导 包括自定义的屏幕和对话模块 必须通过事务码运行 类型代码M 对应为事务程序 也叫对话程序 动态程序 2020 4 8 39 其它程序类型 不可直接运行 可为ABAP程序提供模块化单元 包括 功能组 FunctionGroup 由Function pool语句引导 包含一个或多个功能模块 类型代码为F类库 ClassPool 由Class pool语句引导 类型代码K接口库 InterfacePool 由Interface pool语句引导 类型代码J子程序池 Subroutinepools 由Program语句引导 类型代码S 包含子程序代码或类方法类型组 Typegroups 由Type pool语句引导 在数据字典中定义 无类型代码包含程序 IncludeProgram 不需要语句引导 类型代码I 只是代码复用 可直接插入其它程序中 成为该程序一部分 2020 4 8 40 ABAP语言概述 程序结构程序类型程序元素语句格式程序运行内存管理 2020 4 8 41 程序元素类型 ABAP元素 在ABAP编辑器中维护的元素屏幕元素 通过屏幕绘制器维护的元素GUI元素 通过菜单绘制器维护的元素 2020 4 8 42 程序元素 源代码 sourcecode 变式 Variants 与选择屏幕相关 用于存放输入的数据选择值 以便反复调用该程序时重复输入数据文本元素 Textelements 存储于文本池中的文本 包括文本符号 选择文本 列表标题等文档 Documentation 写给用户的说明 用于解释程序的功能 使用方法等文本元素和文档均具有语言相关性 可以由系统翻译工具进行翻译 2020 4 8 43 文本元素维护界面 2020 4 8 44 屏幕元素 SAP标准屏幕 Screen 多用于SAP事务程序设计 包括屏幕布局 Layout 和流逻辑 FlowLogic 选择屏幕 SelectionScreen 多用于报表程序中接受用户输入报表的选择标准 可通过ABAP语句控制其输出格式传统列表屏幕 Lists 只包含列表输出区域 伸出内容通过write和uline等ABAP语句生成 2020 4 8 45 GUI元素 为屏幕的一个组成部分 但设计时独立于屏幕存在 各种屏幕都可以独立分配GUI包括屏幕上方的菜单 标准工具栏 应用工具栏以及功能键和功能代码等GUI元素在程序调用时分为状态 GUIstatus 和标题 GUITitle 两部分 2020 4 8 46 ABAP语句结构 以一个ABAP语句关键字引导 句号结束ABAP语句中还可以含附加项和操作元素各关键字 选项 操作数之间应至少保留一空格范例 Reportz simple program DataText 20 VALUE Simpleprogram Start of selection WRITEtext 2020 4 8 47 ABAP语句类型 1 声明语句 用于数据元素的定义和声明 如变量 DATA PARAMETER TABLES TYPES模块化语句 用于定义运行时的处理代码块 分为事件关键字语句和过程定义关键字语句事件关键字包括 AT SELECTION SCREEN START OF SELECTION ATUSER COMMAND过程定义关键字包括 FORM ENDFORM FUNCTION ENDFUNCTION MODULE ENDMODULE控制语句 以条件控制程序处理块内部的程序流程IF ENDIF WHILE ENDWHILE CASE ENDCASE 2020 4 8 48 ABAP语句类型 2 调用语句 用于调用已定义好的处理块PERFORM CALL SUMBIT LEAVETO操作语句 用于程序内部数据操作或输出WRITE MOVE ADD以及运算符等数据库语句 用于数据库操作 含OpenSQL和NativeSQL两种 2020 4 8 49 语句链 关键字 和 可以把连续使用的相同关键字引导的语句连接在一起 以简化代码 如 WRITE text1 text2 等价于WRITEtext1 WRITEtext2 2020 4 8 50 注释 在行的开头使用 可注释该行 单个双引号 可注释该行中其后的文字 如下所示 ThiswholelineiscommentsWRITEtext Contentsbehindsthisiscomments 2020 4 8 51 程序调用 直接运行 在事务SE38或SA38中直接运行通过系统目录或者在命令域中输入事务代码运行内部调用 事务代码调用 LEAVETOTRANSACTION CALLTRANSACTION 调用返回 SUBMIT SUBMITANDRETURN 调用返回 2020 4 8 52 程序结束 自动结束 程序完全运行 自动结束强制结束 通过LEAVEPROGRAM 语句可以在任意点结束程序 2020 4 8 53 内存管理 1 运行时内存管理与用户对话相关 同一个用户和系统进行最多六个SAPGUI对话 包括SAP内存和ABAP内存两部分主对话 又称外部对话 用户登录SAP之后 即开始和应用服务器之间的主对话 各对话间无联系内部对话 在主对话中运行可执行程序或者模块池程序 开始内部对话调用序列 调用不返回 新程序内部对话代替原程序内存 并删除原程序内存 调用返回时 生成程序调用序列 生成堆栈 调用结束时 恢复上一级程序内存状态 2020 4 8 54 内存管理 2 ABAP内存 主对话内部有一个ABAP内存区域 在该对话内部 可通过EXPORTTO和IMPORTFROMMEMORY在内存堆栈之间进行数据传递 以队列的方式存储SAP内存 所有对话都可以访问的内存区域 可在SAP各对话间共享 通过SETPARAMETER和GETPARAMETER访问装载程序 调用或执行程序时 程序实例被装载到ABAP内存 第一个被装载的程序为主程序 程序装载 触发LOAD OF PROGRAM事件对象创建 创建对象 CREATEOBJECT 类的实例被装载到内部对话 该内部对话中的程序及对象都可以使用该类实例 2020 4 8 55 ABAP基础 ABAP语言概述数据定义基本数据操作结构控制处理字符数据使用内表动态数据对象模块化技术错误处理 2020 4 8 56 数据定义与宣告语句 DATA 用于定义变量以及内表 工作区间TYPE 定义类型TABLES 宣告某一个系统中的表或者结构 以便于程序中使用 同时创建表的工作区间CONSTANTS 定义一个常量Parameters selection options 2020 4 8 57 数据对象 生存周期 程序的运行期保存 存储于数据库或者输出到文件范例 DATAtxt1 15 TYPEcVALUE DataObject 初始值 类型为字符串 存储长度15个字节 2020 4 8 58 数据类型体系 基本类型 ElementTypes 分为固定长度和可变长度两种固定长度 C N T D I P F X 可变长度String XString复杂类型结构类型 结构体表类型 内表引用类型 基于基本数据定义参考变量的数据参考变量的对象 2020 4 8 59 基本类型 固定长度 2020 4 8 60 基本类型 可变长度String 字符串 如 AString XString 十六进制字符串 如 A3FF 2020 4 8 61 补充 文本文字最长可达255个字符 如果某文本文字包含引号 必须重复引号 以使系统能够将内容识别为文本文字而不是文字的结尾 新压缩类型P在系统中存放时所占内存空间只有同长度的浮点数 整数的一半数字字符N 实际上是一个字符串 但是其中的字符只能是数字 如果给该类型变量赋值不足与定义的长度 系统会自动在左边补零 2020 4 8 62 确定数据对象属性 DESCRIBE语法格式 DESCRIBEFIELDf LENGTH TYPEt COMPONENTSn OUTPUT LENGTHo DECMIALSd EDITMASKm HELP IDh 变量 LENGTH 对象长度TYPE 对象类型OUTPUT LENGT 确定输出长度DECIMALS 确定P类型数据对象的小数位长度EDITMASK确定在数据字典中定义转换例程HELP ID确定数据字典中定义的F1帮助信息 2020 4 8 63 其他定义方式 DataAlikeB Emp Data matnrlikemara matnr datelikesy datum 2020 4 8 64 ABAP基础 ABAP语言概述数据定义基本数据操作结构控制处理字符数据使用内表动态数据对象模块化技术错误处理程序调试 2020 4 8 65 基本的数据操作 数据赋值 MOVE 把源字段的值赋给目标变量 如MOVEsourceTOdestination 等价于Destination source 注意事项 源对象和目标完全兼容 类型 长度等 则赋值过程中结果不变不完全兼容但可以进行类型转换 按固定的转换规则转换不兼容且不能转换 则不能赋值 提示语法错误或者编译过程中有错误 否则会出现运行时错误 2020 4 8 66 基本的数据操作 结构体赋值 两个结构体组件结构完全一致 可以直接赋值 如stur1 stur2两结构体组件结构不完全一致 但有部分组件有对应关系 可逐个组件赋值或者使用move correspondingstru1tostru2 语句赋值 2020 4 8 67 基本的数据操作 初始值设定 将已经赋值的变量值晴空 恢复为初始状态 采用clear语句 如 clearg var1 Clear基本数据类型 初始值根据数据类型定Clear结构体类型 逐层 逐个组件拆分按上一规则执行Clear内表 清除内表表头数据语句为 clearit test 清除内表标题数据语句为 clearit test 或者refreshit test 引用类型数据 恢复初始状态 不指向任何数据对象 2020 4 8 68 数值运算 算术预算语句 2020 4 8 69 数值运算 算术预算原则 运算后赋值时需要注意类型转换多种数学表达式共存时注意优先级除法 整除运算时要注意除数不能为0运算符号及括号都是ABAP关键字 前后都需要有空格使用P类型进行计算时 程序属性FixedPointedarithmetic没有选中的话 运算时会被当作整数类型进行处理两个结构体同名字段也可以整体进行算术运算 语句为ADD CORRESPONDING 前缀和运算关键字一样 2020 4 8 70 数值运算 任意类型参数的数学函数 2020 4 8 71 数值运算 浮点数类型的数学函数 2020 4 8 72 数值运算 时间日期运算 系统将日期时间先转换为数值类型 根据这两种特殊的类型进行合理的增减 如下所示DATA secondsTYPEi hoursTYPEi time1TYPEtVALUE 100000 time2TYPEtVALUE 080000 seconds time1 time2 hours seconds 3600 WRITE Secondsbetweentime1andtime2 seconds Hoursbetweentime1andtime2 hours 2020 4 8 73 数据输出 基本输出格式 数据输出及格式化语句 WRITE ULINE FORMAT SKIP 基本输出语法如下 WRITE f ULINE FORMATcolor SKIPn 2020 4 8 74 基本数据类型的默认输出模式 2020 4 8 75 格式化输出 write语句 语法格式 write f 具体的格式化选项请参考F1帮助在用户主记录中 可以设置输出时显示的日期分隔符 小数点字符和千分符等选项 进入方式为 任意一SAP屏幕的菜单System UserProfile Owndata 2020 4 8 76 逻辑表达式 基本格式 f1f2 通用逻辑表达式列表 2020 4 8 77 逻辑表达式 特殊操作符 ISINITIAL 检查变量是否是初始值BETWEEN 检查对象的值是否属于特定范围之间 f1betweenf2andf3 IN 用于检查数据对象的内容是否遵从某个选择表的逻辑条件选择表 一种特殊的内表 每一行包含一个特定的逻辑条件 DATAseltablikerangeoff 组合逻辑表达式 AND OR NOT 如下IF ALTN and NGTF 2020 4 8 78 逻辑表达式 比较两种类型数据 兼容类型 不需要做转换 按照通常的比较方式进行不兼容类型 可转换的则先转换 转换规则 操作数之一为F类型 则其他操作数转为F类型操作数无F类型 之一为P类型 则其他操作数转为P类型无F P类型 之一为T或D类型 其他操作数转为T或D类型无F P T D类型 之一为C类型且其他为X类型 X类型转为C类型操作数之一为C类型 其他为N类型 则两种类型均转换为P类型比较结构化数据 可转换 则逐个组件比较 若不可转换 则先转为C类型在比较比较内表 首先决定于行数 若行数相同 则逐行逐个组件进行比较 如果使用等于之外的操作副 则系统找到不对等的组件即停止比较并返回结果 2020 4 8 79 ABAP基础 ABAP语言概述数据定义基本数据操作结构控制处理字符数据使用内表动态数据对象模块化技术错误处理程序调试 2020 4 8 80 结构控制 程序处理块内部的代码由下列三种结构组织顺序结构 程序顺序执行分支结构 根据不同的条件执行不同的语句块循环结构 反复执行某个语句块在ABAP中 控制结构都是在程序处理块内部的 作用范围不能超出一个处理块 所以称为处理块内部块内部控制 2020 4 8 81 分支控制 包括两种分支控制条件分支语句 IF ENDIFIfconditions elseifconditions Endif CASE ENDCASECASEf whenf1 orf2or when whenothers Endcase 2020 4 8 82 循环控制 无条件循环 无条件循环 使用DO语句实现DO ntimes ENDDO N用于控制循环次数 可以是数字或者变量如果N为0或者负数 则不进入该循环 如果不限定N的值 则需要用EXIT 推出当前循环 STOP或REJECT等语句强制结束循环 避免死循环系统变量SY INDEX为已经处理过的循环次数值 DO循环可以嵌套 SY INDEX为当前循环的次数 2020 4 8 83 无条件循环范例 REPORTz do loop DATA out indexTYPEi in indexTYPEi DO2TIMES out index sy index WRITE out index SKIP DO3TIMES in index sy index WRITE out indexNO GAP NO GAP in indexLEFT JUSTIFIED ENDDO SKIP ENDDO 2020 4 8 84 条件循环 使用WHILE语句实现 进入循环之前 先检查语句中逻辑表达式的值 如果为真 执行后面的语句 当逻辑值不再为真或者执行到中止语句时 结束循环 语句格式如下 WHILE ENDWHILE SY INDEX包含已执行的循环次数 可以嵌套循环 要避免死循环问题 一般需要在程序中修改逻辑表达式某变量值 确保一定次数后语句条件为假 否则语句块中必须含有循环中止语句 2020 4 8 85 条件循环语句范例 REPORTz while loop DATA g lenthTYPEi g str01 30 TYPEcVALUE Beijing2008 WHILEg str01NEspace g lenth sy index SHIFTg str01 ENDWHILE skip5 WRITE Lengthofg str01 g lenth 注释 该程序确定字符串的有效长度 每次执行循环时 将字符串左移一位 直到其仅包含空格为止 2020 4 8 86 循环的中止 无条件循环 设定循环次数实现中止条件循环 在循环过程中修改逻辑表达式中变量的值 使条件语句为假强制结束循环语句CONTINUE用于无条件中止当前循环 运行该语句后跳过当前语句块所有生于语句执行 但并非结束循环 而是开始下一轮循环或条件判断CHECK用于有条件中止当前循环 与CONTINUE语句类似EXIT 无条件中止循环 系统退出当前循环 继续执行当前循环后面的代码 嵌套循环时执行上一级循环STOP REJECT 退出循环并无条件结束程序 2020 4 8 87 循环中止范例 REPORTz terminate loop DO4TIMES IFsy index 2 CONTINUE ENDIF WRITEsy index ENDDO SKIP DO4TIMES CHECKsy indexBETWEEN2AND3 WRITEsy index ENDDO SKIP DO4TIMES IFsy index 3 EXIT ENDIF WRITEsy index ENDDO 2020 4 8 88 ABAP基础 ABAP语言概述数据定义基本数据操作结构控制处理字符数据使用内表动态数据对象模块化技术错误处理程序调试 2020 4 8 89 处理字符数据 字符数据操作连接字符串拆分字符串查找字符串替换字符串内容确定字符串长度其他操作语句字符串比较定位操作字符串 2020 4 8 90 字符数据操作 连接字符串 语句关键字 CONCATENATEconcatenates1 snintos dest separatedbysep 连接字符串s1 sn并将结果赋给字符串s destseparatedby用于指定一个字符 串 作为分隔符如果连接字符串后的总长度超过目标字符串长度 则把结果截断后赋值 一旦出现截断情况 sy subrc为4 否则为0为了避免截断 可以把目标字符串定义为string类型 2020 4 8 91 连接字符串范例 REPORTz string concatenate data g s1 9 typecvalue Firstname g s2 10 typecvalue Secondname g s3 20 typec g sp 1 typecvalue concatenateg s1g s2intog s3 write g s3 concatenateg s1g s2intog s3separatedbyg sp write g s3 2020 4 8 92 字符数据操作 拆分 使用SPLIT语句可将字符串拆分未多个小串splitsourceatsepintos1 sn 在源字符串中搜索分隔符 sep 并根据该分隔符把源串拆分为多个小串并放到目标字串s1 sn中子串中不包括分隔符与连接语句类似 如果目标字串长度不够会进行截断 且sy subrc为4 否则为0如果源串拆分的字串数量多于目标字串数量 则源串最后剩余部分包括其后的分隔符都将写入最后一个字串 可采用内表来避免这种情况 2020 4 8 93 字符串拆分范例 REPORTz string split DATA textTYPEstring itabTYPETABLEOFstring text ABAPisaprogramminglanguage SPLITtextATspaceINTOTABLEitab LOOPATitabINTOtext WRITE text ENDLOOP 2020 4 8 94 字符数据操作 查找字串 使用search语句 searchcforstr 在变量C中茶中字符串str 如果找到 sy subrc返回0 sy fdpos返回变量C中该字符串的位置 从左算起的字符偏移量 否则将sy subrc返回4字符串str 可以使用通配符 也可以设定保存或者忽略str末尾的空格 如下所示 str 搜索str并忽略尾部空格 str 搜索str不忽略尾部空格 str 搜索以str结尾的单词str 搜索以str开头的单词注意 单词是指以符号 空格 标点符号 其他字符 分隔的字串 2020 4 8 95 查找字符串范例 REPORTz string search DATAg str 30 TYPEcVALUE Thisisatestsentence WRITE Searched SY SUBRC SY FDPOS SEARCHg strFOR X WRITE X sy subrcUNDER SY SUBRC sy fdposUNDER SY FDPOS SEARCHg strFOR e WRITE e sy subrcUNDER SY SUBRC sy fdposUNDER SY FDPOS SEARCHg strFOR e WRITE e sy subrcUNDER SY SUBRC sy fdposUNDER SY FDPOS SEARCHg strFOR e WRITE e sy subrcUNDER SY SUBRC sy fdposUNDER SY FDPOS SEARCHg strFOR s WRITE s sy subrcUNDER SY SUBRC sy fdposUNDER SY FDPOS 2020 4 8 96 字符数据操作 替换字符串内容 用其他字符串替换字段的某些部分 使用replacestr1withstr2intos dest lengthl 先对字段s dest进行搜索 发现字串str1即用str2替换第一次出现的部分如果指定length 则只搜索前L个字节如果SY SUBRC返回为0 则找到并替换成功 否则为进行任何替换 2020 4 8 97 替换字符串范例 REPORTz string replace DATAnameTYPEstring name Michael Cheong WRITE notreplaced name WHILEsy subrc 0 REPLACE WITH INTOname ENDWHILE WRITE replaced name 2020 4 8 98 字符数据操作 确定字串长度 字符串长度 从首字符开始到最后一个非空字符的长度 即不包括结尾空格 使用 n STRLEN str 将操作数str作为字符数据类型处理 不考虑其实际类型 也不进行转换 范例如下 REPORTz strlen DATA text 24 typecVALUE ABAPLanguage lenTYPEi Len strlen text Write Lengthof text is len 2020 4 8 99 字符数据操作 其他操作语句 SHIFT 将字符串整体或者字串进行位移CONDENSE 删除字符串中多于的空格TRANSLATE 字符转换CONVERTTEXT创建一个可以排序的格式OVERLAY用一个字符串覆盖另一个字符串 2020 4 8 100 字符数据比较 2020 4 8 101 定位操作字串 通过制定长度及偏移量来操作指定的部分字串 语句为 s o L 对变量S从第o 1位开始且长度为L的部分执行该语句的操作 如果未指定长度 则对第o 1位至程序末尾之间的所有位进行处理 偏移量和长度可以为变量动态指定 但是只能是如下情况 MOVE赋值 WRITETO赋值 ASSIGN分配给字段符号 PERFORM将数据传给子程序 范例如下 REPORTz string comparison DATA f1 8 VALUE ABCDEFGH f2 20 VALUE 12345678901234567890 f2 6 5 f1 3 5 2020 4 8 102 系统变量 所有的系统字段存放于结构SYST中 可以通过SE11来浏览SY SUBRC 该变量是多数命令行执行成功与否的标志 比如数据库操作 功能函数调用等等 0表示操作成功 其他为操作失败 是ABAP编程中最常用 最有用的系统变量 2020 4 8 103 建表 DataelementDomin 2020 4 8 104 谢谢大家 Q A 2020 4 8 105 ABAP基础 ABAP语言概述数据定义基本数据操作结构控制处理字符数据使用内表动态数据对象模块化技术错误处理程序调试 2020 4 8 106 结构 工作区 内表 结构 Structure 工作区 Workarea 内表 Innertable 2020 4 8 107 结构 属于复杂类型 内容包含定义的数据字段TYPES BEGINOFline idTYPEi name 30 agetypei ENDOFline 2020 4 8 108 内表工作区 内表 用于在程序运行期间存储多行结构相同的数据工作区 内表是按行进行访问的 必须使用某个工作区域作为与表格互相传输数据的接口 工作区与内表的定义data wa linetypeline it linetypetableofline 表头行 withheaderline 隐式工作区读取数据行更新数据行工作区内表 2020 4 8 109 内表的分类 内表种类 标准表排序表哈希表 2020 4 8 110 定义内表 语法格式 TYPES DATAitab TYPE LIKE tablekindOF LINETYPE LINEOBJECT WITHkey INITIALSIZEn withheaderline tablekind 内表类型linetype lineobject 行结构key 表关键字Initialsizen 内表分配的初始内存大小withheaderline 定义表头行 2020 4 8 111 内表的重要概念 逻辑索引 对于标准表和排序表 每一条数据记录都有一个逻辑索引在对标准表和排序表进行插入 删除 附加操作的时候 系统自动的对每一条数据记录赋一个逻辑索引 记录该数据记录在该内表中的逻辑位置 第X行 对于标准表和排序表 可以通过逻辑索引操作数据行 关键字为INDEXn 表示读取第多少行数据记录 2020 4 8 112 内表的重要系统变量 SY TABIX 当前内表的当前数据记录的逻辑索引值内表嵌套循环时 如果需要使用到sy tabix变量 请尽量把sy tabix赋给一个变量再进行处理 2020 4 8 113 内表类型 标准表 标准表 standardtable或者省略关键字 系统为每一行数据生成一个逻辑索引 填充标准表时 可附加在现有行之后或者是插入到指定位置 程序对内表的寻址操作可以通过关键字或者索引进行 对内表进行插入 删除等操作时 其数据行在内存中的位置不变 系统近重新排列各数据行的索引值不能定义唯一关键字 相同关键字的数据可重复出现标准表的另一种定义方式 data beginofitaboccurs0 endofitab 2020 4 8 114 内表类型 排序表 关键字SORTEDTABLE 也有一个逻辑索引总是按照关键字升序排序后再进行存储可按照关键字访问内表行也可按照逻辑索引寻找内表行 与标准表相同可以把排序表的关键字定义为唯一关键字或者普通关键字 2020 4 8 115 内表类型 哈希表 关键字 HASHEDTABLE无索引 只能通过关键字访问系统用哈希算法管理表中的数据寻址一条数据记录的时间与表的行数无关必须定义且只能定义为唯一关键字不可能有关键字相同的两行数据出现 2020 4 8 116 表关键字 WITHkey 指定内表关键字 如不指定 则系统使用默认 标准 关键字可以用UNIQUE NON UNIQUE来决定内表中具有相同关键字的数据记录是否可以重复出现如果未指定关键字 则默认关键字为非数字和非内表的组件字段 比如内表中含有C N P三种类型的字段 则默认关键字为C N类型的字段 2020 4 8 117 初始内存大小 关键字 initialsizen N可以为正数或者0N值的选择不影响程序执行的正确性 但可能影响执行效率 如果N设置过小 重新分配内存空间要占用时间如果N设置过大 则造成内存分配的浪费如果n为0或者不指定 则程序为内表对象分配8KB的内存 2020 4 8 118 工作区 WorkArea WorkSpace 程序不能直接进行内表的行操作 需要通过工作区来处理工作区必须具有与内表行一致或者可以互相转换的结构 通常是与内表行类型相同的结构体定义内表对象的同时 需要定义一个与该内表行结构相同的工作区供程序使用添加内表数据时 先给工作区赋值 然后把工作区内的数据添加 插入到内表修改内表数据时 把已定位的内部行内容覆盖工作区的内容 修改工作区内容 再回写 2020 4 8 119 工作区与内表数据交换图例 读取数据行 更新数据行 2020 4 8 120 隐式工作区 表头行 HeaderLine 创建内表的时候隐式地定义一个同名工作区 这个同名工作区就叫表头行或标题行语法 DATAitab WITHHEADERLINE 创建内表的时候 通过该附加项决定内表是否带表头行创建带表头行的内表 则创建了内表和与内表行结构一致的结构体 对带表头行的内表 不需要指定工作区 系统隐式使用表头行作为工作区表头行带来方便也增加了混淆 同一语句内表名称可能代表内表或者同名工作区 加 代表内表 不带 表示表头行 2020 4 8 121 行访问方式 通过关键字访问 适合所有内表 通过索引访问 不适合哈希表 所有行操作成功 SY SUBRC为0 否则为非0值 2020 4 8 122 行操作性能分析 标准表 定位一行数据所需时间取决于表的行数 随行线性增长排序表 定位一行数据所需时间取决于表的行数 随行数对数级增长哈希表 定位一行数据通过关键字进行 查找速度与行数无关Notes 程序中使用何种内表 取决于预计需要容纳的数据行数及访问频率 行数很少 用标准表 数据量巨大 且不存在重复行 用哈希表 运行期内必须用某种排序形式出现时 用排序表 多数程序都使用标准表 2020 4 8 123 行操作语句 插入行 INSERT 附加行 APPEND 聚集附加 COLLECT 读取行 READ 修改行 MODIFY 删除行 DELETE 循环处理 LOOP ENDLOOP 2020 4 8 124 聚集附加语句COLLECT 检查工作区中的标准关键字段值 非数字字段 与内表中已存在的数据行是否相同如果不同 collect和append语句一样 将新行附加至内表的最后一行如果相同 collect语句不附加新行 而是将工作区内数字字段的内容累加到已有数据行 与其具有相同关键字值 中数字字段内容上 2020 4 8 125 COLLECT范例 2020 4 8 126 操作整个内表语句 1 数据行排序 SORT BY 控制级操作 需要先按照行组进行排序 ATFIRST 第一次循环操作执行该语句块ATLAST 最后一次循环操作执行该语句块ATNEWf 行组的开头执行该语句块 行组是指f以及f左边的全部字段 指字符字段 ATENDOFf 行组的结尾执行该语句块sum初始化内表 工作区CLEAR it mara it mara REFRESH FREE 2020 4 8 127 操作整个内表语句 2 整体赋值 MOVE语句或者赋值操作符 需要注意内表是否具有表头行 若有表头行整体赋值时需要在内表名称后加 比较内表大小 使用逻辑操作符 EQ NE LE LT 等等 2020 4 8 128 ExtractDatasets 允许动态地存储并排序结构化数据 其列数目是可变的通过循环处理每一个程序 只能有一个未命名的ABAPExtract行结构分配语法 FIELD GROUPSfg 动态生成fg的结构 INSERTf1f2 fnintofg 填充的语法格式 EXTRACTfg 可以包含多个不同结构的字段组可以排序 SORT 该语句无内表 则为Extract排序LOOP 逐行获得Extract中的字段组 2020 4 8 129 ExtractDatasets程序示例 REPORTz extract datasets Extract处理DATA f1TYPEi f2TYPEi FIELD GROUPSheader INSERTf1f2INTOheader DO10TIMES f1 sy index f2 sy index 2 EXTRACTheader ENDDO SORTDESCENDING LOOP WRITE f1 f2 ENDLOOP 2020 4 8 130 动态数据对象概述 普通数据对象的寻址静态地通过对象名称进行 动态数据对象只有在程序运行时 系统才知道其名称和属性 并进行动态寻址字段符号 Fieldsymbols 数据对象语义上的名称 可以看作是解除引用的指针 访问它时 实际操作的时分配给该对象的数据对象内容数据引用 Datareference 数据对象的地址 程序访问的时期指向的数据对象的地址 要通过数据引用操作实际的数据对象的内容 需要先进

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论