ABAP学习笔记
ABAP基础重要知识学习点
ABAP基础重要知识学习点ABAP(Advanced Business Application Programming)是一种高级商务应用程序编程语言,主要用于SAP软件的开发和定制。
在学习ABAP的过程中,有一些基础的重要知识点需要掌握。
1. ABAP语法:了解ABAP语言的基本语法规则是学习ABAP的第一步。
学习如何声明变量、定义函数和方法、控制语句以及数据类型等基础知识,能够帮助开发人员编写有效的ABAP代码。
2. ABAP数据字典:ABAP数据字典是用于管理数据和定义数据库对象的工具。
掌握如何创建表格、视图、数据元素和数据类型等数据字典对象,能够帮助开发人员有效地存储和管理数据。
3. ABAP程序设计:学习如何设计和编写ABAP程序是成为一名合格ABAP开发人员的关键。
了解程序的模块化设计和封装原则,掌握ABAP的面向对象编程概念,能够开发出可重用和可维护的ABAP程序。
4. ABAP调试和错误处理:调试是开发中解决问题的重要工具。
学习如何使用ABAP调试器来跟踪代码的执行,并通过断点和监视表达式来诊断问题。
同时,掌握如何处理ABAP程序中的错误和异常情况,能够提高程序的可靠性和稳定性。
5. ABAP性能优化:在开发过程中,优化ABAP程序的性能是一个重要的考虑因素。
学习如何使用ABAP运行时分析工具来分析程序的性能瓶颈,并针对性地进行性能优化,能够提高程序的执行效率和响应速度。
6. ABAP Web Dynpro:ABAP Web Dynpro是一种用于开发SAP Web应用程序的框架。
学习如何使用ABAP Web Dynpro来设计和开发用户友好的Web界面,包括表格、输入字段和按钮等交互元素,能够满足用户对于功能和界面的需求。
总的来说,掌握ABAP的基础重要知识点是成为一名合格的ABAP开发人员的基础。
通过系统地学习和实践,可以逐步提升自己的编程能力,并为SAP软件的开发和定制提供有力的支持。
ABAP入门知识最全总结新人小白必备学习资料
SAP系统与ABAP关系
01
SAP系统是一款广泛应用于企业 资源计划(ERP)、供应链管理 (SCM)、客户关系管理 (CRM)等领域的软件产品。
02
ABAP是SAP系统的开发语言, 用于编写SAP系统中的业务逻辑、 数据处理和报表生成等功能。
调试日志
在调试过程中,可以开启调试日 志功能,记录程序执行过程中的 详细信息和操作步骤。这对于复 杂问题的排查和分析非常有帮助。
08
实战案例分析与经验分 享
案例一:简单报表开发实例
报表需求分析与设计
明确报表目的、数据源和输出格式,设计报 表布局和字段。
ABAP报表开发流程
创建报表程序,定义数据源和选择条件,编 写报表逻辑和输出处理。
根据实际需求设置报表的输出格式, 如PDF、Excel、Word等。
格式调整
调整报表的页面设置、边距、字体、 颜色等,确保报表输出的美观和易读 性。
报表性能优化策略
数据源优化
优化数据库查询语句,减少数据冗余和提高查询 效率。
报表缓存
合理利用报表缓存机制,减少重复计算和数据库 访问次数。
分页处理
对于大量数据的报表,采用分页处理技术,提高 报表加载速度和用户体验。
Eclipse与SAP系统连接
配置Eclipse连接参数,连接到SAP系统,实现ABAP代码的上传、下载和执行等操作。
其他辅助工具推荐
SAP Notepad
一款轻量级的文本编辑器,支持ABAP语法高亮显示和代 码折叠等功能,适合编写简单的ABAP程序。
ABAP Doc
ABAP PA 培训笔记
在网上遇到一些有关ABAP的培训笔记,感觉整理的还可以,把它整理在些,如果有时需要,也可以参考,从现在开始,我决定扎实写两年ABAP程序,从程序中体会流程,从流程体会编程思想,以真正提高自己的的逻辑思维能,这也是我学技术最后几年,我后慢慢从技术过到业务流珵。
Select语句的使用关键字into后可以加structure(结构体), internal table(内表) 和field list(字段列表) Authority 权限程序员可以根据权限对象创建权限实例而basic 负责将权限分配给其他用户At selection-screen在选择屏幕中输入值后,点击屏幕左上角的运行按钮或按回车键时,可以对输入的数据进行有效性校验.重点: at selection-screen 最大的作用是检查当前用户是否具有对输入数据进行操作的权限程序中第一个事件块是load-of-program 也可以附加使用initialization但是不能只程序中事件的启动顺序1. Load-of-program2. (Initialization) (optional event block 可选事件块)3. At selection-screen4. Start-of-selection (default event block 缺省事件块)5. At line-selection注意:当程序中没有指定任何事件块时, 系统默认为start-of-selection事件用户双击basic list screen的一条数据时,系统从隐藏域中查找相应的数据.并将数据回传给全局变量中去.当双击一条数据的时候sy-lsind + 1当没找到at line-selection事件块时,sy-lsind又自动减1Selection screen选择屏幕选择屏幕的属性1. Input help 输入帮助Possible entries help 可输入值帮助2. Value entry 定制字段可选择范围3. Type checksMultilingual capacity 多语言4. Variants 变式变式的创建1. 将选择屏幕中的输入域填写完毕2. 将其保存为变式1) 输入变式名2) 输入变式描述3) 为变式设定相关属性注意:一定要将屏幕中的值填写完毕以后再保存变式变式的特点1. 可以简化输入2. 可以用于后台自动运行程序, 而不需要用户自己输入值重点: variant 变式是client-specifc client依赖的.Seletion screen 选择屏幕定义选择屏幕上的字段有两种方式1. single value input单值输入选择屏幕, 使用parameters 关键字定义.2. multiple value input 多值输入选择屏幕,使用select-options 关键字定义parameters功能: 用户可以通过选择屏幕输入查询条件对数据库进行访问.使用parameters 定义选择屏幕的两点限制1. 变量名的字数长度不可以超过8个字符.2. 给定义的时候赋值需要用关键字default 而不能用value定义语法: parameters <变量名> type <类型>.注:如果使用data element定义变量,则该变量也具有语义意义.Selction screen 的执行顺序:1. 程序启动时,触发load-of-program 事件.2. 显示层弹出屏幕3. 用户输入值并确定屏幕后,触发start-of-selection事件4. 输入的值被传到内存中,进一步处理执行顺序实例:Parameters pa_carr type spfli-carrid.Load-of-program.Pa_carr = ‘LH’.Start-of-selection.Pa_carr=’DL’.Write pa_carr.屏幕弹出时, 输入域中为LH , 确定屏幕后, 显示值为DL.Value Sets(SELECT-OPTIONS) 多值输入屏幕Parameters 与select-options 的区别1. parameters 定义的变量是不可分解的变量2. select-options ,表面上定义的是一个字段, 实际上定义的是字段取值范围的内表select-options功能:根据用户输入的value range 取值范围到数据库中查找符合范围的数据Select-options 定义的内表重要: Select-options 内表具有表头行该内表有4个字段1. Sign 符号标示取值: I (included 被包含) , E (excluded 不被包含).2. Option 操作取值: BT(between 在范围之间) , EQ(equal 等于)3. Low 最小值取值: 用户输入的最小值4. High 最大值取值: 用户输入的最大值当屏幕弹出后, 点击mulitple selction按钮可以加入其他选择范围范围包括1. single value include 单值包含2. range inculde 范围包含3. single value exclude 单值不包含4. range exculde 范围不包含select-options 运行原理1. 程序运行后, select-options创建的内表中没有数据2. 屏幕弹出后,用户输入数据3. 此时,系统将字段范围保存到该内表中4. 用户确定屏幕后,系统将内表中的信息翻译成对应的native SQL5. 数据库将符合用户输入范围的数据返回给用户注意:使用loop at 循环一个带有head line 的内表, 不需要加[].Selction screen events 选择屏幕事件事件启动流程1. 程序启动后,触发load-of-program或initialization 事件对变量进行初始化2. 如果有parameters 或select-options屏幕变量,则会弹出选择屏幕3. 用户输入值后,点击回车或运行(F8)(有区别,见下文) 完成屏幕输入4. 如果程序中有at selection-screen 事件的话, 这时它就会被触发,它的功能是对用户输入的值进行校验, 而最主要的功能是,判断用户是否具有对该数据进行操作的权限.5. 当校验成功后, start-of-selection 别触发.并显示Basic list screen6. 双击其中一条数据, 则会触发at line-selection……..重点: 回车和运行(F8)的区别1. 回车: 仅仅具有校验功能, 无论校验成功与否, 程序都不会往下执行2. 运行(F8): 校验成功后程序才能往下运行, 如果校验失败,程序无法继续运行注意: at selection screen 的主要功能是authority check 权限校验, 如果校验失败,则应该生成一个E (error)类型的message 以通知用户校验失败.User Dialog screen 用户会话屏幕(或称为Dynpro Screen ,standard screen)Dynpro screen 功能: 用户可以通过屏幕录入或修改数据Dynpro screen 参数1. Attributes屏幕属性: screen number short text next screen screen type2. Layout 屏幕布局: 屏幕属性的摆放顺序3. Element list 元素列表: 所有元素的集合4. Flow control 控制流程: flow logic 流逻辑(dynpro screen PBO 和PAI事件中所调用的module模块).Dypro screen Attributes属性1. Screen number: 屏幕编号3位2. short text : 屏幕描述3. Nex screen: 下一屏幕编号, 当该屏幕结束后所执行的屏幕, 编号为0时, 程序将会在调用屏幕的语句后继续运行.4. Screen type :屏幕类型normal一般屏幕,subscreen子屏幕,modal dialog box 模态窗口Dypro screen 运行流程1. 使用call screen 100(屏幕编码), 调用一个屏幕2. 屏幕弹出之前, 启动PBO事件3. 用户在屏幕输入值并确定后,输入的值会被传入到内存变量当中4. 当屏幕关闭时,PAI事件触发5. PAI结束以后, 程序将会根据该屏幕的next screen 跳到下一屏幕6. 当next screen 为本屏幕的编号, 则需要使用自定义按钮退出屏幕,否则会出现屏幕死循环现象.PBO module: PBO 事件对应的模块PAI module. PAI 事件对应的模块Next screen 的配置1. 静态配置: 通过dynpro screen 自身属性配置next screen2. 动态配置: 在程序的PAI事件中使用关键字SET screen 200(下一屏幕编号)定义下一屏幕, 当PAI运行到该语句时, 该屏幕的静态配置则会被动态配置所覆盖使用T CODE 运行屏幕功能: 使用T CODE可以使ABAP以外的配置人员在work bench 以外运行屏幕.Dynrpo screen 在程序中可以使用的位置1. 触发Start-of-selection,生成basic list screen2. 双击单条数据3. 触发at line-selection 事件4. 在这个事件中call screen 100.5. 弹出dynpro screen, 用户输入相关值6. 点击save 保存到数据库,点击back 返回到basic list screenScreen painter 屏幕绘制器功能:专门绘制ABAP屏幕的程序,可以绘制dynpro screen注意:必须在安装GUI的时候选择并安装.可以通过screen 屏幕上的LAYOUT 键,可以进入screen painter ,通过Graphical layout editor 布局编辑器对布局进行编辑Dynpro Screen 具体操作1. 根据spfli-carrid字段建立paramters选择屏幕2. 根据spfli 建立结构体变量wa_spfli3. 在start-of-selection事件中打印Basic list screen屏幕4. 在at line-selection 事件中call screen 1005. 建立屏幕100 , 填写描述和next screen6. 通过screen painter 编辑screen 100的布局7. 通过字典库结构体sdyn_conn 在屏幕上批量加入字段8. 创建两个push button,名字分别为SAVE 和BACK ,描述以及Fcode 都于按钮名相同9. 在屏幕的Element list 选项卡中, 在最后一行添加字段OK_CODE10. 保存屏幕并激活11. 在程序中声明变量OK_CODE与屏幕字段相对应, 注: TYPE ok_code LIKE sy-ucomm.12. 在屏幕Flow logic 选项卡中打开PBO注释中的module ,并且将module创建在主程序内13. 在主程序中创建结构体变量sdyn_conn, 使内存中的字段变量能够与屏幕中的字段同名对应注:TABLES sdyn_conn14. 在PBO module中, 首先清空OK_CODE 通过hide area隐藏域回传的字段到数据库中查找相应的数据,并将数据传递到sdyn_conn结构体变量中.15. 打开PAI module的注释并将module创建到主程序中.16. 对OK_CODE进行CASE判断,如果为SAVE则提示message信息,如果为BACK,则通过关键字SET SCREEN <屏幕编号> 跳转到指定的屏幕中去17. 保存整个程序并激活.重点:在PBO事件中第一步一定要清空OK_CODE (CLEAR ok_code)1. 假如ok_code没有清空.2. 当用户第一次进入屏幕并点击保存按钮时(例如:SAVE),这时ok_code 的值为SAVE,3. 当用户第二次进入屏幕时, 由于ok_code没有被清空,所以ok_code依然为SAVE,4. 当屏幕数据还没有输入完整时, 用户可能会通过点击push button 以外的方式结束屏幕.5. 这时,程序触发PAI事件, 而PAI事件会进入CASE 中的WHEN ‘SAVE’语句, 此时很可能对数据库产生误操作.6. 所以,PBO中一定要清空ok_code 以避免以上情况暂时消息:可以使用message ‘hello’ type ‘I’.Global modularization 全局模块化Function module : 属于repositiry 中对对象, 封装了最为常用的代码.Fuction group1. 是多个function module的集合2. 拥有组内所有module 可以共享的对象Function group 工作原理:1. 当一个Function group中某一个Function module,被程序第一次调用的时候2. Function group 中所有的组成部分(包括共享对象和modual) 都会被调入内存.3. 当第二个程序再一次调用group中的module 时, 就可以直接从内存中调用module 了4. 当程序完成并不再使用module时, funtion group就会在内存中被清除注意:Function group不能太大,粒度不适合过大. 每一次调用,都会将group所有部分调入到内存, 如果过大,则会降低系统运行效率.Function group 共享性如果group 中的一个module 修改了group 中的属性, 那么当组内的module再次访问该属性时,显示的属性就是已经修改后的属性Function group 需要通过接口来调用Function moduleFucntion module 类型1. normal Fucntion module 一般类型2. Remote-enabled module 可被远程调用类型3. Update module 更新类型Function module interface 参数1. Import 输入参数2. Export 输出参数3. Changing 更改参数重要: 声明module 时, 参数要以module 内部为参照体, 进来的数据为import , 出去的数据为export.而当程序调用module时, 则需要以程序内部为参照体, 出去的数据为export, 进来的的数据为inport注意:Import 和export 参数都是可选的, 也可以设定为pass value值传, 缺省以及推荐传送方式是引用传. 由于调用module 时, 需要调用group的整个数据, 数据量较大, 所以选择引用传能提高效率.Function module 的创建1. 右键package--- create ----function group 创建function group 注意: function group 不能重名2. 在function group下创建function module3. 设定fuction module interface 参数4. 在source code 中写入执行的代码5. 建立程序调用function module6. 点击Pattern 按钮, 在CALL FUNCTION 选项中输入module名,确定7. 修改参数值注意: 一定要将程序中的参数与module中的参数相对应8. 当function 调用成功后, 系统变量sy-subrc = 0.Classes and Objects 类和对象ABAP 可以创建一个引用类型的数据类型DATA ref1 TYPE REF TO class. 注:Class是数据类型DATA ref2 TYPE REF TO class.定义两个能指向class 的指针CREATE OBJECT ref1CREATE OBJECT 相当于java 中的new方法的调用CALL METHOD ref1 -> meth1 (方法名)EXPORTINGIMPORTINGEXCEPTIONS面向对象中封装了很多组件1. 一个BOR business object repositiry 包含多个BO business object2. 一个商业对象business object 包含多个BAPI Business APIBAPI: 属于全局调用的方法,业务层的函数Standardlized BAPIs ---标准化的BAPIs1. GetList2. GetDetail3. Create Change, Delete Cancel4. Addlem RemoveItem.BAPI 就是function module , 相当于business function moduleCalling programs调用程序程序之间的调用.Insertion(谦让式)当程序A调用程序B时, 程序B占据栈顶,程序A压在下面, 当程序B执行完毕后,程序A继续执行Restart(抢占式)当程序A调用程序B时,程序A在栈顶被移出而被程序B所占据程序调用语句:在程序中使用submit关键字调用下一个程序1) Submit prog_name_2 (restart)2) Submit prog_name_2 and return (insertion)3) Submit prog_name_2 via selection-screen and return (insertion)via selection-screen作用: 如果程序2中有选择屏幕,则程序2被调用时会弹出屏幕RestartLeave to transaction <T-code>: 功能相当于输入”/n<T-code>”,当程序执行该语句时,该程序就会在内存被清空,接着转到相应的TCODE程序中去insertioncall transaction <T_CODE> [and skip first screen 忽略被调用程序的第一个屏幕]执行下一个程序, 当前程序会被压到栈的下一个位置而不会被清空重点: and skip first screen 忽略被调用程序的第一个屏幕,但是PBO 和PAI 的Module还会被执行.Memory management内存管理重要:当R/3 用户登陆系统的时候, 整个系统环境被称作user terminal session.其中包含:1. Internal session. 程序执行窗口2. External session. 用户的窗口Session流程1. 用户登陆系统时的系统环境为terminal session2. 此时系统开辟了一个External session,用户可以自主创建, 重要:最大数为63. 当一个程序运行的时候,该程序所占的区域为internal session, 相当于程序的内存区域Memory1. ABAP memory 属于一个External session 的内存区域2. SAP memory 属于一个terminal session 的内存区域在一个External session中, 程序A将数据存放至ABAP memory中, 程序B可以从中取出存放的数据.在同一个terminal session(同一个操作用户)的前提下, 程序A数据存放到SAP memory中, 程序B可以共享内存中的数据.在同一个External session 中, (External session相当于一个堆栈)Insertion程序A 调用程序B , 程序B 调用程序C此时internal session 从上到下的位置为C – B -- ARestart程序A 调用程序B, 程序A会在栈顶被拿掉, 被程序B占据位置注意: 例如,在restart情况下,堆栈中已经有程序A , B, C 三个程序, C在栈顶, 此时程序C调用了使用程序D所创建的TCODE,此时程序D将占据整个窗口, 与此同时,堆栈将全部被清空,ABAP memory也会被clear.。
ABAP开发笔记(原创)
如何设置字段串和使用字段串?DATA: BEGIN OF ADDRESS,NAME(20) TYPE C,STREET(20) TYPE C,NUMBER TYPE P,POSTCODE(5) TYPE N,CITY(20) TYPE C,END OF ADDRESS.该示例定义了一个长度为73的字段串ADDRESS。
可以通过ADDRESS-NAME、ADDRESS-STREET等定址组件。
可以将长字段串的声明收集在包括程序中。
但是,如果频繁使用该数据结构,则最好将它们保存在ABAP/4词典中。
13.LIKE参数,语法如下:DATA LIKE .利用LIKE参数,可以将已定义数据对象的数据类型分配给变量。
LIKE参数常用于附属字段以临时保存数据库字段的内容。
如果更改数据库字段的属性,则系统自动改写备份字段的属性。
可将任何数据对象用于。
利用LIKE参数,可以引用在ABAP/4词典中声明的数据对象的数据类型。
如: DATA NUMBER_1 TYPE P.DATA NUMBER_2 LIKE NUMBER_1.DATA MYNAME LIKE SY-UNAME.14.STATICS 语句:如果要在过程的运行时间之外仍保留某变量的数值,可以在该过程中利用STATICS语句定义该变量。
STATICS语句是DATA语句的变异。
语法如下: STATICS [] [] [].要在过程中将字段串定义为静态有效,请写:STATICS: BEGIN OF ,,..............END OF .15.TABLES语句:TABLES利用TABLES语句,可以创建称为表工作区的数据对象。
表工作区是参考ABAP/4词典对象的字段串。
是ABAP/4词典对象的名称,同时也是创建的表工作区的名称。
表工作区组件的顺序和名称与在ABAP/4词典中声明的对象相同。
要在ABAP/4词典中创建对象,步骤:Tools->ABAP Workbench->Development->ABAP Dictionary。
ABAP学习笔记
ABAP笔记1. ABAP(Advanced Business Application Programming):是一种易于访问数据库的高级开发语言。
它以开发报表为主,主要用于开发符合项目及运维人员要求的CBO(Customer Bolt On,客户自己追加开发的)程序。
之所以说它是一种高级语言,是因为ABAP语言不仅能从数据库中取出简单的数据,而且首次出现了程序和数据库逻辑清晰结合的上层数据库结构(LDB).2.SAP方法论(流程):项目准备(要件定义)、蓝图设计(基本设计和详细设计)、系统实现(实施开发,运用ABAP语言)、最后准备(程序测试和数据导入)、上线支持(运维和人员培训)。
3.SAP经典三层架构:一台数据库服务器(RDBMS)、一台或多台应用软件服务器以及任意数量的呈现服务器(前端客户)。
(1)呈现服务器:展示在屏幕上,所有的系统反馈以及操作指令都在展示层上呈现。
指令发给应用服务器。
(2)应用服务器:所有的业务层都在应用服务器上,是SAP程序实际执行的应用层,是ABAP的操作基础。
(3)数据库:应用服务器产生的数据都存储在关系数据库中。
系统在程序开始后,会把所有程序上下文(即相关应用环境)从知识库中读到应用服务器上。
包括:存储变量和复杂对象的内存区,用户会话的屏幕信息,ABAP程序块等。
4.ABAP常用工具:ALV、smartform、dialog、5.SAP界面简洁:菜单栏、标准工具栏(有命令域、后退、保存)、标题、应用工具栏(各种功能按钮)。
6.查找某一个T-CODE的路径的事务代码:SEARCH_SAP_MENU7.SE80对象导航器,可以查询/创建package/程序/本地对象等,SE38编辑/修改程序、程序属性等,SE91消息维护与查询,8.SAP每完成一步都会有消息提示,在系统中消息有四个要素:语言代码、消息类、消息序列号、消息文本。
程序中消息类型共有6种:A(异常,终止当前事务)、E(错误,需要重新输入正确的内容才可进行后续操作)、I(信息提示框,回车后可以继续处理)、S(成功,)、W(警告,可更改内容或者直接回车)、X(系统错误,荡机时出现)。
sap abap 学习笔记总结
目录基本语法 (4)定义数据和类型 (4)运算符控制流语句 (5)字符串操作 (7)字符串连接 (7)字符串拆分 (7)字符串查找 (7)字符串替换 (8)字符串长度 (8)定位操作字符串 (9)子程序 (9)无参数 (9)带参数 (9)参数传值和传地址对比 (10)创建功能模块FUNCTION (10)包含程序 (11)静态变量 (11)内表操作 (11)1.定义基本内表 (11)2复杂内表. (12)示例一 (12)示例二 (15)示例三 (16)示例四 (17)数据库建表 (21)数据库查询 (21)(一)单表查询 (21)(二)多表联合查询 (25)1.嵌套查询 (25)2.FOR ALL ENTRIES (26)3多表结合查询 (27)结果放入变量 (27)查询单行,结果放入结构体对象(工作区)中 (27)查询多行,结果放入内表中 (27)数据库操作查询学生班级表。
(29)单表查询 (29)单行部分字段 (30)多表联合查询 (30)单行所有字段 (31)单行部分字段 (32)添加数据 (33)添加一条 (33)插入多行数据 (33)修改记录 (34)使用变量修改 (34)使用工作区修改 (34)使用内表修改多条数据 (34)修改或保存 (35)使用工作区修改或保存 (35)使用内表修改或保存 (35)删除 (36)使用工作区删除 (36)使用内表删除 (36)案例:查询数据库数据至内表修改内容并且更新到数据库 (36)报表设计 (37)选择屏幕 (37)选择屏幕参数 (37)格式化屏幕参数 (38)复杂选择标准 (38)ALV报表 (40)示例一 (40)参数说明 (43)w_fcat TYPE slis_fieldcat_alv, (43)用到属性: (44)其他属性: (44)w_layo TYPE slis_layout_alv, (46)使用属性: (46)其他属性 (46)i_fcat TYPE slis_t_fieldcat_alv. (49)示例二: (52)屏幕编程 (55)重要概念: (55)创建: (55)举例:用户输入学号返回姓名等信息 (57)由数据字典生成屏幕 (58)根据定义的结构生成屏幕 (58)单选、复选钮用法 (58)P OV(F4帮助)添加 (59)屏幕间跳转 (59)添加table control 字段 (63)设置某列为不可编辑 (64)设置下拉列表框 (64)从数据库取值加入列表 (65)下拉列表取值 (66)Screen上后添加数据库字段 (67)T ABLE CONTROL (67)Screen layout (67)Screen 100中代码 (68)Programe中代码 (69)SARTFORM (71)简单示例 (71)程序部分 (71)Smartform配置 (72)Template (72)Table做法: (75)样式设置 (77)基本语法定义数据和类型REPORT ZWANGZHENG2.*定义数据txt1 类型 C 长度15 初始值HELLO WORLD DATA txt1(15) TYPE c VALUE 'HELLO WORLD'. *定义类型t_txtTYPES t_txt(15) TYPE c .*定义数据txt2 类型为:t_txtDATA txt2 TYPE t_txt VALUE 'first'.*定义类型为N的数据及类型。
abap处理字符串要点掌握
ABAP学习笔记--处理字符串ABAP学习笔记--处理字符串一、移动字段内容1、按给定位置数移动字符串语法:SHIFT <c> [BY <n> PLACES] [<mode>].将字段<c>移动<n>个位置,如果省略BY <n> PLACES,则将<n>解释为一个位置;如果<n>是0或负数,则<c>保持不变;如果<n>超过<c>长度,则<c>用空格填充。
<n>可为变量。
<mode>可以为:LEFT 向左移动<n>个位置,右边用<n>个空格填充;RIGHT 向右移动<n>个位置,左边用<n>个空格填充;CIRCULAR 向左移动<n>个位置,以便左边<n>个字符出现在右边。
2、移动字段串到给定串语法:SHIFT <c> UP TO <str> <mode>.查找<c>字段内容直到找到字段串<str>并将字段<c>移动到字段边缘,<str>可为变量。
如果<c>中找不到<str>,则将SY-SUBRC设置为4并且不移动<c>,否则将SY-SUBRC设置为0。
<mode>内容同上。
3、根据第一个或最后一个字符移动字段串语法:SHIFT <c> LEFT DELETING LEADING <str>.SHIFT <c> RIGHT DELETING TRAILING <str>.假设左边的第一个字符或右边的最后一个字符出现在<str>中,将字段<c>向左或向右移动,字段右边或左边用空格填充,<str>可为变量。
ABAP学习笔记-jlzhu
ABAP 数据类型内置数据类型,abap内置数据类型是指SAP运行时系统提供给程序的数据类型,它们在SAP内核中定义,可以直接使用.文本类型C类型Data v1 (10) type c. 声明长度为10的字符串Data v2 (1)type c.Data v2 type c. 1位是默认的,什么都不写也是1Data v2. C是默认的数据类型什么都不写也是 type c.以上三条语句一样的效果v 1 = ‘ abc’. “进行赋值N类型和C类型类似,但是只能存储数字,比如员工号码,手机号码,房间号,主要用于不能进行运算的数字Data v1 (10)type n. “声明长度为10的数字”V1 = ‘####1数字类型小数字符要用’’包围V2 = ‘2 . 3’.日期类型d, 是一个8位的字符串 YYYYMMDD时间类型t,是一个6位字符串 HHMMSSData v1 type d.Data v2 type t.V1 = ‘20151231’V2 = ‘153001’这些内置类型只要分为两类:C,N,T,D,I,F,P,X定义的对象长度在运行期间不能改变,因此这八种类型称为定长类型。
而String , Xstring生成的数据对象其长度无需指定,且在程序运行过程中可以随意改变,因而称为长度可变的数据类型. C,N,P,X 四种数据类型需要在程序里编码指定其长度,而T,D,I,F 不能也不需要指定长度,其使用的就是其默认长度. C,N,T,D 通称为字符类型,有类似的操作处理。
如果程序里不声明具体的类型,那么系统默认的类型是C如: data: g_type.那么g_type就被定义为长度是1的 c 类型变量.I,P,F 通称为数值类型,均可用于算数运算。
I 类型可用于计数器,索引值等。
自定义数据类型abap中使用types 语句定义数据类型,使用data语句声明变量,一般自定义数据类型用ty开头。
系统内置数据对象基本都是SY开头,有上百个.输出字符串data : v1 (20) type c.data : v2 (10) type c.v1 = ‘ 12345667’v2 = ‘9876543’write : v1 , v2 .这里 V1 定义了长度20 所以 12345667后面跟了补全的空格他是根据你定义的数据长度显示输出的,不是自动调整输出长度的。
ABAP学习笔记--数据查询语句SELECT
ABAP学习笔记--数据查询语句SELECTc通常使用Open SQL的数据查询语句SELECT将数据库条目选择到内存。
一.SELECT语句:1)SELECT用于确定读取数据表中的哪些字段;2)FROM子句用于确定从哪些内表或者视图中读取数据;3)INTO用于确定将数据读取到程序内的哪些数据对象;4)WHERE 用于限定选择条件;SELECT select_clause FROM from_clause INTO into_clause WHERE where_clause.在传统的ABAP语言中,如果使用TABLES语句声明表工作区,则可省略INTO子句(此方法已经被ABAP Object禁用)除以上4种外还有:GROUP BY:用于将一组数据条目压缩为一个单行作为选择最终结果;HAVING:用于限定ORDER BY子句子数据目组的选择条件;ORDER BY:用于限定行排序;SELECT整体语法结构:SELECT <result> FROM <source> INTO <target> [WHERE <condition>] [GROUP BY <fields>] [HAVING <cond>] [ORDER BY <fields>].二.选择单行数据:如果只需要选取一个结果数据行,系统在数据库种找到第一个符合条件的数据条目时,就停止查询。
单行选择需要在SELECT中使用SINGLE关键字,且INTO自居的结构必须为扁平结构:SELECT SINGLE <RESULT> INTO <target> FROM <source> ...如果系统找到一个完全符合指定条件的行,SY-SUBRC返回0,否则返回4。
1.选择全部字段一般不需要指明所有字段,而是在SELECT后用"*"符号,其中INTO语句种的目标对象最好与FROM种的类型相同。
abap培训笔记
§. ABAP/4 DATA ELEMENT一.Data Type (數据類型)C: 字符(串), 長度為1, 最大有65535 BYTES, 初始值為: space,例: ‘M’;D: 日期, 格式為YYYYMMDD, 最大是’9999/12/31’ ,例:’1999/12/03’.F: 浮點數, 長度為8, 例如: 4.285714285714286E-01I: 整數范圍:-2^31 ~ 2^31-1N: 數值組成的字符串: 011, ‘302’.P: packed 數,用于小數點數值,例如: 12.00542;T: 時間, 格式為HHMMSS,例如: ’14:03:00’, ’21:30:39’.X: 16進制數, 例如‘1A03’.二.變數宣告變數宣告包含name, length, type, structure等,語法如下:DATA <F> [<length>] <type> [<value>] [<decimals>]其中: <f> :變數名稱,最長30個字元,不可含有+ , . , : ( ) 等字元;<length><type>:變數類型及長度;<value>:初值<decimals>:小數位數Example 1:DATA: COUNTER TYPE P DECIMALS 3.NAME (10) TYPE C V ALUE ‘Delta’.S_DATE TYPE D V ALUE ‘19991203’.Example 2:DATA: BEGIN OF PERSON,NAME(10) TYPE C,AGE TYPE I,WEIGHT TYPE P DECIMALS 2,END OF PERSON.另外,有關DATA宣告的指令還有: CONSTANTS(宣告常數)、STATICS(臨時變數宣告).三.系統專用變數說明系統內部專門創建了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: 畫橫線附注:1.SAP的全稱是: System Application Products in Data Processing;2.ABAP/4的全稱是:Advanced Business Application Programming;3.ABAP/4的路徑為:Tools → ABAP/4 WorkBench→ABPA/4 Editor ;4.ABAP/4每條語句以句號結束;5.ABAP/4中象= ,>, <,+,-,*,/等符號左右都需要有至少一個空格;6.整行注釋用’*’號, 注釋本行后面部分用’”’號;§OUTPUTTING DATA TO SCREEN一. WRITE 語句ABAP/4用來在屏幕上輸出資料的指令是WRITE指令,例如:WRITE: ‘USER NAME IS:’, SY-UNAME.二. 指定屏幕輸出位置指定輸出位置的語句格式為:WRITE: [AT] [ / ] [<pos>] [(<len>)] 資料項[<par>]其中: / : 在下一行輸出<pos>: 指定輸出的行號;(<len>):指定輸出位數(長度)<par>: 指定顯示格式參數,參數有:LEFT-JUSTIFIED 資料靠左對齊CENTERED 資料靠中間對齊RIGHT-JUSTIFIED 資料靠右對齊UNDER <g> 正對在資料項<g>的下面顯示NO-GAP 緊接著顯示,不留空格USING EDIT MASK <m>: 使用內嵌子元顯示, 如12:03:20USING NO EDIT MASK: 不使用內嵌子元NO-ZERO: 數字前面0 的部分不顯示NO-SIGN: 不顯示正負號DECIMALS <d>: 顯示<d> 位小數EXPOENT <e>: F(浮點數)指數的值ROUND <r>: 四舍五入至小數點后<r>位CURRENCY <c>: 幣別顯示DD/MM/YY : 日期顯示格式MM/DD/YY:YY/MM/DD:YY/DD/MMMM/DD/YYYY:DD/MM/YYYYYYYY/MM/DD:YYYY/DD/MM:例如1: WRITE: /10(6) ‘ABCDEFGHIJK’.輸出結果為: ABCDEF例如2: DA TA: X TYPE I VALUE ’11:20:30’,A(5) TYPE C VALUE ‘AB CDE’.WRITE: / X USING EDIT MASK ‘__:__:__’.WRITE: / X USING EDIT MASK ‘$___,___’.WRITE: / Y NO-GAP.輸出結果為:11:20:30$112,030ABCDEF四.顯示圖示:語法: WRITE: <symbol-name> AS SYMBOL.WRITE: <icon-name> AS ICON.例如: INCLUDE <SYMBOL>.INCLUDE <ICON>.WRITE: / ‘Phone symbol:’, SYM_PHONE AS SYMBOL.WRITE: / ‘Alarm Icon:’, ICON_VOICE_OUTPUT AS ICON.要查看系統所提供有那些符號及圖示,可選擇’EDIT’下的’Insert Statement’,選擇’Write’,接下來選擇要查看的群組,如SYMBOL 或ICON, 接下來按’Display’即可.§INTERNAL TABLE一.Internal Table 的宣告ABAP/4中的Internal Table是一种Data Structure,類似于其他語言中的STRUTURE,它可以由几個不同類型的欄位(field)組成,用來表示具有不同屬性的某一事物,單獨一筆資料表示某個事物,多筆資料表示具有相同屬性的多個事物.例如:為了存取或記錄某班的同學資料,我們創建如下的internal table:DATA: BEGIN OF STUDENT OCCURS 20,STD_ID TYPE N,NAME(10) TYPE C,AGE TYPE I,BIRTH TYPE D,SCORE TYPE P DECIMALS 2,END OF STUDENT.此時我們已經創建了名叫STUDENT的internal table,并且為它預先申請了能夠存放20筆資料的Buffer(當然,如果存取資料不止20筆,程式執行時,會自動申請系統Buffer)Internal table 的定義有以下几种格式:格式一. DATA: BEGIN OF <internal table> OCCURS <n>,<field 1> TYPE <type1>,[<field 2> TYPE <type 2>,<field 3> TYPE <type 3>,…]END OF <internal table>.格式二. TYPES: BEGIN OF <work area>,<field 1> TYPE <type1>,[<field 2> TYPE <type 2>,<field 3> TYPE <type 3>,…]END OF <work area>.TYPES <internal table> TYPE <work area> OCCURS <n>.格式三. DATA: BEGIN OF <work area>.INCLUDE STRUCTURE <table name>.DATA: END OF <work area>.DATA: <internal table> LIKE <work area> OCCURS <n>.二.APPEND LINE格式: APPEND [<work area> TO ] <internal table>.舉例一. (使用work area)DATA: BEGIN OF LINE,COL1 TYPE I,COL2 TYPE I,END OF LINE.DATA ITAB LIKE LINE OCCURS 10.DO 2 TIMES.LINE-COL1 = SY-INDEX.LINE-COL2 = SY-INDEX ** 2.APPEND LINE TO ITAB.ENDDO.LOOP AT ITAB INTO LINE.WRITE: / LINE-COL1, LINE-COL2.ENDLOOP.執行結果為:1 12 4舉例二. (不使用work area)DATA: BEGIN OF ITAB OCCURS 10,COL1 TYPE I,COL2 TYPE I,END OF ITAB.DO 2 TIMES.ITAB-COL1 = SY-INDEX.ITAB-COL2 = SY-INDEX ** 2.APPEND ITAB.ENDDO.LOOP AT ITAB.WRITE: / ITAB-COL1, ITAB-COL2.ENDLOOP.執行結果与舉例一相同.舉例三. (加入另一個Internal table的元素)格式: APPEND LINES OF <itab1> [FROM <n1> ] [TO <n2>] TO <itab2>.將<itab1>的元素加入至<itab2>中,可選取自<n1>至<n2>的范圍.APPEND LINES OF ITAB TO JTAB.三.COLLECT LINECOLLECT 指令也是將元素加入Internal table中,与APPEND 的區別是: COLLECT指令在非數值欄位相同的情況下,將數值欄位匯總.格式: COLLECT [<work area> INTO ] <itab>DATA: BEGIN OF ITAB OCCURS 3,COL1(3) TYPE C,COL2 TYPE I,END OF ITAB.ITAB-COL1 = ‘ABC’. ITAB-COL2 = 10.COLLECT ITAB.ITAB-COL1 = ‘XYZ’. ITAB-COL2 = 20.COLLECT ITAB.ITAB-COL1 = ‘ABC’. ITAB-COL2 = 80.COLLECT ITAB.此時, internal table中放的是2筆數据, 分別為:ITAB-COL1 ITAB-COL2‘ABC’90‘XYZ’20四.INSERT LINE將元素插入在指定的internal table位置之前.格式: INSERT [<wa> INTO] [INITIAL LINE INTO ] <itab> [INDEX <idx>] 或者: INSER T LINES OF <itab1> [FROM <n1> T O <n2>] INTO <itab2> INDEX <idx>其中: <wa>即work area,工作區中的元素.[INITIAL LINE INTO] :插入一筆初始化的記錄.<itab>: internal table[INDEX <idx>]: internal table 的記錄號.(新加入的元素放在此記錄前面) 五.讀取internal table格式一:LOOP A T <itab> [INTO <wa>][FROM <n1> TO <n2>][WHERE <conditions>] <statement>ENDLOOP.格式二:READ TABLE <itab> [INTO <wa>] [INDEX <idx> / WITH KEY <conditions>]舉例. (格式二)DA TA: BEGIN OF ITAB OCCURS 10,COL1 TYPE I,COL2 TYPE I,END OF ITAB.DO 10 TIMES.ITAB-COL1 = SY-INDEX.ITAB-COL2 = SY-INDEX * 2.APPEND IT AB.ENDDO.READ TABLE IT AB INDEX 3.(或者: READ TABLE IT AB WITH KEY COL1 = 3.)WRITE: / ‘ITAB-COL1 = ‘, ITAB-COL1, ‘IT AB-COL2 = ‘, ITAB-COL2.執行結果同樣是:ITAB-COL1 = 3ITAB-COL2 = 6.六.修改internal table 中的值格式: MODIFY<itab> [FROM <wa>][INDEX <idx>][TRANSPORTING <f1><f2>…][WHERE <conditions>]舉例一. READ TABLE ITAB INDEX 3.LINE-COL1 = 29.MODIFY ITAB FROM LINE TRANSPORTING COL1.將第三筆記錄的COL1欄位的值修改為29.舉例二. T_SALARY– salary = 50.MODIFY T_SA LARY TRANSPORTING salary WHERE birthday = ‘1999/12/06’.七.DELETE internal table中的欄位格式: DELETE <itab> INDEX <idx>.或: DELETE <itab>[FROM <n1> TO <n2>] [WHERE <conditions>]八.Internal table 排序SORT <itab> [<order way>][BY <f1><f2>…]其中:<order way> 有DESCENDING 和ASCENDING, Default 為ASCENDING.<f1>: 為指定排序的欄位.九.加總SUM.總和計算存放与work area中,但只能在LOOP 中使用.例: LOOP A T ITAB INTO LINE.SUM.ENDLOOP.WRITE: / LINE-COL1, LINE-COL2.十.初始化internal tableREFRESH <itab>. 清空<itab>中的值.CLEAR <itab>. 清空<itab>的Header Line.FREE <itab>. 釋放記憶体空間.。
abap笔记
1.Object Navigator是ABAP工作平台上众中开发工具的中心入口,事务代码为:se80,其中还有几个经常会用到的T-CODE: SE38, SE24, SE37.2.在ABAP Editor中有一个Excute with variant 按钮,代表通过变量运行(变式与选择屏幕相关).3.Editor Pretty Printer ON/OFF的设置: 菜单项: Utilites->settings有相关项,选中Indent,Convert upper/lowercase同Keyword Uppercase.4.ABAP有三种类型的处理块:Event blocks, Dialog Modules,Procedures只有后一种可拥有自己的局部变量,而且程序语句是内部调用,前两者处理块之间实行外部调用.5.应用程序类型, 可执行的:以Report关键字引导,不能定义功能模块但可以调用.模块池的:以Program关键字引导,必须通过事务代码运行.6.语句链 Write: text1, text2. 等同于: Write text1. Write text2.7,在一个Program中,处于Form和Endform之间的是Subroutines. 该程序由Program引导,不能直接运行,需被调用,不能包含自定义的用户屏幕.8.数据内部定义: types type(len) Type type [decimal dec]data data(len) Type type [decimal dec] [value var]Decimal 附加项只适用于指定P类型的小数位.9.两个结构体进行赋值操作,如果 Source与Destination的组件结构不完全相同,则用Move-corresponding, eg: move-corresponding source-data todestination-data.10.在ABAP数据表达式中,关键字前后必须有空格,eg: Fault: (a=b+c) true:: a = b + c .11.在用户主记录里可以设置日期的显示分隔符,小数点字符和千位分隔符,在system->userprofile->owndata 或T-code: su01.12.内表是一种大批量数据管理形式,用于在程序运行期间存储多行结构相同的数据,程序对内表的行操作不能直接进行,必须通过一种接口来传输,这个接口就是工作区.13.ABAP的两种动态数据对象: Field symbols 与 Data reference.14.内表有三种形式: standard table , sorted table , hashed table后一种不能进行索引查找,只能通过关键字搜索.15.子程序的定义和调用分别用Form/Endform和perform来实现,如果想生成子程序的代码框架,则在prefom add处双击即可.16.package的命名规则: begin with A-S or U-X是SAP standard object, begin with Y or Z are customer objects, begin with T are private test package, begin with $ are local package.17.在数据字典中,每创建一个TABLE,都将生成一个同名的结构化数据类型,其中的组件字段与实际物理数据库表完全一致.18.在select查询中如果要指定多个数据对象,则需要将这些对象放在括号内,并用逗号隔开,eg: select * from spfli into (a, b).19.Function Module是最为常用的复用组件,它是独立的R/3仓库对象,也是一种过程模块,在不同的系统间可以通过RFC(Remote function call)技术进行功能模块的调用.20.几个有用的系统函数: sy-uname, sy-host, sy-datum, sy-uzedit, sy-subrc, sy-bdcnt,sy-index, sy-tabix,sy-dynnr.21.可用于交互式报表的列表事件有: at line-selection, at user-command 前者为选择某行时触发,后者由某个GUI触发.22.在可执行程序中,只要在程序代码中使用parametes或select-options语句,则在程序运行后就会产生用户的选择屏幕.23.LDB(逻辑库)节点在程序访问之前需用Nodes语句声明,在旧版本中则使用Tables声明. 两种中止语句 Reject与check(有条件中止).24.由系统自动调用的子程序称回调线程,-----call back routine,利用此程序可以实现许多高级屏幕功能.25.在OO设计中对象的识别和寻址是通过对象引用来实现的.26.在二种对象运算访问符中->与=>,对于类中的静态组件是通过类名称加=>直接对类进行操作的.eg: class=>comp.27.对象的自身引用可使用变量ME,是一个局部变量来的.28.Append与Insert r的区别: append wa to itab; insert wa into table itab前者不能用于Hashed表, 后者不能用于Sorted表的non-unique.29.修改内表语法: modify itab from wa transporting col2 where….. 表明根据where条件来更新COL2字段值,表类型为SORTED或HASHED.30.删除内表语法: Delete table itab: from wa, with table key col = 1. 三个标点不可少,with后的为条件关键字.如果用条件的则为: DELETE ITAB WHERE (COL > 17 AND COL < 4 )31.在LOOP AT…ENDLOOP内有一个AT ,<…>,ENDAT循环. 其中的包括: FRIST, LAST, NEW , END OF.这些可以用来进行内表中按某个字段进行分组统计.32.几条记录作一次取用:PACKAGE SIZE N eg: select * from spfli into corresponding fields of table itab package size 3.33.接口成员只能为类的公有成员,接口没有自己的实例,一个接口可以被任意多个不同的类实现,接口中定义的成员集在各类中名称要相同.34. 在程序中使用逻辑数据库有两种方法:通常是通过GET事件或者功能模块进行调用.如: NODES node.35.在程序代码中输入NEW-PAGE PRINT ON ,将生成的列表直接发送走到SPOOL 系统进行打印,不在屏幕上显示.36.将一组选择屏幕组合在一个区域,可以使用Begin of block…..eg:Selection-screen begin of block blocka [with frame [title tit] ][no intervals]—只选单值不出现TO.Selection-screen end of block.37.屏幕流逻辑分为两个最基本的处理块: PBO与PAI, 前者是在向用户显示屏幕GUI之前触发,后者是在用户进行某些屏幕行为后并回车时触发.流逻辑模块是在语句MODULE/ENDMODULE之间定义.这里的语法不属于ABAP系列.38.屏幕中的OK字段其作用是:返回在屏幕和GUI状态中用户触发的功能代码:一般情况字段命名为:OK_CODE,数据类型与SY-UCOMM相同.39.通过SE93可以为程序创建自定义的事务代码.40.GUI中的交互元素包括菜单条,标准工具按扭,APPLICATIONTOOLBAR,FUNCTIONKEYS共四种,在作屏幕事务设计时这些都要分配具体的功能代码与之对应.41.在定义EXPORTING、IMPORTING与CHANGING的时候,前两者分别为基本输入与输出参数,而CHANGING可用于前两者功能。
ABAP编写程序笔记
1.重要编辑键:F8:执行程序F5:复制游标所在列内容F11:存储档案Ctrl+F11:删除游标所在列2.数据处理的一些用法:(1) 数值指派:MOVE F1 TO F2F2=F1WRITE (f) TO g(变量f和g都已经指定值)(2) 缩进使用:MOVE F1+n(m) TO F2+n(m)n:表示第几位m:表示字符个数。
3.DATA:NAME(10) V ALUE ‘SOURCE’,SOURCE(10) V ALUE ‘LILY’,TARGET(10).WRITE (NAME) TO TARGET.WRITE :/ TARGET.答案:LILY.4.字符串数据的相关处理:(1)字符串的移位:SHIFT c BY n PLACES MODESMODES:1.空白:字符串向左移一位;2.left:字符串向左移n位;3.right:向右移n位;4.circular:字符串以环状方式移位元。
(2)取代字符串内容:PRPLSCE string1 WITH string2 to c(将字符串c中的string1用string2来取代)(3)大小写的转换:TRANSLATE c TO UPPER CASETRANSLATE c TO LOWER CASE (4)在字符串中寻找部分字符串:SEARCH c FOR str(5)字符串长度:STRLEN(c)(6)取部分字符串:f+n(m)5.循环语句用法:(1)计次循环:DO n TIMES V ARYING f FROM start TO end.lop blockENDDO.例:DO V ARYING I FROM 1 TO 10.S=S+I.ENDDO.WRITE:/’1+2+3+…+10=’,S.执行结果为:1+2+3+…+10=55。
(2)条件循环:WHILE Condition.Ststement Block.ENDWHILE.例:I=1.S=0.WHILE I<=10.S=S+I.I=I+1.ENDWHILE.WRITE:/’1+2+3+…+10=’,S.执行结果:1+2+3+…+10=556.循环控制叙述:(1)CONTIOUE——跳至循环的下一次。
ABAP学习笔记
字符串的处理1.CONCATENATE连接字符串,中间可以要空格也可以不要。
DATA: t1 TYPE c LENGTH 10 VALUE 'We',t2 TYPE c LENGTH 10 VALUE 'have',t3 TYPE c LENGTH 10 VALUE 'all',t4 TYPE c LENGTH 10 VALUE 'the',t5 TYPE c LENGTH 10 VALUE 'time',t6 TYPE c LENGTH 10 VALUE 'in',t7 TYPE c LENGTH 10 VALUE 'the',t8 TYPE c LENGTH 10 VALUE 'world',result1 TYPE string,result2 TYPE string.CONCATENATE t1 t2 t3 t4 t5 t6 t7 t8 INTO result1. "直接连接CONCATENATE t1 t2 t3 t4 t5 t6 t7 t8 INTO result2 SEPARATED BY space. "用空格将每个字符串连接WRITE:/ result1.WRITE:/ result2.PS:如果用tab隔开要定义变量DATA: tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab. CONCATENATE t1 t2 t3 t4 t5 t6 t7 t8 INTO result2 SEPARATED BY tab.2.去掉多余的空格CONDENSE连接字符串,默认用一个空格隔开DATA: BEGIN OF sentence,word1 TYPE c LENGTH 10 VALUE 'She',word2 TYPE c LENGTH 10 VALUE 'feeds',word3 TYPE c LENGTH 10 VALUE 'you',word4 TYPE c LENGTH 10 VALUE 'tea',word5 TYPE c LENGTH 10 VALUE 'and',word6 TYPE c LENGTH 10 VALUE 'oranges',END OF sentence,text1 TYPE string,text2 TYPE string.text1 = sentence.text2 = sentence.CONDENSE text1.WRITE:/ text1.write:/ text2.CONDENSE text.“在每个连接串中间会有一个空格CONDENSE text No-GAPS. "在后面加入NO-GAPS后,所有空格都会去除。
ABAP中经常会用到字符串操作—学习笔记
ABAP中经常会用到字符串操作—学习笔记字符串首字符索引为0;Character Fields:C,N,D,T,string(CNDT =>C N Data Time)1.字符串连接CONCATENATE dobj1 dobj2 ...INTO result[IN{BYTE|CHARACTER}MODE][SEPARATED BY sep].2.字符串分隔,split一个string的部分到一个内表或一系列的变量SPLIT dobj AT sep INTO{{result1 result2 ...}|{TABLE result_tab}}[IN{BYTE|CHARACTER}MODE].3.字符串查找,在一个字符串中查找模式串(FIND or SEARCH)FIND sub_stringIN SECTION[OFFSET off][LENGTH len]OF dobj --> 灰色部分用来缩小目的串被查找的范围[IN{BYTE|CHARACTER}MODE][{RESPECTING|IGNORING}CASE][MATCH OFFSET moff ][MATCH LENGTH mlen ].FIND'knows'IN SECTION OFFSET5OF'Everybody knows this is nowhere' MATCH OFFSET moff " => moff = 10MATCH LENGTH mlen. "=> mlen=5在字符串dobj中查找patternSEARCH dobj FOR pattern[IN{BYTE|CHARACTER}MODE][STARTING AT p1][ENDING AT p2][ABBREVIATED][AND MARK].if sy-subrc =0.then SY-FDPOS =返回pattern在dobj中的位置About pattern:'pat'-忽略尾部空格'.pat.'-不忽略尾部空格'*pat'-以pat结尾'pat*'-以pat开始单词是指:用空格,;:?!()/+=分隔的字串4.字符串替换REPLACE SECTION[OFFSET off][LENGTH len]OF dobj WITH new[IN{BYTE|CHARACTER}MODE].REPLACE[{FIRST OCCURRENCE}|{ALL OCCURRENCES}OF] [SUBSTRING] sub_stringIN[SECTION[OFFSET off][LENGTH len]OF] dobj WITH new [IN{BYTE|CHARACTER}MODE][{RESPECTING|IGNORING}CASE][REPLACEMENT COUNT rcnt][REPLACEMENT OFFSET roff][REPLACEMENT LENGTH rlen].eg:DATA: text1 TYPE string VALUE'xababx'.REPLACE'ab'IN text1 WITH'xx'.--> xxxabx5.去前导0(Remove leading zero)SHIFT dobj LEFT DELETING LEADING'0'.FM : CONVERSION_EXIT_ALPHA_OUTPUT增前导0(Add leading zero)DATA v_s(5).UNPACK'123'to v_s.==> v_s ='00123'FM: CONVERSION_EXIT_ALPHA_INPUTSHIFT dobj[{BY num PLACES}|{UP TO sub_string}][LEFT|RIGHT][CIRCULAR]SHIFT dobj{LEFT DELETING LEADING}|{RIGHT DELETING TRAILING}pattern. [IN{BYTE|CHARACTER}MODE].6.字符串的长度,内表的行数STRLEN( dobj)字符串的长度LINES( itab )内表的行数7.删字符串中的空格:CONDENSE text[NO-GAPS].8.大小写转换,字符变换TRANSLATE text{TO{UPPER|LOWER}CASE}|{USING pattern}. eg:text= `Barbcbdbarb`.TRANSLATE text USING'ABBAabba'.=>'Abracadabra'9.CONVERT转换CONVERT DATE dat [TIME tim [DAYLIGHT SAVING TIME dst]]INTO TIME STAMP time_stamp TIME ZONE tz.CONVERT TIME STAMP time_stamp TIME ZONE tzINTO[DATE dat][TIME tim][DAYLIGHT SAVING TIME dst].CONVERT TEXT text INTO SORTABLE CODE hex.10.覆盖OVERLAY text1 WITH text2 [ONLY pattern].如果不指定后面的ONLY pattern,text1中的空格会被text2中的对应字符替代如果指定只有匹配的字符才会被替代,注意大小写敏感11.模式匹配CO/CN contains only or notCA/NA contains any or not anyCS/NS contains string or notCP/NP contains pattern or not注意:a).CO,NO,CA,NA比较时区分大小写,并且尾部空格也在比较的范围之内data: s1(10)value'aabb'.if s1 co'ab'==>falseif s1 co'ab '==>trueCS,NS,CP,NP不区分大小写和尾部空格b).对于CP,NP*= \s?+= \s# 换码字符,用于匹配*,+这样的字符###*#+#___ 比较结尾空格#[a-z]在CP,NP中强制区分大小写c).比较结束后,如果结果为真,sy-fdpos将给出s2在s1中的偏移量信息12.特殊字符在字符串中加入回车换行或TAB字符,在其他语言可以使用$13$10这样的ASCII 码进行插入.但在ABAP中要使用sap的类CL_ABAP_CHAR_UTILITIES.里面有字符常量:CR_LF,HORIZONTAL_TAB,NEWLINE等等.13.字符串位操作DATA: v_s(10)value'abcd'.v_s+0(1)='b'.v_s+2(*)='12'.=> v_s ='bb12'.。
ABAP学习笔记
粽子里的人-SAP学习笔记数据库操作部分1.循环读取表内容:SELECT [DISTINCT]<RESULT>…ENDSELECTSY-DBCNT 当前读取的行数,每读取一次SY-DBCNT+12.填充数据到内表SELECT … INTO|APPENDING[CORRESPONDING FIELDS OF] TABLE itab.INTO是将内表覆盖式填充,而APPENDING是追加似填充。
如果结构不完全相同的话则使用CORRESPONDING FIELDS OF只填充相同的字段。
3.分批次将选择数据填充到内表SELECT * … INTO TABLE itab PACKAGE SIZE n …<statement block>ENDSELECT其中PACKAGE SIZE表示将表中查询的数据以n为单位写入itab中。
如读取5行数据,n = 3时,第一次写入itab 3行,第二次写入2行。
4.使用转义字符SELECT … WHERE func LIKE ‘EDIT#_%’ ESCAPE ‘#’.用ESCAPE指定一个转义字符,如上将下划线转义成文本符号,不再代表通配符。
5.动态指定查询条件SELECT * FROM … WHERE <condition> AND (itab).内表中可以包含“ A = B “之类的信息。
6.FOR ALL ENTERIES选项SELECT carrid connidFROM spfliINTO TABLE spfli_tabWHERE cityfrom = ‘shanghai’.SELECT carrid carrnameFROM scarINTO wa_scarrFOR ALL ENTERIES IN spfli_tabWHERE carrid = spfli_tab-carrid.……ENDSELECT.以上的两个SELECT是并列查询,第一个将数据选取到内表,再用内表中的数据做为条件来查询数据。
ABAP开发笔记二
ABAP开发笔记⼆ABAP是事件驱动的语⾔,程序的运⾏由事件引导由过程块组成程序架构1.ABAP分类2.命名规范3.报表过程块事件关键字之间或事件关键字与form关键字之间的语句形成⼀个过程块⼦程序form和endform之间的语句形成⼀个⼦程序,⼦程序在过程块中被调⽤没有紧跟着事件关键字或FORM-ENDFORM 块的语句⾃动成为默认事件START-OF-SELECTION过程块的⼀部分主要事件块INITIALIZATION 在选择屏幕显⽰前,对变量进⾏初始化赋值AT SELECTION-SCREEN 对选择屏幕的数据输⼊进⾏检查START-OF-SELECTION 选择屏幕处理完后,数据的处理(缺省事件块)TOP-OF-PAGE 列表显⽰启动新页,页头的输出END-OF-PAGE ⼀页结束时,页尾的处理AT LINE-SELECTION ⽤户双击选中某⾏触发该事件AT PF 设置⾃定义的菜单AT USER-COMMAND 当⽤户功能健时,触发该事件跳出事件:exit,check,stop事件跳过事件在所有事件中:check离开当前事件并继续进⾏下⼀个事件处理;stop离开当前事件并直接跳到end-of-selection事件。
在Start-of-selection之前的事件,exit,check都是离开当前事件继续处理下⼀个事件。
在start-of-selection之后的事件,exit⽴即镜像输出显⽰,check离开当前事件并继续处理下⼀个事件。
4.基本语法数据类型系统变量结构data begin of 结构名.data f1[(l)] [type t] [decimals d] [value 'xxx'].data f2[(l)] [type t] [decimals d] [value 'xxx']....[include structure 另⼀个结构.]data end of 结构名.注意这⾥定义的⽅法和⼀般的结构不同。
abap面向对象 笔记(一)--抽象类、继承、多态
*&-------------------------------------------------------------------*& ABAP面向对象学习笔记。
结论经过实际测试。
如有错误,欢迎斧正。
*&-------------------------------------------------------------------REPORT ZBCRP_OO_LYB_02.CLASS base_class DEFINITION ABSTRACT. "抽象类,关键字abstract。
这里作为基类PUBLIC SECTION.METHODS: mess ABSTRACT "声明抽象方法,关键字abstractIMPORTING msg TYPE STRING OPTIONAL."抽象类可以包含静态成员,class-data,class-methods,class-events"抽象类可以包含非抽象方法."抽象类可以不定义任何方法。
"抽象类不可以用creat object创建实例。
"但是可以用data obj type ref to 创建抽象类的引用,并接受子类的实例。
ENDCLASS.CLASS base_class IMPLEMENTATION."抽象类如果不包含非抽象方法,那么可以没有implementation部分。
ENDCLASS.CLASS super_class DEFINITION INHERITING FROM base_class. "继承,关键字inheriting fromPUBLIC SECTION." 重定义父类的方法,关键字redefinitionMETHODS: mess REDEFINITION." 关于final方法:" final类中的所有方法都自动识别为final方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ABAP学习笔记一、ABAP语法简介:ABAP(Advanced business application program),是一种高级企业应用编程语言,它支持封装性和继承性,封装性是面向对象的基础,而继承性是建立在封装性基础上的重要特性。
它适合生成报表,支持对数据库的操作,如:Sqlserver,Oracle,DB2等主流数据库系统。
主要的语法有:数据类型、控制流程、文本摘要、输出格式、程序调试1、数据类型:(八种基本数据类型)D :日期类型,格式为YYYYMMDD,长度为8T :时间类型,格式为HHMMSS,长度为6I :整数类型,默认长度为4,初始值为0F :浮点类型,默认长度为8,初始值为0,常用于计算C :字符串类型,定义变量时指定字符个数N :数字字符串类型,定义变量时指定数值字符个数X :字节序列类型,定义变量时指定字节数P(压缩号) :允许的长度为1 到16 个字节,系统会指定默认值8 个字节(也就是15 位数字)和0 个小数位常用:大小,长度,重量,货币等单位的场合.2、输出格式:WRITE 'First line.'.WRITE 'Still first line.'WRITE / 'Second line.'WRITE /13 'Third line’.3、控制流程:使用IF的条件分支IF <条件表达式1>.< statement block >ELSEIF <条件表达式2>.< statement block >ELSEIF <条件表达式3>.< statement block >.....ELSE.< statement block >ENDIF.使用CASE的条件分支CASE <f>.WHEN <F1>.<statement block>WHEN <F2>.<statement block>WHEN <F3>.<statement block>WHEN .........WHEN OTHERS.<statement block>ENDCASE.二、ABAP的语法特点:1、由各自独立的语句构成。
2、每个语句的第一个单词必须是ABAP关键字。
3、单词之间至少要用一个空格分隔。
4、每个语句结束必须要用句号。
5、一个语句可以跨多行,只要不遇到句号,就认为是一个延续的语句。
6、可以把多个语句放在一行。
7、ABAP不区分大小写,关键字和用户操作数都一样,为了便于阅读,一般把关键字大写,而操作数小写。
8、如果连续多行的第一个关键字相同,可以使用链语句方式减少输入data: id type I.data: name type c.可写为:data: id type I ,name type c.注释:注释行由第一列的星号(*)开头,并且必须写在第一列,前面不能有空格。
在行末的注释用双引号(”)作为前导。
data: id type i. “ 定义一个对象num数据类型为I三、语法格式Constants语句:用于创建常量Tables语句:用于创建表工作区Types语句:1.用于创建用户自定义的数据类型2.结构化数据类型例子1:TYPES: BEGIN OF itab_out,matnr LIKE mseg-matnr, "物料编码maktx LIKE makt-maktx, "物料描述matkl LIKE mara-matkl, "物料组wgbez LIKE t023t-wgbez, "物料组描述 erfmg_r5 LIKE mseg-erfmg, "当日交货量 erfmg_r6 LIKE mseg-erfmg, "累计交货量 erfmg_r7 LIKE mseg-erfmg, "成品库移库数量erfmg_r8 LIKE mseg-erfmg, "当日冲产退货量erfmg_r9 LIKE mseg-erfmg, "累计冲产退货量erfmg_r10 LIKE mseg-erfmg, "当日产量erfmg_r11 LIKE mseg-erfmg, "累计产量erfmg LIKE mseg-erfmg, "条目单位的数量erfmg_r8_temp LIKE mseg-erfmg, "中间变量计算R10用的erfmg_r9_temp LIKE mseg-erfmg, "中间变量计算R11用的END OF itab_out.例子2:TYPES: BEGIN OF address,name TYPE string,street(30) TYPE C,city TYPE String,END OF address.DATA my_ add TYPE address.my_ add-name = ' li li' .my_ add-street = ' zhangjiang' .my_ add-city = ' shanghai' .write: my_ add-name , my_ add-street , my_ add-city.3.一个内表形式的数据类型DATA语句:1.用于创建一个简单类型的变量2.定义一个结构化的数据对象3.定义内表例子:*定义用到的内表DATA: gt_out TYPE TABLE OF itab_out WITH HEADER LINE,gt_t023t TYPE TABLE OF t023t WITH HEADER LINE,gt_makt TYPE TABLE OF makt WITH HEADER LINE,gt_mkpf TYPE TABLE OF mkpf WITH HEADER LINE,gt_mseg TYPE TABLE OF itab_mseg WITH HEADER LINE, gt_mara TYPE TABLE OF mara WITH HEADER LINE.四、内表内表是可变长度的数据对象,在运行时内表可保存多个相同结构的数据,行数是动态的,系统可实时增加内表的大小。
内存中,数据是一行一行的存储的,每行都具有相同的结构使用内表是一个大量结构化数据的简单办法,主要应用包括:1.保存数据库的数据进行进一步的处理2.为屏幕和打印输出格式化的数据创建内表:定义表结构DATA: BEGIN OF company,name(20) TYPE C,street(20) TYPE C,city(20) TYPE C,END OF company.创建一个结构为company的内表DATA itab_company LIKE HASHED TABLE OF companyWITH UNIQUE KEY name.内表操作可以使用Append、Insert、Read、Modify、Delete 对内表的一行或多行执行操作。
Append:往内表的最后追加一条记录,只用于标准表Insert:向内表插入一条记录,在标准表中跟append一样,在排序表里就插入到键指定的位置,在哈希表则根据哈希算法插入。
Read:把表的指定行拷贝到结构中Modify:使用结构的内容重写表的指定行Delete:删除表的指定行操作内表行插入行INSERT语句插入单行INSERT line INTO itab INDEX idx .插入多行INSERT lines OF itab1 [FROM n1] [TO n2]INTO [TABLE] itab2 [INDEX idx].内表itab1 的从n1到n2的多行数据插入到itab2 中。
*附加行APPEND语句附加单行APPEND line TO itab .附加多行APPEND LINES OF itab1[FROM n1] [TO n2] TO itab .读取行READ语句利用索引读取READ TABLE itab INTO wa INDEX idx .利用关键字读取READ TABLE itab FROM key INTO wa .修改行MODIFY语句根据索引修改MODIFY itab [FROM wa] [index idx][TRANSPORTING f1 f2 …] .来修改内表的第n 行根据关键字修改MODIFY TABLE itab FROM wa[TRANSPORTING f1 f2 …] .允许你修改内表itab 的一行修改多行MODIFY itab FROM wa TRANSPORTING f1 f2 …WHERE cond .在Transporting 后指定所有需要修改的字段,要把给这些字段的值写在wa 中,使用WHERE 子句指定行的条件。
删除行DELETE语句通过索引删除DELETE itab INDEX idx .(删除内表中的第n 行)通过关键字删除DELETE TABLE itab FROM wa .把想要删除的键字段值拷贝到工作区wa 中删除多行DELETE itab [FROM n1] [TO n2] [WHERE<condition>]循环处理结果集合使用LOOP语句Loop语句一条条的读出数据行,写入INTO指定的结构中,结构内容可用于输出或写回内表.LOOP AT itab [INTO wa] [FROM n1] [TO n2][WHERE<condition>].<statement block>ENDLOOP五、OPEN SQL 或NATIVE SQLOpen sql 与Native sql 的区别:1. open sql 只能使用DML, slelect,insert,update,delete,modifynotive sql 可以使用DML和DDL和DCL2.Open sql 是操作SAP数据库的语言,notive sql 是SAP使用的数据库本身的SQL语言提取数据SELECT 语句选择单行数据SELECT SINGLE <结果集> INTO <目标表> FROM <数据库>…选择多行数据:循环选择SELECT [DISTINCT] <result> …<statement block>ENDSELECT.选择多行数据:选择至内表SELECT … INTO TABLE itab.插入数据INSERT语句插入单行数据INSERT INTO dbtab V ALUES wa .插入多行数据INSERT dbtab FROM TABLE itab .更新数据UPDATE语句更新单行数据UPDATE dbtab SET f1=g1 … fi=gi WHERE <fix_key>.*fix_key 全部表关键字段的值或UPDATE dbtab FROM wa .更新多行数据UPDATE dbtab SET f1=g1 … fi=gi [WHERE <条件>].或UPDATE dbtab FROM TABLE itab .添加或更新数据MODIFY语句添加或更新单行数据MODIFY dbtab FROM wa .添加或更新多行数据MODIFY dbtab FROM TABLE itab .。