ABAP基础
ABAP基础
ABAP基础程序结构ABAP语言是整个SAP系统的基础开发工具和技术平台,其包含:事件驱动(Evet-Driven)、机制和模块化技术(Modularization)、完整的面向对象概念及实现方法(Object Oriented)。
ABAP程序的源代码结构包括数据定义和处理块两部分:数据定义:整个程序中可见的全局数据类型和数据对象、选择屏幕元素以及ABAP Object 中自定义的类和接口。
处理块(Processing Blocks):是ABAP的主要结构单元,定义程序在不同状态下执行的具体功能,在编译运行中,每一块都是一个独立的实体。
注:数据(包括选择屏幕元素)定义和声明语句是独立于任何处理块的,其他所有语句则都必须隶属于某个处理块。
1. ABAP程序含有三种类型的处理块:·事件块(Event Blocks):每一个事件都需要有一个时间关键字引导,并单独构成一个语句,其后续语句隶属于该关键字代表的时间块,直到下一关键字出现为止。
包括:报表事件、列表事件、屏幕事件初始化:INITIALIATION数据选择开始:START-OF-SELECTION列表行选择:ATLINE-SELECTION屏幕输出前处理:PROCESS BEFORE OUTPUT平和输入后处理:PORCESS AFTER INPUT·对话模块(Dialog Modules):开始和结束都有相关的关键字作为标志,是相对独立的程序单元。
·过程(Procedures):代码部分的开始和结束都有相关的关键字,也是相对独立的程序单元。
过程包括功能模块和子程序,以及对象中的类方法可以被其他的模块调用,实现程序模块化和代码复用。
2. 处理块调用处理块使程序代码模块,也是运行期间的单元;其具体出现的顺序与其在程序代码中的先后顺序无关。
3. 事件驱动在各种处理块中,系统对事件快的调用过程有其特殊性:其调用总是与某时间地发生相关,也成为事件的触发。
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软件的开发和定制提供有力的支持。
SAPABAP程序设计基础教程第3章ABAP开发基础
SAPABAP程序设计基础教程第3章ABAP开发基础ABAP(Advanced Business Application Programming)是一种面向企业应用的编程语言。
它是由SAP(Systeme, Anwendungen undProdukte in der Datenverarbeitung)公司开发的,主要用于开发SAP系统的应用程序。
ABAP程序设计基础教程的第3章主要讲解了ABAP开发的基础知识和技术。
接下来,本章详细介绍了ABAP程序的结构和语法。
ABAP程序由一系列的模块组成,每个模块由关键字和语句构成。
关键字用于定义模块的类型和属性,语句用于执行具体的操作。
ABAP程序的主要结构包括模块池(Modle Pool)、模块(Modle)和程序(Program)。
模块池是一个集合了多个模块的容器,模块是一个独立的编程单元,程序是一个由多个模块组成的执行单元。
本章还介绍了ABAP中的数据类型和变量。
ABAP提供了多种数据类型,包括基本类型(如整数、字符、日期等)和复合类型(如表、结构体等),可以根据需要进行选择和组合。
变量是用于存储和处理数据的容器,它可以通过给定的名称和类型来定义和声明。
在进一步介绍ABAP语法和控制结构之前,本章详细讲解了ABAP的运算符和表达式。
ABAP提供了多种运算符,包括算术运算符、比较运算符和逻辑运算符等,可以用于进行各种表达式的计算和判断。
表达式是由操作数和运算符组成的表达式,可以通过运算符的优先级和结合性来确定计算的顺序。
最后,本章介绍了ABAP中的条件和循环控制结构。
条件控制结构(如IF语句、CASE语句等)用于根据满足条件的结果执行不同的操作。
循环控制结构(如DO循环、WHILE循环等)用于重复执行一系列的操作,直到满足指定的条件为止。
这些控制结构可以根据实际需求进行选择和组合,以实现复杂的业务逻辑和程序流程。
综上所述,ABAP程序设计基础教程的第3章主要介绍了ABAP开发的基础知识和技术,包括环境和工具、程序结构和语法、数据类型和变量、运算符和表达式,以及条件和循环控制结构等。
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
SAP ABAP开发者必备技能
SAP ABAP开发者必备技能SAP是企业级的软件系统,而ABAP是SAP的编程语言。
ABAP的全称是Advanced Business Application Programming,是一种高级商业应用编程语言。
SAP ABAP开发者必备技能是指那些在使用ABAP进行开发时必需的技能和知识。
在本文中,我将探讨SAP ABAP开发者必备技能。
一、扎实的ABAP编程基础要成为一名SAP ABAP开发者,首先必须具备扎实的ABAP编程基础。
ABAP是一种面向对象的编程语言,与其他语言(例如Java、C#)相比,ABAP的应用场景更为专业和特定。
曾经学习过其他编程语言的人们可能会发现ABAP与它们之间存在很多的差距和限制。
因此,建议在学习ABAP之前先了解其基础,包括各种数据类型、控制语句、函数以及模块等等。
同时学习SAP的数据结构和业务流程结构也是非常重要的。
二、掌握SAP的业务逻辑作为企业级软件系统,SAP需要满足多种复杂的业务逻辑。
因此,成为一名SAP ABAP开发者需要了解SAP系统的业务流程,并且需要理解这些业务流程是如何在SAP系统上实现的。
了解业务逻辑对于优化开发工作流程和代码的质量非常重要。
三、良好的数据库基础知识SAP系统最主要的功能是管理企业的各种数据,因此对于SAP ABAP开发人员来说,必须具备良好的数据库基础知识,包括SQL语句的编写和数据库设计。
学习ABAP开发不仅是阅读和编写代码,还涉及到数据库操作、数据导入和导出等方面的知识。
数据的有效管理是SAP ABAP开发工作的关键,它对于SAP系统的各个部分都非常重要,包括数据迁移、调试、性能优化等等。
四、熟悉SAP的层级结构和模块SAP系统具有复杂的层级结构和模块,SAP ABAP开发人员需要理解SAP系统中的每个分层结构和模块的应用方式。
有效的掌握层级结构和模块有助于更好的理解整个系统的技术架构,并且可以快速开发和测试SAP的应用程序。
abap开发知识点
ABAP开发知识点ABAP(Advanced Business Application Programming)是SAP系统中的编程语言,主要用于开发和定制SAP应用程序。
在本文中,我们将介绍ABAP开发的一些重要知识点。
一、ABAP语言基础1.数据类型:ABAP支持多种数据类型,包括整数、浮点数、字符型、日期型等。
了解不同数据类型的使用方法和限制是编写高效代码的关键。
2.变量和常量:在ABAP中,我们可以使用DATA语句定义变量,并使用CONSTANTS语句定义常量。
熟悉变量和常量的使用方式可以提高代码的可读性和维护性。
3.控制结构:ABAP提供了多种控制结构,如IF语句、CASE语句和循环语句等。
掌握这些控制结构的使用方法可以实现条件判断和循环操作。
二、ABAP面向对象编程1.类和对象:ABAP支持面向对象编程,可以定义类和对象。
了解类的概念和对象的创建方式可以提高代码的可重用性和可维护性。
2.成员方法和属性:在ABAP类中,我们可以定义成员方法和属性。
掌握这些概念的使用方法可以实现类的封装和功能扩展。
3.继承和多态:ABAP支持继承和多态的特性。
熟悉这些特性的使用方式可以简化代码的编写,提高代码的可扩展性。
三、ABAP数据库访问1.数据库表的定义和操作:ABAP可以创建和操作数据库表。
了解数据库表的定义和操作方式可以实现数据的存储和检索。
2.SQL语句的使用:在ABAP中,我们可以使用SQL语句进行数据库操作。
熟悉SQL语句的使用方式可以实现复杂的数据查询和更新。
3.事务处理:ABAP支持事务处理的机制,可以保证对数据库的操作的一致性和完整性。
了解事务处理的使用方式可以避免数据错误和数据丢失。
四、ABAP调试和错误处理1.调试技巧:ABAP提供了调试工具,可以帮助我们查找和修复代码中的错误。
掌握调试技巧可以快速定位问题,并提高代码的质量。
2.异常处理:在ABAP中,我们可以使用TRY…CATCH语句来处理异常。
abap 主要知识点
abap 主要知识点ABAP(Advanced Business Application Programming)是一种用于开发企业级业务应用程序的编程语言,主要应用于SAP业务软件系统中。
ABAP主要用于实现和定制SAP ERP、SAP S/4HANA等企业资源规划系统。
以下是ABAP主要知识点:1.基本语法:ABAP的基本语法包括数据类型、变量、常量、运算符、流程控制、函数、过程、模块等。
2.数据结构:ABAP中常用的数据结构有数组、表格、链表、树形结构等。
3.界面设计:ABAP可用于设计用户界面,包括对话框、菜单、报表等。
4.数据库操作:ABAP支持对数据库的CRUD(创建、读取、更新、删除)操作,主要包括SQL语句、数据定义、数据存取等。
5.报表设计:ABAP具有强大的报表设计功能,可以创建各种复杂程度的报表,如分组报表、多级报表、交叉报表等。
6.常用ABAP组件:ABAP中有一些常用的组件,如逻辑块(ALV)、数据字典(DDIC)、报表框架(BDC)、界面事件(BEL)、用户自定义函数(FC)等。
7.企业对象组件(EPC):EPC是ABAP的一种企业级组件,用于实现业务过程的自动化。
8.工作流:ABAP支持工作流编程,可以实现业务流程的建模、调度和监控。
9.对象化编程:ABAP支持面向对象的编程,可以实现代码的复用和模块化。
10.接口技术:ABAP接口用于实现与其他系统(如HR、CRM等)的集成。
主要包括BAPI、BDC、IDoc等。
11.性能优化:ABAP程序的性能优化是开发者关注的重要议题,包括SQL优化、代码优化、内存管理等。
12.ABAP开发工具:常用的ABAP开发工具包括ABAP Workbench、SE80/SE81、SAP NetWeaver Developer Studio 等。
13.脚本语言:ABAP脚本语言(Scripting)用于实现与ABAP程序的交互和自动化。
SAPABAP基本语法介绍
SAPABAP基本语法介绍ABAP(Advanced Business Application Programming)是SAP (System, Applications, and Products in Data Processing)系统最常用的编程语言之一,主要用于SAP软件开发和定制。
ABAP具有强大的功能和灵活性,可用于创建和维护企业应用程序,包括各种业务流程和数据处理。
在本文中,我将介绍ABAP的基本语法和一些常见的编程概念。
1.ABAP程序结构ABAP程序由多个模块组成,每个模块都是独立的功能单元。
一个ABAP程序通常由一个开始模块和若干子模块组成。
开始模块包含程序的整体逻辑,而子模块用于实现程序的具体功能。
2.声明变量在ABAP中,变量需要先声明后才能使用。
变量可以是内部表、字段符号、工作区、宏定义等。
声明变量时需要指定数据类型和名称。
例如:DATA: lv_name TYPE string.3.控制语句ABAP支持多种控制语句,用于实现条件判断、循环和跳转等功能。
常见的控制语句包括IF语句、CASE语句、DO循环和WHILE循环等。
例如:WRITE: 'Number is 1'.WRITE: 'Number is 2'.ELSE.WRITE: 'Number is neither 1 nor 2'.ENDIF.4.数据操作ABAP提供了丰富的数据操作函数,可用于对数据进行处理和转换。
例如,可以使用CONCATENATE函数将多个字符串连接在一起,使用SUBSTRING函数获取字符串的子串,使用REPLACE函数替换字符串中的内容等。
5.内部表ABAP中的内部表类似于其他编程语言中的数组或列表,用于存储和处理数据。
内部表可以是标准表、排序表、哈希表等类型。
可以使用内部表来读取、修改和删除数据。
例如:SELECT * FROM kna1 INTO TABLE lt_customers WHERE land1 ='US'.6.函数模块和方法ABAP中的函数模块类似于其他编程语言中的函数或方法。
abap badi workorder_update写法
abap badi workorder_update写法ABAP和Badi Workorder是SAP系统中常用的编程语言和工作流程工具。
在具体的应用中,我们需要通过Workorder_Update操作来更新已存在的workorder信息。
本文将详细介绍ABAP和Badi Workorder 的用法,以帮助读者更好地理解和应用Workorder_Update。
一、ABAP基础ABAP(Advanced Business Application Programming)是一种面向业务的应用程序开发语言,广泛应用于SAP系统中。
ABAP程序用于创建、修改和执行业务逻辑,支持各种数据库系统。
在ABAP编程中,我们通常使用如表、记录、查询、报表等基本元素来构建应用程序。
二、Badi WorkorderBadi Workorder是一种工作流引擎,用于管理和调度工作流程。
它支持定义工作流流程、任务分配、工作流监控等功能。
在Badi Workorder中,我们可以创建Workorder Instance,用于表示一个具体的工作订单。
1. 准备工作:首先,我们需要创建一个新的Badi Workorder Instance,并为其分配相应的任务。
这些任务将用于更新workorder 的信息,如任务状态、任务描述、完成时间等。
2. 编写ABAP程序:接下来,我们需要编写ABAP程序来处理这些任务。
程序中,我们需要使用ABAP的数据类型和函数来获取和更新workorder的信息。
例如,我们可以使用GET WORKORDER函数来获取当前workorder的信息,并使用UPDATE WORKORDER函数来更新其状态和描述。
3. 调用Workorder_Update:最后,我们需要调用Workorder_Update函数来提交我们的ABAP程序。
在SAP系统中,Workorder_Update函数用于提交工作流实例,并触发相应的业务逻辑。
《ABAP基础》课件
ABAP中常用的包和函数
探索ABAP中常用的包和函数,加快开发进程并提高代码重用性。
ABAP中的GUI编程
学习如何开发具有交互性和可视化效果的GUI应用程序,为用户提供更好的体验。
ABAP中的Webdynpro
介绍ABAP中的Webdynpro框架,用于快速构建现代化的Web应用程序和企业 门户。
ABAP数据类型
讲解ABAP中的数据类型和变量声明,包括基本数据类型、结构和表。
ABAP语法
深入理解ABAP编程语言的语法规则和常用操作符,以及控制流程和函数调用。
ABAP面向对象编程
学习如何在ABAP中使用面向对象编程的概念和技术,包括类、对象、继承和 封装。
ABAP数据库连接
了解如何在ABAP程序中连接和操作数据库,并处理数据的持久化和检索。
ABAP中的ALV技术
深入了解ABAP列表视图(ALV)技术,创建交互性和可定制性强的数据表格。
ABAP中的智能表单
了解如何创建漂亮且灵活的ABAP智能表单,用于生成和打印复杂的业务文档。
ABAP中的SAPUI5
探索ABAP中的SAPUI5框架,构建功能强大且现代化的企业级Web应用程序。
ABAP中的SAP HANA
了解如何在ABAP中利用SAP HANA数据库的强大功能,加速数据处理和分析。
ABAP中的BADI
介绍ABAP中的业务添加删除接口(BADI)技术,实现对SAP系统行为的增强和 定制。
ABAP中的BAPI
学习如何使用ABAP中的业务应用编程接口(BAPI)与SAP系统进行交互和数据 同步。
案例分析
通过实例分析和实践,将ABAP的知识应用于实际项目,深化理解和技能。
《程!本课程将带您深入了解ABAP编程,并分享 一些最佳实践和调试技巧。
ABAP基础知识(完整版)
ABAP基础知识(完整版)数据类型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关键字则是用在指定资料型态。
2024年SAPABAP实用培训教程
SAPABAP实用培训教程引言SAP(系统应用与产品)是一家德国公司,提供企业资源规划(ERP)软件,以帮助企业管理和整合业务运营。
ABAP(高级业务应用程序编程)是SAP的编程语言,用于开发SAP应用程序。
本教程旨在为初学者和希望提高ABAP编程技能的开发人员提供实用的培训。
第一部分:ABAP基础1.1ABAP概览ABAP是一种高级编程语言,专门用于SAP应用程序的开发。
它具有结构化和面向对象的特点,支持模块化、可重用性和可维护性。
ABAP编程环境包括ABAP工作台,它是开发SAP应用程序的主要工具。
1.2数据定义在ABAP中,数据定义是通过数据字典实现的。
数据字典是用于定义和描述数据元素、结构和表格的地方。
数据元素是基本的数据单位,结构是由多个数据元素组成的复合数据类型,表格是用于存储大量数据的集合。
1.3ABAP程序结构ABAP程序由多个块组成,包括声明、执行和异常处理块。
声明块用于定义变量和常量,执行块用于编写程序的主要逻辑,异常处理块用于处理程序运行时可能出现的错误。
第二部分:ABAP编程实践2.1报表开发报表是ABAP编程中最常见的应用程序之一。
通过编写SELECT 语句,可以从SAP数据库中检索数据,并通过报表显示格式化输出。
报表开发涉及定义选择屏幕、处理用户输入、执行数据库查询和显示结果。
2.2输入输出处理输入输出处理是ABAP编程中的重要部分。
输入屏幕用于收集用户输入,输出屏幕用于显示程序的结果。
通过使用屏幕元素,如字段符号、表格控制和循环结构,可以创建用户友好的界面。
2.3数据处理数据处理是ABAP编程中的核心任务。
通过使用内部表、工作区和数据库表,可以对数据进行读取、写入和修改。
ABAP提供了丰富的数据处理语句,如MODIFY、APPEND和DELETE,以及用于数据转换和验证的内建函数。
第三部分:ABAP高级特性3.1面向对象编程ABAP支持面向对象编程(OOP)的概念。
abap基础
ABAP基础ABAP简介ABAP语言也称作ABAP/4,它的全称是Advanced Business Application Programming - 4 th generation LanguageABAP是SAP的支柱所有的R/3应用程序和部分的Basis 系统都是用ABAP语言开发的数据字典编辑器函数库SAP事务码ABAP字典在商业应用软件开发时,部分实际世界必须被描述成数据形式。
商业应用软件的作用在于接收业务数据,并将其用一定的形式储存起来。
这些业务数据在储存后,还可以随时读取出来,再次利用。
例如:财务人员向SAP系统中输入会计凭证,保存之后还可以随时把凭证调出来查看。
无论是接收数据、储存数据、读取数据、使用数据,其核心都是数据。
在SAP R/3系统中,基本上所有的数据都是存在数据库表里面的。
数据库表,以及与其相关的视图、结构等构成了ABAP字典ABAP字典SE11ABAP字典所包含的要素表(Table)视图(View)结构(Structure)数据元素(Data Element)域(Domain)表类型(Table Type)搜索帮助(Search Help)锁对象(Lock Object)ABAP字典-表:SAP R/3 中看到的表并不是真正在数据库中物理上储存数据的表。
SAP中的表和数据库中的物理表是对应起来的。
ABAP 字典中的表分为3种透明表(Transparent Table)和数据库中的物理表一一对应,在SAP中激活透明表时,会在数据库中创建一个同名的物理表。
我们用到的绝大多数表都是透明表。
簇表(Cluster Table)大,多个簇表存在一个物理表中。
无索引共享表(Pooled Table)小,多个共享表存在一个物理表中。
无索引ABAP字典-视图ABAP 字典中的视图分为4种数据库视图投影视图维护视图直接向数据库表中维护数据帮助视图对表中内容进行筛选,用来提供搜索帮助ABAP字典–数据元素和域数据元素(Data Element)域(Domain)在SAP字典中,数据库表是有一个一个的字段组成的,每一个字段代表着一个需要储存的现实中的数据。
ABAP入门到精通
继承与多态实现
实现类之间的继承关系,利用多态提高代码 的灵活性和可维护性。
异常处理机制
定义异常类和处理程序,确保程序的稳定性 和健壮性。
面向对象设计原则应用
应用单一职责、开闭原则等面向对象设计原 则,提高代码质量和可维护性。
案例四:ABAP高级特性应用
内表操作与优化
使用内表进行数据处理和存储,优化内表操 作性能。
批处理与后台任务
实现批处理程序和后台任务,提高数据处理 效率和系统性能。
屏幕事件处理
编写屏幕事件处理程序,响应用户操作和界 面交互。
性能调优与监控
对ABAP程序进行性能分析和调优,监控程 序运行状态和资源消耗情况。
THANKS.
文件读写操作
详细介绍ABAP中文件的读写操作,包括文本文件和二进制文件的 处理方法。
文件流处理
阐述如何使用文件流来处理大文件,以及文件流的创建、读取和关 闭等操作。
文件锁定与解锁
介绍文件锁定的概念,如何在ABAP中实现文件的锁定和解锁,以避 免并发访问时的数据冲突。
多线程编程
01
多线程概念
解释多线程编程的基本概念,以 及多线程在ABAP中的应用场景 。
03
顺序结构的执行流程是线性的,即按照语句的编写 顺序依次执行。
选择结构
选择结构用于根据条件判 断执行不同的代码块。
IF语句根据条件表达式的 真假执行不同的代码块, 可以实现简单的条件判断 。
ABCD
在ABAP中,选择结构主 要通过IF语句和CASE语 句实现。
CASE语句根据变量的值 匹配不同的分支,执行相 应的代码块,适用于多个 条件判断的情况。
04
TRY...CATCH语句包含两部分:TRY块和CATCH块。 TRY块包含可能引发异常的代码,而CATCH块用于捕 获并处理异常。
sap abap基础语法
sap abap基础语法
SAP ABAP的基础语法包括:
1.关键字:每个语句的第一个单词必须是ABAP关键字,且单词之间至少要
用一个空格分隔。
2.句点符号:每个语句结束必须要用句号,标志着语句的完成。
3.大小写:ABAP不区分大小写,一般关键字大写,操作数小写。
4.命名规则:使用至少1个但不超过8个字符,且ABAP语言的数据类型包
括八种基本数据类型。
5.链语句方式:连续多行的第一个关键字相同,可使用链语句方式减少输入。
6.结构化编程:包括顺序、选择和循环结构,分别由IF、CASE和LOOP等
关键字实现。
abap 基本数据类型
ABAP 基本数据类型一、概述ABAP(Advanced Business Application Programming)是一种用于SAP应用程序开发的编程语言。
在ABAP中,有许多基本数据类型可供使用,这些数据类型用于定义变量、常量和字段,以及进行数据处理和计算。
本文将深入探讨ABAP中的基本数据类型及其特点。
二、ABAP基本数据类型的分类ABAP中的基本数据类型可以分为以下几类:1. 数值类型•整数类型:包括INT1、INT2、INT4和INT8,分别表示1字节、2字节、4字节和8字节的有符号整数。
•浮点类型:包括FLTP、F和D,分别表示单精度浮点数、双精度浮点数和定点数。
2. 字符类型•字符类型:包括CHAR、NCHAR和STRING,分别表示定长字符、Unicode字符和可变长度字符。
•文本类型:包括TEXT和STRING,用于存储长文本。
3. 日期和时间类型•日期类型:包括D和DATS,分别表示日期和日期字符串。
•时间类型:包括T和TIMS,分别表示时间和时间字符串。
•日期时间类型:包括TIMESTAMP和TIMESTAMPL,分别表示时间戳和本地时间戳。
4. 逻辑类型•逻辑类型:包括BOOL,表示逻辑值。
5. 其他类型•二进制类型:包括X和RAW,分别表示十六进制数和原始二进制数据。
•参考类型:包括REF TO,用于引用其他数据对象。
三、ABAP基本数据类型的特点ABAP中的基本数据类型具有以下特点:1. 类型安全ABAP是一种强类型语言,变量在声明时必须指定数据类型,且不允许进行隐式类型转换。
这样可以提高程序的可读性和可维护性,并减少类型相关的错误。
2. 内存管理ABAP中的基本数据类型在内存中占用固定的空间,不受数据的实际长度影响。
这样可以提高数据的读取和处理效率。
3. 字符编码支持ABAP中的字符类型支持多种字符编码,包括ASCII、Unicode等。
这样可以满足不同语言和地区的需求。
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是一种面向对象的编程语言,支持类和对象的概念。
SAP ABAP开发实战从入门到精通系列
掌握用户交互逻辑的设 计和实现方法,如数据 校验、错误处理等
01
02
03
04
学习使用ABAP事件处 理程序编写事件处理逻 辑
学习使用对话编程技术 实现复杂交互逻辑
界面性能优化与用户体验提升
了解界面性能优化的重要性 和方法
掌握提升用户体验的方法和 技巧,如减少响应时间、提 供友好提示等
学习使用ABAP性能分析工具 进行性能分析和优化
设计完善的测试用例
针对项目需求中的各项功能,设计全面、细致的测试用例,确保 测试的覆盖率和准确性。
制定明确的验收标准
与业务人员充分沟通,制定明确的验收标准和流程,确保项目成 果符合业务需求和预期目标。
项目总结与经验分享
项目成果总结
对项目成果进行全面的总结,包括项目目标达成情况、实施过程中 的经验教训以及后续改进方向等。
批处理与后台任务
实战
通过实例演示如何编写批处理程 序和后台任务,以及如何处理批 量数据和执行长时间运行的任务 。
Web Dynpro开发技术
Web Dynpro概述
简要介绍Web Dynpro的基本概念、架构和开发环境。
Web Dynpro组件开发
详细讲解Web Dynpro组件的开发过程,包括创建组件、定义界面元 素、编写事件处理程序等。
格式化处理技术
了解格式化处理的概念和需求,学习使用ABAP语言进行格式 化处理。掌握数据的格式化显示、特殊字符处理等技术。
报表性能优化与调试技巧
报表性能优化
分析影响报表性能的因素,学习优化报表性能的方法。包括优化SQL查询、减 少数据传输量、使用缓存等技术。
调试技巧
掌握ABAP语言的调试技巧,包括设置断点、单步执行、查看变量值等。学习如 何定位和解决报表开发过程中的问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. ABAP/4 Introduction (1)2.Begin To Programming (2)2.1 ABAP/4 Editor (2)2.2 ABAP/4 Data Element (5)2.3 Outputting Data to Screen (7)2.4 Processing Data (11)2.5 Flow Controlling (15)2.6 Processing Internal Table (19)2.7 Processing Dictionary Table (25)3.ABAP/4 Program Module (32)4.SCREEN INPUT (38)5.Standard Report (43)1. ABAP/4 IntroductionIntroductionA BAP/4(Advanced Business Application Programming)是SAP/R3目前唯一的系统发展工具,属4GL, 语法比较近似Visual Basic或JA VA, 和传统third-generation 语言, 如C,PASCAL 有很大不同, 在程序模块(Program Structure Module)可分以下三个部分:1.Sequential coding within processing block与一般语言语法近似, 如IF,WHILE等, 但并没有GOTO叙述2.Reports调用一个独立的事件(Depending Event), 读取database 产生数据列表3.Dialog屏幕参数输入的对话框, 专门处理database 读取或修改的tranaction processBasic Languange Overview1.data element 声明方式, 如数值, 字符数据变量声明2.操作数(operate)使用, 如+ - * /3.Control element使用, 如Boolean 值4.特殊数据格式, 如日期与时间5.字符串字符处理function, 如部分字符串的截取6.子程序或自定函数的调用7.SQL语法使用8.数据结构的使用, 如process internal table的声明与使用Reports Overview1.Reports Task, 如报表屏幕预览或打印机打印的选择2.Reports 模块是一个Stand-along 程序,3.database读取方式, 如可定义logical database(与磁盘的physical storage对映)4.报表数据的计算与产生5.报表的输出Dialog Overview1.专处理database 的读取与修改, 如使用SQL 指令2.Dialog 不是一个Stand-Along Progarm, 使用transaction code来产生屏幕对话框3.由flow logic 控制, flow logic分成PBO(Process Before Output)与PAI(Process After Input) 2.Begin To Programming2.1 ABAP/4 EditorCreating ABAP/4 Program使用A BAP Workbench撰写程序可分成:1.A BAP/4 Editor :针对简单的报表或程序, 仅使用几个字段或不使用2.Obiect Browser :针对复杂的报表或程序, 如Dialog Transaction Module 撰写使用ABAP/4 Editor 撰写程序1.A BAP/4 Editor 画面如下(Transaction Code:SE38):2.输入程序名称, 如果是新程序, 按下”Create”, 如果修改已存在程序, 则按下”Change”或F6键在命名规则上, Reports程序为Yaxxxxxx或Zaxxxxxx, a表application module简称, 如s表SD 3.输入程序Attribute(1).Title:程序描述或功能说明(2).Type:Execute mode: 1: Stand-along Program 如ReportsI: Include ProgramM: Module PoolF: Function GroupS: Subroutine Pool(3).Status:Program development status: P: SAP standard production programK: Customer production programS: System programT: Test program(4).Application: 程序所属的application module, 如F表Financeial acounting(5).Development class: 用于同一系统中各个program, 如果不属任一class, 可使用$TMP4.撰写Source CodeProgram 之后接的是程序名称,注意每一行最后要有一个. (点), 表示叙述的结束, Report程序一般来说有以下的结构:REPORT Zxxx LINE-SIZE col LINE-COUNT lines MESSA GE-ID xx NO STA NDA RD PA GE HEAD.“数据申明部分TABLES:…CONSTANTS:…TYPES:…DATA:…DATA:Begin of xxx occurs,……end of xxx.“选择屏幕的设定SELECTION-SCREEN BEGIN OF xxx.PARAMETERS:…SELECT-OPTIONS:…SELECTION-SCREEN END OF xxx.“程序初始化部分INITIA LIZATION.PERFORM INIT_PARAMS.“选择屏幕的输入检查AT SELECTION-SCREEN [on <selection-screen block/field>].IF ….ELSE….ENDIF.MESSA GE S[E/W/I]xx.“真实处理部分START-OF-SELECTION.SELECT * FROM …把所选数据放入ITA BENDSELECT.PERFORM SUBROUTINE1 TABLE I_TAB.PERFORM SUBROUTINE2 USING I_MATNR CHANGING I_PRICE.“程序结束部分(经常用来输出结果)END-OF-SELECTION.SORT I_TAB BY FIELD1 FIELD2.LOOP AT I_TA B.W RITE:/ …..ENDLOOP.“子程序部分FORM FORM1 USING ACHA NGING B.………ENDFORM.FORM FORM2 TA BLES C.………ENDFORM.……5. 执行程序按”Execute”或F8键, 屏幕可见执行所得的结果重要的编辑键2.2 ABAP/4 Data ElementData TypeA BAP/4 的数据类型可分成:Type Length Range Initial Value DescriptionC 1 1-65535Byte Space 字符串数据, 如‟Program‟D 8 8Byte …00000000‟ 日期数据, 格式为YYYYMMDDF 8 8Byte 0 浮点数I 4 -2^31至2^31-1 0 整数N 1 1-65535Byte …00…0‟ 数值所组成的字符串P 8 1-16Byte 0 Packed 数, 用在小数点数T 6 6Byte …000000‟ 时间数据, 格式为HHMMSSX 1 1-65535Byte X‟00‟ 16进位数变量声明变量声明包含name, type, length 和structure四个部分, 使用DATA 指令, 如DATA: S1 TYPE I,SUM TYPE I.常数声明常数声明使用CONSTANTS 指令, 如声明PI 是一个小数点5位的值 3.14159, CONSTA NTS PI TYPE P DECIMA LS 5 VA LUE …3.14159‟.系统所定义数据这是由系统所定义的专有名辞, 如SPACE 空白字符串SY-SUBRC 系统执行返回值, 0 表示成功SY-UNAME logon 账号SY-DATUM 系统日期SY-UZEIT 系统时间SY-TCODE 目前的transaction codeTYPE 叙述用来指定数据类型或声明自定数据类型Example:TYPES: BEGIN OF MYLIST,NAME(10) TYPE C,NUMBER TYPE I,END OF MYLIST.DATA LIST TYPE MYLIST.LIKE 叙述跟TYPE叙述使用格式相同, 如DATA TRA NSCODE LIKE SY-TCODE.不同的是LIKE 用在已有值的数据项, 如系统变量, 而TYPE叙述则是用在指定数据类型。
DATA 叙述语法:DATA <f> [<length>] <type> [<value>] [<decimals>]<f>: 变量名称, 最长30个字符, 不可含有+ . , : ( ) 等字符<length><type>: 数据类型及长度, 如LINE(20) TYPE C. MYNAME LIKE SY-UNAME. <value>: 初值<decimals>: 小数位数Example:DATA: COUNTER TYPE P VA LUE 1,FLA G TYPE C VA LUE IS INITIA L,W EIGHT TYPE P DECIMA LS 2 VA LUE …1.25‟.字段变量的声明:DATA: BEGIN OF ADDRESS,NAME(10) TYPE C ,NUMBER TYPE P,END OF ADDRESS.使用时用字段变量加上字段名称, 如ADDRESS-NAMECONSTANTS 叙述用来声明常数语法:CONSTANTS <c> [<length>] <type> [<value>] [<decimals>]Example:CONSTANTS: CNAME(10) VA LUE …周庆日‟,BIRTH_DA Y TYPE D VA LUE …19650201‟.STATICS 叙述声明的变量仅在目前的程序中使用, 结束后会自动释放语法: STATICS <c> [<length>] <type> [<value>] [<decimals>]TABLES 叙述用来声明Table Work A rea 的数据, 对映至A BAP/4 系统表(Dictionary Object),由SQL 指令加载所需数据语法: TABLES <dbtab>Example:TA BLES: SPFL.SELECT * FROM SPFL.W RITE: SPFL-MA NDT, SPFL-CARRID,SPFL-CONNECTION.ENDSELECT.从ABAP/4 Dictionary 的SPFL 档载入MANDT,CA RRID,CONNECTION三个字段至SPFL 此Table Work Area2.3 Outputting Data to ScreenWrite 叙述A BAP/4 用来在屏幕上输出数据的指令是Write 指令语法:Write 资料项数据项可以是常数或变量, 如:W RITE …This is sample‟.W RITE: …COMPANY:‟,STFL-CA RRID.指定屏幕位置显示语法: Write AT [/] [<pos>] [(<len>)] 资料项/ : 先往下一列pos : 屏幕X轴坐标(len): 显示资料的长度Example:W RITE …First Line ‟.W RITE / 6 …Second Line‟.输出结果:First LineSecond LineDATA: NUMBER TYPE I VA LUE …1234567890‟.TEXT(10) VA LUE …A BCDEFGHIJ‟.W RITE: (5) NUMBER, /(6) TEXT.输出结果:*7890ABCDEF指定显示格式语法:W RITE 资料项<显示格式参数>显示格式参数:LEFT-JUSTIFIED 资料靠左显示CENTERED 资料靠中间显示RIGHT-JUSTIFIED 资料靠右显示UNDER <g> 在资料项<g>的X轴开始坐标显示NO-GAP 紧接着显示, 不留空格USING EDIT MASK <m> 使用内嵌字符显示, 如11:20:30 USING NO EDIT MASK 不使用内嵌字符NO-ZERO 数字前面0 的部分不显示NO-SIGN 不显示正负号DECIMA LS <d> 显示 d 位小数字数EXPONENT <e> F(浮点数) exponent 的值ROUND <r> 四舍五入至小数位数下r 位CURRENCY <c> 币别显示DD/MM/YY 日期显示格式MM/DD/YYDD/MM/YYYYMM/DD/YYYYDDMMYYMMDDYYYYMMDDExample:DATA: X TYPE I VA LUE …112030‟,A(5) VA LUE ‟ABCDE‟.W RITE X USING EDIT MASK …__:__:__‟.输出结果为11:20:30W RITE X USING EDIT MASK …$___,___‟输出结果为$112,030产生空白行产生n 个空白行语法:SKIP [<n>]Example:WRITE …PASS1‟.SKIP.WRITE …PASS2‟.输出结果为:PA SS1PA SS2显示图示可以显示R/3 系统所提供的符号或图标语法:WRITE <symbol-name> AS SYMBOLWRITE <icon-name> AS ICONExample:INCLUDE <SYMBOL>INCLUDE <ICON>W RITE: / …Phone Symbol:‟ , SYM_PHONE AS SYMBOL.W RITE: / …Alarm Icon:‟ , ICON_ALA RM AS ICON.执行结果:要查看系统所提供有那些符号及图标, 可选择“Edit” 下的“Insert Statement”, 选择“WRITE”接下来选择要查的群组, 如SYMBOL 或ICON, 按下“Display” 即可.跳至指定列坐标将坐标跳至指定的Y轴列坐标语法:SKIP TO LINE [<n>]Example:SKIP TO LINE 5.W RITE …PA SS1‟.显示CHECK BOX 内容以字符串数据内容的第一个字符为CHECK BOX的输出, 如果是空白, CHECK BOX 显示为空白, 相反则显示X , 可用在逻辑判断检查语法:W RITE <资料项> AS CHECKBOX.Example:DATA: FLA G1 VA LUE … … .FLA G2 VA LUE …X‟.W RITE: / …CHECK FLA G 1:‟ , FLA G1 AS CHECKBOX.W RITE: / …CHECK FLA G 2:‟ , FLA G2 AS CHECKBOX.执行结果:2.4 Processing DataAssign Value语法:MOVE <F1> TO <F2>将F1的值存至变量F2 中, 也可写成F2 = F1Example:M_NAME = …CHER‟.使用Offset语法:MOVE <F1>[+<O1>] TO <F2>[+<O2>]Example:DATA: F1(10) VA LUE …A BCDEFGHIJ‟.F2(5).F2 = F1+3(5). “自第4个位置开始取出5个字符F2 的内容会变成DEFGHField String 字段的复制语法:MOVE –CORRESPONDING <Strings1> TO <String2>.将Strings1中的field字段的数据复制至String2中, 仅复制相同名称的字段Example:DATA: BEGIN OF A DDRESS,FIRSTNAME(10) VA LUE …LULU‟,LA STNAME(10) VA LUE …CHOU‟,TEL(12) VA LUE …4660570‟,END OF ADDRESS.DATA:BEGIN OF NAME,FIRSTNAME(10),LASTNAME(10),E_MAIL(30),END OF NAME.MOVE-CORRESPONDING A DDRESS TO NAME.NAME-FIRSTNAME 变成…LULU‟, NAME-LASTNAME 变成…CHOU‟,而NAME-E_MAIL 则不变变量CALL BY VALUE 的使用在变量的使用上, 可以使用类似Call By Value 的方法语法:W RITE (<f>) TO <g>Example:DATA: NAME(20) VA LUE …SOURCE‟,SOURCE(10) VA LUE …LILY‟,TA RGET(10).W RITE (NAME) TO TARGET.W RITE / TA RGET.屏幕可印出LILY清除变量内容语法:CLEA R <f>清除变量现在内容, 恢复成初值Example:DATA N TYPE I VA LUE 100.CLEA R N.变量N 的内容变成0算术符号** 乘幂* 乘/ 除+ 加- 减DIV 整数除法MOD 余数除法数值函数1.ABS(N): 传回数值N 的绝对值2.SIGN(N): 1 if N > 00if N = 0-1 if N < 03.CEIL(N): 传回大于数值N的最小整数Example:WRITE CEIL(-5.65) 印出–5.00WRITE CELL(4.54) 印出 5.004.FLOOR(N): 传回小于数值N的最大整数Example:WRITE FLOOR(-5.65) 印出–6.00WRITE FLOOR(4.54) 印出 4.005.TRUNC(N): 传回数值N的整数部分Example:WRITE TRUNC(5.65) 印出 5.006.FRA C(N): 传回数值N 的小数部分Example:WRITE FRAC(5.65) 印出0.657.COS(A),SIN(A),TA N(A): 传回三角函数cos A, sin A, tan A 的值, A 为弪度量8.EXP(N): 传回e^N 值8.LOG(N): 传回log eN 值9.LOG10(N): 传回log N值10.SQRT(N): 传回N 的平方根值日期与时间运算1.日期数据的运算日期数据可以直接运算, 如加法与减法的运算Example:DATA: Mdata TYPE D.Mdate = SY-DATUM. “ 如传回19971015Mdate+6(2) = …01‟ “ Mdate 变成19971001Mdate = Mdate - 1 “ Mdate 变成199709302.时间数据的运算时间格式为…hhmmss‟, 如…212030‟ 表‟21:20:30‟Example:DATA: HOURS TYPE I,MINUTES TYPE I,T2 TYPE T VA LUE …200000‟,T1 TYPE T VA LUE …183000‟.HOURS = (T2 - T1) / 3600. “计算有几小时MINUTES = (T2 –T1) / 60. “计算几分钟字符串数据处理1.字符串移位语法:SHIFT <c> [BY <n> PLA CES] [<modes>]<modes> : (1).空白, 字符串往左移一位(2).LEFT, 字符串往左移n 位(3).RIGHT, 字符串往右移n 位(4).CIRCULA R: 字符串以环状方式移位Example:DATA STRING(10) VA LUE …A BCDEFGHIJ‟.SHIFT STRING. “得到BCDEFGHI‟SHIFT STRING BY 2 PLACES RIGHT. “得到ABCDEFGH2.取代字符串内容语法:REPLA CE <string1> WITH <string2> INTO <c>将字符串<c> 中的<string1> 以<string2> 来取代Example:DATA: STRING(10) VA LUE …A BCDEFGHI‟,STR1(3) VA LUE …DEF‟,STR2(3) V A LUE …123‟.REPLA CE STR1 W ITH STR2 INTO STRING.W RITE / STRING. “得到ABC123GHI3.大小写的转换语法:TRA NSLATE <c> TO UPPER CASE. “转成大写TRA NSLATE <c> TO LOWER CASE. “转成小写4.在字符串中寻找部分字符串语法:SEA RCH <c> FOR <str>Example:DATA STRING(10) VA LUE …ABCDEFGHIJ‟.会回存至两个变量, SY-SUBRC 和SY-FDPOS, 若找到则SY-SUBRC 为0SY-FDPOS 存开始位迭, 若找不到则SY-SUBRC为4, SY-FDPOS为05.字符串长度STRLEN(<c>)Examp le:INT = STRLEN(…XYZA BC‟). “得到 6INT = STRLEN(…ABC ‟ ). “得到 36.取部分字符串<f>[+<o>][<l>]Example:DATA T(10) VA LUE …A BCDEFGHIJ‟.W RITE / T+2(4). “得到CDEF2.5 Flow Controlling比较符号1. = 或EQ : 等于2. <> 或>< 或NE : 不等于3. < 或LT : 小于4.<= 或LE : 小于等于5.> 或GT : 大于6.>= 或GE : 大于等于7.AND : 且8.OR : 或9.NOT : 非条件述叙1. IF 述叙语法:IF <Condition1>.<Statement 1 >ELSEIF <Condition2>.<Statement 2>ELSEIF <Condition3>.<Stetement 3>…..ELSE.<else Statement >ENDIF.在每个判断叙述之后要加上“.“Example:IF 3 > 8.WRITE / …3 is less than 8‟.ENDIF.2. CASE 叙述语法:CASE <变量f>.WHEN <Value1>.<Statement1>WHEN <Value2>.<Statement2>….WHEN OTHERS.<others Statement>ENDCASE.Example:S = …A‟.CASE S.W HEN …X‟.W RITE / …String is X‟.W HEN OTHERS.W RIT E / …String is not X‟.ENDCASE.循环叙述1.计次循环语法:DO [n TIMES] [VA RYING <f> FROM <start> TO <end>.<loop block>ENDDO.Example:DO 2 TIMES.W RITE / …X‟.ENDDO.执行结果:XXDO VARYING I FROM 1 TO 10.S = S + I.ENDDO.WRITE: / ,‟1+2+3+…+10=‟,S执行结果: 1+2+3+…+10=552.条件循环语法:W HILE <Condition>.<Statement Block>ENDWHILEExample:I = 1.S=0.WHILE I <= 10.S = S+I.I=I+1.ENDWHILE.WRITE: / … 1+2+3+…+10=‟,S.执行结果为: 1+2+3+…+10=55循环控制叙述1.CONTINUE跳至循环的下一次Example:DO 3 TIMES.IF SY-INDEX = 2.CONTINUE.W RITE / SY-INDEX.ENDDO.执行结果:132.CHECK <Condition>CHECK 之后条件成立才继续往下执行循环Example:DO 5 TIMES.CHECK SY-INDEX BETW EEN 2 A ND 4.W RITE / SY-INDEX.ENDDO.执行结果:2343.EXIT跳离循环叙述Example:DO 10 TIMES.IF SY-INDEX = 4.EXIT.ENDIFW RITE / SY-INDEX.ENDDO.执行结果:123无穷循环DO .<Statement Block>ENDDO.无穷循环必须配合EXIT 叙述来执行2.6 Processing Internal TableInternal Table 的声明ABAP/4的Internal Table 如同其它语言的数组结构, 在操作上可以有复制,删除,新增插入等功能.1.使用TYPE 叙述语法:TYPES <t> <type> OCCURS <n>声明一个数组<t>, 类型为<type>, 长度为<n>Example:TYPES A TYPE I OCCURS 10.A是个10个元素的数值Internal TableExample:TYPES: BEGIN OF LINE,COL1 TYPE I,COL3 TYPE I,END OF LINE.TYPES ITA B TYPE LINE OCCURS 10.声明一个Internal Table ITA B, 总共有10个元素, 其W ORK AREA名称为LINE2.使用DATA 叙述若使用DATA叙述来声明Internal Table, 可分成要不要有HEADER LINE, HEA DER LINE 就是所谓的W ORK A REA, 用在数据的存取上.语法:DATA <f> <type> OCCURS <n> [WITH HEADER LINE]Example:DATA VECTOR TYPE I OCCURS 10 WITH HEA DER LINE.3.直接声明, 不使用WORK A REA语法:DATA: BEGIN OF <f> OCCURS <n>,<component 声明>END OF <f>.Example:DATA: BEGIN OF ITAB OCCURS 10,COL1 TYPE I,COL2 TYPE I,END OF ITA B.如此产生的Internal Table 不会有Work Area, 也就是声明时不会Reference其它的Conponent 声明Append Line语法:APPEND [<wa>] TO [Initial Line To] <itab>[Initial Line To] 为增加一预设初值的元素Example: 使用Work AreaDATA: 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. “SY-INDEX为循环的CounterLINE-COL2 = SY-INDEX **2.APPEND LINE INTO ITA B. “新增至Internal Table中ENDDO.LOOP AT ITAB INTO LINE. “ITAB 总共有两个元素WRITE: / LINE-COL1,LINE-COL2.ENDLOOP.执行结果为:1 12 4Example: 不使用Work AreaDATA: BEGIN OF ITAB OCCURS 10,COL1 TYPE I,COL2 TYPE I,END OF ITA B.DO 2 TIMES.ITA B-COL1 = SY-INDEX.ITA B-COL2 = SY-INDEX **2.APPEND ITAB. “新增至Internal Table中ENDDO.LOOP AT ITAB. “ITA B 总共有两个元素WRITE: / ITAB-COL1,ITAB-COL2.ENDLOOP.执行结果为:1 12 4加入另一Internal Table的元素语法:APPEND LINES OF <itab1> [FROM <n1>] [TO <n2>] TO <itab2>将<itab1>的元素加入至<itab2>中, 可选取自<n1>至<n2>的范围Example:APPEND LINES OF ITA B TO JTAB.将ITA B所有元素加入JTA B中Collect Line在加入新元素时将有相同standard key(非数值字段)的数值字段汇总语法:COLLECT [<wa> INTO] <itab>Example:DATA: BEGIN OF ITAB OCCURS 3,COL1(3) TYPE C,COL2 TYPE I,END OF ITA B.ITA B-COL1 = …ABC‟. ITA B –COL2 = 10.COLLECT ITA B.ITA B-COL1 = …XYZ‟. ITA B-COL2 = 20.COLLECT ITAB.ITA B-COL1 = …A BC‟. ITA B-COL2 = 30.COLLECT ITAB. “汇总COL2 至COL1=A BC 的元素上LOOP AT ITAB.WRITE: / ITAB-COL1,ITAB-COL2.ENDLOOP.执行结果:ABC 40XYZ 20Insert Line插入元素在指定的Internal Table位置之前语法:INSERT [<wa> INTO] [INITIAL LINE INTO] <itab> [INDEX <idx>]Example:DATA: BEGIN OF LINE,COL1 TYPE I,COL2 TYPE I,END OF LINE.DATA ITA B LIKE LINE OCCURS 10.DO 3 TIMES.LINE-COL1 = SY-INDEX *10.LINE-COL2 = SY-INDEX *20.APPEND LINE INTO ITAB.ENDDO.LINE-COL1=100.LINE-COL2=200.INSERT LINE INTO ITAB INDEX 2. “插入在位置2之前LOOP AT ITAB INTO LINE.W RITE: / SY-TA BIX,LINE-COL1,LINE-COL2. “SY-TA BIX为Table位置ENDLOOP.执行结果:1 10 202 100 200 “插入的元素3 20 404 30 60插入另一Internal Table元素语法:INSERT LINES OF <itab1> [FROM <n1> TO <n2>] TO <itab2> INDEX <idx>将<itab1>的元素插入至<itab2>中, 位置在<idx>之前, 可选取自<n1>至<n2>的范围Example:APPEND LINES OF ITA B TO JTAB INDEX 3.将ITA B所有元素插入JTA B中, 位置在第三个元素之前Internal Table元素数据的读取语法:LOOP AT <itab> [INTO <wa>] [FROM <n1> TO <n2>] [WHERE <condition>] <loop expression>ENDLOOP.根据设定的范围选取原素资料, 读完后自动移往下一笔Example:LOOP AT ITAB INTO LINE WHERE COL1 >100.W RITE: / SY-TA BIX,LINE-COL1.ENDLOOP.仅读取COL1 > 100 的元素读取Internal Table指定位置的元素语法:READ TABLE <itab> [INTO <wa>] INDEX <idx>自指定位置<idx> 读取元素数据Example:READ TABLE ITA B INTO LINE INDEX 5读取ITA B的第5个元素数据, 放入LINE的字段中根据字段内容寻找语法:READ TABLE <itab> INTO <wa>Example:ITAB-COL1 = …ABC‟.READ TABLE ITAB INTO LINE.找出ITAB 中COL1 字段内容是A BC 的元素, 找到的值放入LINE 中若找到SY-SUBRC传回0, 找不到则传回4, <itab>必须声明有work area 修改元素内容语法:MODIFY <itab> [FROM <wa>] [INDEX <idx>] [TRANSPORTING <f1>…<f2>][WHERE <condition>]TRANSPORTING <f1> ..<f2> : 指定修改的字段名称Example:LINE-COL1 = 4.LINE-COL2 = 100.MODIFY ITAB FROM LINE.将目前位置元素以LINE的内容修改Example:LINE-COL1 = 10.MODIFY ITAB FROM LINE INDEX 3 TRANSPORTING COL1.将第三个元素的COL1字段修改为10Delete Lines删除Internal Table 的元素语法:DELETE <itab> INDEX <idx>Example:DELETE ITAB INDEX 4删除第四个元素加上删除条件:DELETE <itab> [FROM <n1> TO <n2>] [WHERE <condition>Example:DELETE ITAB FROM 3 TO 10.删除第3至第10个元素Internal Table Sorting语法:SORT <itab> [<order>] [BY <f1>] ….[<order>] : 可分成递减(DESCENDING)和递增(ASCENDING), 空白表ASCENDING <f1>:为指定的字段Example:SORT ITA B DESCENDING BY COL2.将ITA B 根据COL2字段递减排序计算数值字段总和语法:SUM计算得总和存在work area 中, 但只能存在LOOP 叙述中Example:LOOP AT ITAB INTO LINE.SUM.ENDLOOP.W RITE: / LINE-COL1,LINE-COL2.LINE-COL1 和LINE-COL2 存数值总和Initial Table1.REFRESH <itab>使用在没有HEADER LINE 的Internal Table中, 清除所有元素Example:REFRESH ITAB.2. CLEAR <itab>[ ]使用在有HEADER LINE 的Internal Table中, 清除所有元素Example:CLEA R ITA B[ ].3.FREE <itab>释放(Release) Internal Table所占的内存空间, 用在REFRESH和CLEA R指令之后Example:FREE ITAB.2.7 Processing Dictionary TableR/3对于存放在Relation Database 的数据可使用SQL 指令读取或处理, 指令种类可分成DDL(Data Definition Language)指令, 如CREATE, 及DML(Data Manipulation Language), 如SELECT 及INSERT等, 处理方式分成OPEN SQL 及NATIVE SQL, 前者在处理时, Database 与Command Interpreter 间有一Buffer区, 如SELECT * FROM…, 后者则直接处理数据库, 如EXCE SQL SELECT…等, 有两个重要的系统变量:SY-SUBRC: 传回0 表成功执行指令, 4 表未找到符合条件数据SY-DBCNT: 正处理的数据笔数TABLES 指令用于声明程序中所使用的tables语法:TABLES tableSELECT 指令自数据库读取记录语法:SELECT <result> FROM <source> [INTO <target>] [WHERE <condition>] [ GROUP BY <fields>] [ORDER BY <sort order>]1.以循环方式读取所有记录语法:SELECT [DISTINCT] * ……..ENDSELECT.加上[DISTINCT]会自动去除重复的记录Example:TABLES SPFLI.SELECT * FROM SPFLI W HERE COMPANY=‟DELTA‟.W RITE: / PLANT,TEL.ENDSELECT.会以循环的方式逐笔印出符合条件的记录2.读取单笔记录语法:SELECT SINGLE * FROM …. WHERE….Example:TA BLES SPFLI.SELECT SINGLE * FROM SPFLIWHERE PLA NT =‟CHUNGLI‟ AND TEL=‟4526174‟.W RITE: / SPFLI-COMPA NY,SPFLI-PLA NT,SPFLI-TEL.3.将读取的记录存放至Work A rea语法:SELECT ….. INTO <wa>Example:TABLES SPFLI.DATA WA LIKE TA BLES.SELECT * FROM SPFLI INT O WA.W RITE: / WA-COMPANY,WA-PLANT.ENDSELECT.逐笔写入WA 工作区中4.将读取的数据写入Initial Table 中语法:SELECT .. INTO TABLE <itab>Example:TABLES SPFLI.DATA ITA B LIKE SPFLI OCCURS 10 W ITH HEA DER LINE.SELECT * FROM SPFLI INTO ITAB.一次读10笔(Initial Table的长度)记录存入ITA B 中SELECT .. INTO TABLE <itab> PACKA GE SIZE <n>一次读取<n> 笔记录至<itab>中Example:TABLES SPFLI.DATA ITA B LIKE SPFLI OCCURS 10 WITH HEA DER LINE.SELECT * FROM SPFLI INTO ITAB PA CKA GE SIZE 5.一次读取 5 笔记录5.条件叙述语法:W HERE <condition>(1).BETW EEN <g1> AND <g2>在<g1> 至<g2> 之间的条件范围Example:WHERE YEA R BETWEEN 1995 AND 2000.(2).LIKE <g>表示条件包含的字符串<1>._:表示一个字符<2> % : 表示一个字符串Example:..WHERE NAME LIKE …LEE%‟.条件为NAME字段前3个字符为LEE..WHERE MODEL LIKE ……%SPS%‟.条件为MODEL字段包含SPS的记录(3).IN (<g1>….<g2>)包含在<g1>…<g2>的条件Example:..WHERE PLANT IN (…TA OYUAN‟,‟CHUNGLI‟,‟LIUTU‟).条件为PLANT 是TAOYUA N,CHUNGLI或LIUTU的记录6.ORDER BY 叙述指定排序的字段或顺序(1). ..ORDER BY PRIMA RY KEY.根据PRIMA RY KEY 递增排序(2)…ORDER BY <f1> [DESCENDING] <f2> [DESCENDING]Example:SELECT * FROM IM ORDER BY PART .INSERT 指令加入一笔记录至数据库1.自Work Area 工作区语法:INSERT INTO <database> VA LUES <wa>Example:TABLES SPFLI.DATA WA LIKE SPFLI.WA-NO = …34051920‟.WA-COMPANY=‟DELTA‟.INSERT SPFLI VA LUES WA.将ITA B 数据加入SPFLI中, 也可写成INSERT SPFLI FROM ITAB.SPFLI-NO=‟34299876‟.SPFLI-COMPANY=‟HP‟.INSERT SPFLI FROM SPFLI.将Work A rea SPFLI中的数据加入数据库程序SPFLI中因Work A rea SPFLI的结构与数据文件SPFLI一样, 所以也可写成INSERT SPFLI.2.自Internal Table语法:INSERT <database> FROM TA BLE <itab> [A CCEPTING DUPLICATE KEY]将<itab>中非NULL的数据加入<database>中, 加上[A CCEPTING DUPLICATEKEY]能检查不加入有重复primary key, 若有重复则SY-SUBRC 会传回 4Example:TABLES SPFLI.DATA ITA B LIKE SPFLI OCCURS 10 WITH HEA DER LINE.ITA B-NO = …34051920‟.ITA B-COMPANY = …DELTA‟.APPEND ITA B.….INSERT SPFLI FROM TABLE ITABA CCEPTING DUPLICATE KEY.UPDATE 指令修改已存在的记录内容1.使用Primary Key语法:UPDATE <database> FROM <wa>Example:TA BLES SPFLI.DATA WA LIKE SPFLI.WA-NO=‟34051920‟.WA-COMPANY=‟DELTA‟.UPDATE SPFLI FROM WA.如SPFLI 的Primary Key是NO, 则会找到NO=‟34051920‟的记录, 将其COMPANY字段修改为DELTA2.使用条件式语法:UPDATE <database> SET < f1>=<values>… WHER E <condition>根据条件式修改符合条件式的记录Example:UPDATE SPFLI SET NO=‟34051920‟COMPANY = …DELTA‟WHERE TEL=‟4526107‟.MODIFY 指令根据Primary Key 寻找数据文件中符合的记录, 若找到则更新修改, 若找不到则新增记录语法:MODIFY <database> FROM <wa>Example:WA-NO=‟34051920‟.WA-COMPANY=‟DELTA‟.MODIFY SPFLI FROM WA.DELETE 指令删除数据文件的记录1.使用Primary Key语法:DELETE <database> FROM <wa>Example:TA BLES SPFLI.DATA WA LIKE SPFLI.WA-NO=‟34051920‟.WA-COMPANY=‟DELTA‟.DELETE SPFLI FROM WA.如SPFLI 的Primary Key是NO, 则会找到NO=‟34051920‟的记录, 找到后将此笔删除2.使用条件式语法:DELETE FROM <database> WHERE <condition>根据条件式删除符合条件式的记录Example:DELETE FROM SPFLI W HER E A REA = …AMERICAN‟.DATABASE CURSORDatabase Cursor是一个数据库暂存区, 将经SELECT指令读取的记录存放至此暂存区, 再由此暂存区放至Work Area中, 可见少数据库读取的次数.1.开启Database Cursor语法:OPEN CURSOR <c> FOR SELECT … WHERE <condition>Example:TABLES SPFLI.DATA: WA LIKE SPFLI,C1 TYPE CURSOR.OPEN CURSOR C1 FOR SELECT * FROM SPFLIW HERE A REA =‟TAIWAN‟.2.读取Database Cursor的数据存入Work Area语法:FETCH NEXT CURSOR <c> INTO <wa>Example:FETCH NEXT CURSOR C1 INTO WA.读取下一笔Cursor位置的数据存入WA, 如果已无数据可读,SY-SUBRC 不传回04.关闭Database Cursor语法:CLOSE CURSOR <c>Example:CLOSE CURSOR C1.COMMIT WORK 与ROLLBACK WORK要确定数据成功写入数据库, 可使用COMMIT WORK 指令, 如:COMMIT WORK.相反的, 如果反悔要复原, 可使用ROLLBACK W ORK, 可复原在上个COMMIT WORK 指令之后的数据, 如:ROLLBACK WORK.使用NATIVE SQL指令语法:EXEC SQL [PERFORMING <form>].<statement block>] [;]ENDEXEC.Example:DATA: BEGIN OF WA,NAME(8),A GE TYPE I,END OF WA.DATA F1 TYPE I.FI = 20.EXEC SQL PERFORMING OUTPUT.SELECT NAME,A GE INTO :WA FROM NAME_TABLEW HERE A GE >= :F1.ENDEXEC..FORM OUTPUT.WRITE: / WA-NAME,WA-A GE.ENDFORM.3. ABAP/4 Program ModuleABAP/4中所谓的Module 在一般语言称之为Subroutine, 其数据传递方式皆相似,如CALL BY VA LUE,CA LL BY REFERENCE 等, 可分成以下几个部分:1.Macro Block2.Include Program3.Subroutine Program4.Function ModuleMacro Block在程序中可以定义一段宏叙述, 并且可以传入参数, 参数符号(Placeholder)可自&1, &2 至&91.宏的定义DEFINE <macro>.<宏叙述END-OF-DEFINITION.2.宏的调用使用<macro> [<p1> <p2>….]<p1> 为传入宏的参数值, 在参数间至少要给予一个空白Example:利用宏计算N次方DATA RESULT TYPE I.DEFINE MULTI.RESULT = &1 ** &2.WRITE: / …&1 ^ &2 = …,RESULT.END-OF-DEFINITION.MULTI 3 4.执行结果为 3 ^ 4 = 81Include Program1.在ABAP/4中可以使用Include 叙述加载另一个程序的全部叙述, 通常用于共享数据项的声明, 很类似C 的Include header file 的做法.语法:INCLUDE <include program file>Example:程序YStart 的内容如下:***INCLUDE YSTA RT.W RITE: / …User Name = … ,SY-UNAME.W RITE:/ …Host Server = …,SY-HOST.另一程序如下:PROGRAM YTEST1.INCLUDE YSTA RT. “载入YSstart的所有内容执行络果:User Name = MIS-CHOUHost Server = deidv012.Global 变量声明应用语法:DATA: BEGIN OF COMMON PART [<name>],<data 声明>END OF COMMON PART [<name>]此常使用在Include 的程序中, 如***INCLUDE INCOMMON.DATA: BEGIN OF COMMON PART NUMBERS,MID(8),MNUM TYPE I,END OF COMMON PA RT NUMBERS.Subroutine Procedure在ABAP/4 Subroutine的调用可分成Internal Call和External Call, 前者撰写在程序中, 后者存在另一程序中, 通常为专存放Subroutine的公用程序集, 可提供结不同的程序调用.1.Subroutine 的声明FORM <subr> [<pass>].<subroutine statement block>ENDFORM.2.调用的方法(1).Internal Call语法:PERFORM <subr> [<pass>]Example:NUM1 = 100. NUM2 = 200.PROFORM ADD.FORM ADD.SUM = NUM1 + NUM2.W RITE: / …NUM1 + NUM2 = …,SUM.ENDFORM.执行结果: NUM1 + NUM2 = 300(2).External Call 另一程序语法:PERFORM <subr>(<prog>) [<pass>] [IF FOUND]<subr>:子程序名称<prog>:存放子程序的程序名称IF FOUND: 找到才执行Example:PROGRAM FORMPOOL.FORM HEADER.W RITE: / …USER NAME: …,SY-UNAME.ENDFORM.在程序中调用HEADER子程序PROGRAM YTEST1.PERFORM HEA DER(FORMPOOL) IF FOUND.(3).External Call 另一专存放子程序的程序文件语法:PERFORM (<fsubr>) [IN PROGRAM (<fprog>) [<pass>] [IF FOUND]Example:存放子程序的程序文件PROGRAM FORMPOOL.FORM SUB1.W RITE: / …USER NAME:‟,SY-UNAME.ENDFORM.FORM SUB2.WRITE: / …HOST SERVER:‟,SY-HOST.ENDFORM.在程序中调用FORMPOOL中的SUB2 子程序SUBNAME = …SUB2‟.PROGNAME = …FORMPOOL‟.PERFORM (SUBNAME) IN PROGRAM (PROGNAME) IF FOUND参数值的传递在ABAP/4中参数的传递可分成1.Call By Reference:传参数时将数据的存放地址(address)传至参数中, 也就是子程序中的参数变量与外部实际变量共享地址内的值, 又称为Call By Address, 若在子程序中地址中的值改变了, 外部实际变量的值也会跟着改变.语法:FORM <subr> [USING <f1> <f2>…] [CHANGING <f1>…]PERFORM <subr> [USING <f1> <f2>…] [CHANGING<f1>…]Using 之后接在子程序中不会改变的变量, CHANGING接会改变值的变量但实际上USING之后的参数在子程序中也可将值改变Example:SUM = 0.NUM1 = 100. NUM2=200.PERFORM ADD USING NUM1 NUM2 CHANGING SUM.W RITE: / NUM1,NUM2,SUM “ SUM 由0 变成300FORM A DD USING NUM1 NUM2 CHANGING SUM.SUM = NUM1 + NUM2.ENDFORM.执行结果:100 200 3002.Call By Value传参数时将数据的值复制一份至另一地址中, 所以在子程序中参数变量值改变, 并不会影响外部实际变量的值.语法:FORM <subr> USING VA LUE(<f1>…)使用VA LUE(<f1>)表示<f1>是Call By Value的传递PERFORM <subr> USING <f1>Example:SUM = 0.NUM1 = 5.PERFORM MULTI USING NUM1 CHA NGING SUM.W RITE: / NUM1,SUM “NUM1值还是5, SUM 由0 变成120FORM MULTI USING VA LUE(NUM1) CHANGING SUM.SUM = 1.W HILE NUM1 > 1SUM = SUM * NUM1.NUM1 = NUM1 – 1.ENDWHILE..ENDFORM.执行结果:5 1203.Call By Value and Return Result传入参数值的方式同Call By Value, 但在子程序结束执行时会将传入的参数值复制一份传回给外部实际变量.语法:FORM ….. CHA NGING VA LUE(<f1>)PERFORM …. CHANGING …. <f1>Example:SUM = 0.NUM1 = 100. NUM2=200.PERFORM ADD USING NUM1 NUM2 CHANGING SUM.。