
REPORT(报表)
报表程序的主要作用是从数据库中抓取数据通过整理陈列出来,给企业高层或具有相关需求的人员查看。如无特殊需求,此类程序一般不需客制screen、menu、title。
A、ABAP LIST(最简单的一种报表程序,显示在屏幕上的数据及格式都通过ABAP中的WRITE语句实现,开发工具:SE38)
B、ALV REPORT (The ALV Grid Control (ALV = SAP List Viewer)属于报表的一种高级形式,显示出来的报表整洁美观,具有很大的交互功能,屏幕上的数据及格式主要通过系统的FUNCTION实现,开发工具:SE38)
C、SAPSCRIPT(属于商务报表,主要应用于商业用途或对外的报表设计,开发工具:SE38、SE71)
D、SMARTFORM (属于商务报表,主要应用于商业用途或对外的报表设计,是SAPSCRIPT的升级版,包含了SAPSCRIPT的绝大多数功能,但开发起来比SAPSCRIPT更方便,快捷。开发工具:SE38、SMARTFORMS)
E、QUERY (适用于简单的查询报表开发,无需具有ABAP编程知识,但又提供了写ABAP代码的功能,对于一些简单的、无太多计算逻辑或判断逻辑的报表,推荐用其开发,开发工具:SQ01、SQ02、SQ03)
F、REPORT PAINTER(此类报表主要应用于FICO模块,比较少用,但功能也非常强大。)
常用T-CODE
SAP标准的例子程序:T-CODE(ABAPDOCU)
可以将事务代码分配给类型为Executable program(1)的单独程序,以后就将程序作为事务代码处理。通过T-CODE(SE38)或者菜单(Tools->ABAP Workbench->Development->other Tools->Transactions就可以了。
用SE93 查看和创建TCODE,然后将该TCODE 加到相应的角色里就可以放到左边的菜单里了。SAP菜单树:工具 -> ABAP 工作台 -> 开发 -> 其他工具 -> 事务
标准菜单:s000
SE38进入开发界面,Tools → ABAP Workbench → Development→ABAP Editor
SE80 对象导航器object navigator和workbench,Tools → ABAP Workbench → Overview → Object Navigator
SE11:数据字典ABAP Dictionary,Tools→ ABAP Workbench→ Development→ ABAP Dictionary
作用:Create a Table,Create a Domain,Create a Data Element
SE81以树状结构察看 应用模块(ca,fi…..) 其下包括 开发类Development class
/h debug模式 F8 test运行 F3 回退
语法检查快捷键: CTRL + F2 激活Activate CTRL + F3
运行报表:
整齐打印: shift + F1 默认不可插入字符,按键盘插入键即可插入字符
TABLES语句:TABLES 声明程序所使用的table。 表工作区提供一个接口,通过该接口可以将数据从数据库表加载到程序,或利用开放式SQL语句修改数据库表的内容。 要显示表的组件及其数据类型的列表,请在ABAP/4编辑器的命令行中(选择“编辑->其它功能->命令输入”)键入“SHOW 例子: TABLES: SPFLI. Select * FROM SPFLI. WRITE: SPFLI-MANDT, SPFLI-CARRID, SPFLI-CONNID, ...... ENDSelect. 示例中,TABLES语句创建表工作区SPFLI。SPFLI与ABAP/4词典中声明的数据库表SPFLI结构相同。在Select循环中,用属于数据库表SPFLI的行填充表工作区SPFLI。 domain是对table的技术上的定义说明, date element是对table语意上的定义说明 顾名思义,DOMAIN 是 域。 用它可以定义TABLE ELEMENT(数据元素), 而组成 TABLE 中的 FIELD 则 要 通过 TABLE ELEMENT(数据元素)来定义。 DOMAIN ---》TABLE ELEMENT ---》 FIELDS ---》TABLE 1.在Dictionary裡所定義的物件有tables,domains,及data elements.Domain 定義了table field的屬性 2.Fields不是獨立的物件,只能在tables裡maintain,table fields的使用必須先有對應的data elements存在 3. Data elements的使用必須先有對應的domain存在 4.Domain的定義可以不用參考其他的dictionary objects 建立一個Domain: Zmandt, 新增資料到table:zvbak (1)SE11--ABAP Dictionary-->Domain (2)SE80--Workbench->other objects->Dictionary->Domain 建一個Data Element (1)SE80--Workbench->other objects->Dictionary->Data element PBO(Process Before Output)与PAI(Process After Input) occurs 指明的數量是有一點學問的. 1.當你知道可能每次用Select命中或交換的紀錄數xxx時,可指明occurs xxx. 2.如用occurs 0聲明時, buffers由系統自動分配. occurs *,后面表示系统初始分配给此内表多少行,每次满时再多分配多少行,我们平常为了节约内存,一般直接用0. 数据类型(types)的种类 数据对象(data)的种类 单值对象(data)的声明:注意type和like的用法区别 例:注意type与like的用法 Report zyyxx_ex_data. types my_type(10) type c. data: my_data1 type mytype value 'test', my_data2 like mydata1. my_data2='data2'. write: my_data1,my_data2. 定义对象并赋值: work area对象的声明,data关键字 例1:先声明一个结构类型(types),然后声明work area 例2:直接声明一个work area,注意复制语句move-corresponding的用法 内表Internal Table 存储多行多列的结构型数据类型,相当于一个数据库table Internal table数据类型(types)的声明 Internal table对象(data)的声明 根据已声明的internal table数据类型来声明table对象 内表是按行进行访问的。必须使用某个工作区域作为与表格互相传输数据的接口。 工作区域对内表的行必须是可转换的, 为了避免不一致,最好是工作区域与内表行有相同的数据类型。创建与内表兼容的工作区域的一种安全步骤是在说明内表和工作区域时使用相同的数据类型。 如果创建带表头行的内表,系统自动创建与内表行数据类型相同的工作区域。该工作区域称为表头行或表格工作区域,对内表的作用与由TABLES语句创建的数据库表格工作区域相同。表格工作区域和内表本身同名。 不带表头行的内表没有可以隐式使用的表格工作区域。要访问没有表头行的内表,必须在相应的ABAP/4语句中显式指定工作区域。 同时声明internal table数据类型和data对象 例子:两种方式定义内表对象:注意向内表中添加数据的append语句 常用系统参数:sy-subrc=0 有记录sy-subrc<>0 无记录。clear清空data对象,返回到初始值 SY-SUBRC : 系統執行某指令后,表示執行成功与否的變數,’0’ 表示成功 SY-UNAME: 當前使用者登入SAP的USERNAME; SY-DATUM: 當前系統日期; SY-UZEIT: 當前系統時間; SY-TCODE: 當前執行程式的Transaction code SY-INDEX : 當前LOOP循環過的次數 SY-TABIX: 當前處理的是internal table 的第几筆 SY-TMAXL: Internal table的總筆數 SY-SROWS: 屏幕總行數; SY-SCOLS: 屏幕總列數; SY-MANDT: CLIENT NUMBER SY-VLINE: 畫豎線 SY-ULINE: 畫橫線 运算符 循环控制 数据库操作 SELECT 是一个循环式语法,必须有ENDSELECT标识循环结束,在SELECT和ENDSELECT中间可以对中间的数据进行处理。 SELECT INTO TABLE 是把数据一次性取到表中,如果你需要处理的话,再用LOOP AT 来处理。因为SELECT INTO TABLE 是一次读取数据,之后是在内存中处理数据,所以在数据量大、需要进行的处理少的时候效率比循环方式高。 例1: TABLES VBAK. DATA: WA LIKE VBAK. SELECT * FROM VBAK INTO WA WHERE VBELN <= ‘5000’ ORDER BY VBELN. WRITE: /SY-DBCNT, WA-VBELN. ENDSELECT. WRITE /SY-DBCNT. WRITE ‘RECORDS FOUND’. 例2: 1)先自定义一个结构ST_SCARR, 2)以结构ST_SCARR定义一个工作区WA_SCARR, 3)用”LIKE TABLE OF”从工作区WA_SCARR定义一个内表IT_SCARR. 4)用SELELT语句从数据库表SCARR中读取数据. 5)用”CORRESPONDING FIELDS OF TABLE ”给内表IT_SCARR字段进行同名输值. 6)用”LOOP AT…TO…”把内表中的数据逐条传给工作区,最后对工作区的数据进行输出. TYPES: BEGIN OF ST_SCARR, CARRID TYPE SCARR-CARRID, CARRNAME TYPE SCARR-CARRNAME, CURRCODE TYPE SCARR-CURRCODE, URL TYPE SCARR-URL, END OF ST_SCARR. DATA: WA_SCARR TYPE ST_SCARR, “wa IT_SCARR LIKE TABLE OF WA_SCARR. “itab SELECT CARRID CARRNAME CURRCODE URL FROM SCARR INTO CORRESPONDING FIELDS OF TABLE IT_SCARR. LOOP AT IT_SCARR INTO WA_SCARR. WRITE: /1(3) WA_SCARR-CARRID, 5(20) WA_SCARR-CARRNAME, 26(5) WA_SCARR-CURRCODE, 32(30) WA_SCARR-URL. ENDLOOP. Subroutines Event Block Report Programming 程序的模块化 宏 例 ************************************************************* * macros * DEFINE xml. concatenate xmldata &1 into xmldata. write: / 'XML:', &1 color col_positive inverse. END-OF-DEFINITION. WRITE: /. xml ''. 日志 创建日志 szal 添加message到日志对象 显示日志 保存日志 授权对象 授权对象层次关系:授权对象分类->授权对象->授权对象字段 创建授权对象字段 SU20 创建对象 SU21 选择对象类别 步骤: su20权限字段 su21权限对象 su01创建用户 pfcg创建角色 su53查看权限对象 BAPI SAP增强 Change request
