1、,Beyond Technology,ABAP培训 杨晓光,ABAP程序分类,报表程序(Report)1、结构简单;2、由事件块(Event Blocks)组成程序架构;3、执行方式多样;对话程序(Dialog Program / Transaction Program)1、结构复杂;2、包括ABAP程序代码、用户对话、图形用户接口和事务代码;3、图形用户接口包括菜单栏、标准工具栏、应用程序工具栏和标题栏;4、程序由事务代码触发运行;,报表程序分类,普通报表程序输出结果格式固定,不能对其进行交互式操作;交互式报表程序通过特定的触发事件,比如双击、菜单、按钮和功能键等,可以对报表结果进行操作;,
2、报表程序结构,处理块的类型,事件块,组成报表程序的基本单位; 原则上每个事件块由各自的关键字为起始,不同的事件块执行不同的任务; 事件块的结束标志为下一个事件块的关键字; 事件块由ABAP运行时环境调用,其调用顺序固定,与程序编码顺序无关; 缺省的事件块START-OF-SELECTION,实例讲解,某库存地选定物料月末库存数统计表(报表:ZTEST)目的:对某个工厂下的某个库存地的选定物料统计其在某年某月的月末库存数,数据来源于系统,程序名,REPORT rep. Additions: 1. . NO STANDARD PAGE HEADING :没有标准页眉的报表 2. . LINE-SI
3、ZE col 3. . LINE-COUNT n(m)表单输出每页由n行,其中的m行作为页脚; 4. . MESSAGE-ID mid 消息对象5. . DEFINING DATABASE ldb 使用逻辑数据库,自动产生例如:定义一个120列37行(其中3行为页脚保留),没有标准页眉的报表REPORT ZTESTNO STANDARD PAGE HEADING LINE-SIZE 120 LINE-COUNT 37(3).,Tables 语句,基本格式TABLES dbtab. Dbtab是指ABAP字典的一个数据库对象,可以是透明表格、视图和结构; 该语句的作用是声明了一个表工作区,类似于
4、C语言里面的STRUCTURE和PASCAL语言里面的RECORD; 这个表工作区由多个字段组成,其名称、类型和dbtab的字段完全相同; ABAP字典对象中字段的类型自动的转换为ABAP程序的类型; 表工作区通常是一个全局变量。例:TABLES: MARA,“物料主数据表MARD,“物料的仓储位置数据表MARDH.“物料主储存位置段:历史表,TYPES语句,定义一个简单的数据类型; 定义一个结构化的数据类型; 定义一个内表形式的数据类型;,TYPES语句格式,1. TYPES type. 2. TYPES type(len).3. TYPES: BEGIN OF structype . EN
5、D OF structype. 4. TYPES itabtype TYPE tabkind OF linetype| LIKE tabkind OF lineobj WITH UNIQUE|NON-UNIQUE keydef INITIAL SIZE n. 5. TYPES itabtype TYPE RANGE OF type. TYPES itabtype LIKE RANGE OF f. 6. TYPES itabtype TYPE linetype|LIKE lineobj OCCURS n.,DATA语句(1),定义一个简单类型的变量,例如:DATA VAR1 TYPE I.”定义
6、整型变量DATA VAR2 TYPE P DECIMALS 2.”定义数值型小数位2位DATA VAR3 LIKE MARA-MATNR.”定义象表MARA的 字段MATNR,DATA语句(2),定义一个结构化的数据对象,例:DATA: BEGIN OF ITAB_LINE,MATNR LIKE MARA-MATNR,MAKTX(40),END OF ITAB_LINE.,DATA语句定义内表(3),定义输入屏幕,用SELECTION-SCREEN语句来定义输入屏幕例:SELECTION-SCREEN BEGIN OF BLOCK RAD1WITH FRAME TITLE TEXT-001.P
7、ARAMETERS WERKS LIKE MARD-WERKS.“工厂PARAMETERS LGORT LIKE T001L-LGORT.“库存地点SELECT-OPTIONS MATNR FOR MARA-MATNR.“物料号PARAMETERS YEAR LIKE MARD-LFGJA.“当前期间的会计年度PARAMETERS MONTH LIKE MARD-LFMON.“当前期间 (记帐期间)SELECTION-SCREEN END OF BLOCK RAD1.,SELECTION-SCREEN语法,特殊效果,输入字段设计,PARAMETERS 语句例: PARAMETERS LGORT
8、 LIKE T001L-LGORT.“库存地点,SELECT-OPTIONS语句例: SELECT-OPTIONS MATNR FOR MARA-MATNR.“物料号,PARAMETERS语法,默认值 类型 小数位 表字段 内存值做缺省值 给参数分配匹配代码对象 给修改组分配参数 禁止参数显示 小写 必输项 11.复选框形式输出 12.单选钮形式输出,Select-options语法,事件块,INITIALIZATION AT SELECTION-SCREEN START-OF-SELECTION GET END-OF-SELECTION TOP-OF-PAGE END-OF-PAGE,事件块
9、详细讲解,事件块的简单处理过程:ABAP程序运行的时候,INITIALIZATION首先被调用; 经过初始化的输入屏幕会显示在表示服务器; 用户离开输入屏幕的时候,START-OF-SELCTION事件会被自动调用; 结果数据会以列表的形式显示在第二个屏幕上;,事件块的语法,源代码中的事件块顺序不影响它们的执行顺序 事件块关键字和它下面的代码组成一个不可分割的整体,不管书写事件块关键字的顺序如何,当程序执行时,SAP是按事件块关键字的特定顺序执行的。例如:不管怎样书写,下面标号总是执行顺序START-OF-SELECTIONPERFORM WRITEDATA.INITIALIZATIONLGO
10、RT = 3001.AT SELECTION-SCREENPERFORM GETDATA.,事件块编码规则(1),INITIALIZATION通常在此事件块中设定输入屏幕字段的初始值例如: INITIALIZATION .LGORT = F106.效果:输入屏幕的库存地字段初始显示值为一站台6道,事件块编码规则(2),AT SELECTION-SCREEN通常在此事件块中进行用户输入数据的合法性检查,发现错误则以消息的形式给出警示,直到用户输入正确的数值例如: AT SELECTION-SCREEN .IF LGORT = SPACE .STOP.ENDIF.效果: 如果字段LGORT为空,则
11、程序会停止在选择屏幕,等待用户输入,一直到数据合法。,事件块编码规则(3),START-OF-SELCTION通常在此事件中针对业务需求进行系统数据的查询例如:start-of-selection .PERFORM GETDATA.效果:在输入屏幕用户按下执行按钮后,子程序PERFORM GETDATA 被执行, 在其中获得业务相关的数据存放到内表或者其它变量,这些数据在END-OF-SELECTION事件块中被输出,事件块编码规则(4),END-OF-SELCTION通常在此事件中进行结果清单的输出例如:end-of-selection .PERFORM WRITEDATA.效果:数据以清单
12、的形式输出,事件块编码规则(5),GET从逻辑数据库中得到数据(较少用)TOP-OF-PAGE在此事件块中设计输出清单的页头例如: TOP-OF-PAGENEW-LINE.POSITION 30.WRITE: 物料月末库存数.SKIP 1.NEW-LINE.ULINE 2(85).,事件块编码规则(6),END-OF-PAGE在此事件中设定输出清单的页脚例如:END-OF-PAGE .NEW-LINE.POSITION 70.WRITE: 制表人:,sy-uname.,WRITE语句,按照指定的格式把变量里面的数据输出到屏幕 语法:,特定位置 格式(对齐等) 字段特有的输出(货币) 输出为复选
13、框 输出为符号 输出为图标 输出为直线 带快捷信息,WRITE语句的选项,根据选项的不同,WRITE语句可以输出到屏幕、输出到变量、以复选框的形式输出、以图标的格式输出,子程序(1),子程序类似于C、PASCAL等语言的函数/过程 子程序在事件块中被调用,子程序(2)语法,子程序接口定义,行参实参传递方式值调用地址调用,子程序调用(1),语法: PERFORM .,子程序调用(2),结构作为子程序参数,内表作为子程序参数,函数模块,与子程序(form)相比,函数模块是在程序外部定义的,而且能够在全系统范围内被调用的子程序;而子程序(form)一般来说只在本程序内定义和调用。 函数模块具有透明的
14、接口,它的接口与代码分开定义。 函数模块都隶属于某一个函数组 函数模块由函数制作器(Function Builder)创建 函数模块可以被本系统的程序调用,而且可以被其它的R/3系统、R/2系统甚至是非R/3系统调用(RFC),函数模块的调用,函数模块是程序外部模块,不在程序内编码,函数组,每个函数模块都属于一个函数组 每个函数组里面的函数模块都有相同的主题,实现的功能相互联系 函数组实际上是一个类型为F的ABAP程序,它本身不能够被执行 当一个函数模块被调用的时候,与它同一个函数组的函数都被调到内存区域里面;,函数模块的组成,函数模块的调用语法,函数模块可以设置对异常的处理,以防出现运行时错误,Thank you,Neusoft Co., Ltd.,