ABAP开发
目标:ABAP编辑器、报表程序创建语法检查修改执行等基本操作、ABAP数据字典、SQL的使用
大体介绍
ABAP:Advanced Business Application Programming
ABAP第四代的语言(ABAP/4),到后期会有JAVA的东西引进来,PI有自己的JAVA端,但ERP/R3还是主要用ABAP开发
报表(Reports)不会改变业务(主要关注报表开发);对话(Dialogs)可能会改变业务、功能增强的开发
ABAP程序组成要素:关键字Keywords;选项Options(字体界面等);Parameters(参数)
关键词,选项和参数是用至少一个空格分开
Eg:WRITE Figure CURRENCY ‘TWD’.
每写完一句代码是用.号结束的,每句是用关键字开始的,每个语句可能用到很多行,关键字选项参数等是用空格隔开的
注释:如果是用*注释,*号前面是注释,”号是后面都都是注释
Report ZFRLFA01 //程序名
程序类型:1、M、F、I
应用(哪个模块的):Z(F、K、M、S、C、V…….)001
开发类:如果不需要传输那么就放在本地 $TMP-Local object
需要传输的就放到一个开发类中(按照模块保存数据)
编辑锁(Editor Lock)锁住编辑权限
做开发事务代码:se38
ZC001(成本控制)ZF001(FI)。。。。。。。。。。。。。。。。。
程序名,保存地,请求号命名等都是有规范的,为后期查找等提供了方便。
程序开发时用到的数据类型,定义一些变量(P大型数据、I整型数据、F浮点型、N数字文本、C文本、D日期、T时间、X16进制)
Initial value 是各变量默认的初始值
定义变量最大只能30个字符,不能使用的特殊符号:()+.,:
空格是一个定义好的值了
用已经定义好了的变量去定义两一个变量
DATA:
Company like T001-BUKRS *在这个公司代码下
String1(30) type C *这样string1是30位的 C类型的
String2 like string1 * string 2和string1数据是一致的
String3 like string1
可以用一个结构定义多个变量
TYPES:BEGIN OF ADDRESS
恢复初始化CLEAR
给一个变量赋值(用=即可)
通过位移的方式来赋值,在保存一个字符串是有位的,可定义从第几个字符开始取,从第0位开始算
2个结构的相同字段可以直接赋值,不用一一用=号赋值
定义文本编号:标题文本、编码文本,选择文本
ULINE 隔一行
SKIP 跳过
NEW-PAGE 新起一页
Write一种格式、值等直接在打印机以这种形式打印
zm024
se93
zp*
语句if else
Range变量 in
A co B A尽包含B
IF A >= B.
C = A - B.
ELSE.
C = B - A.
ENDIF.
Write:/ ‘|A-B|=’,C.
‘ ’表示不显示值,而是直接显示字符串
,后的C显示的C的值
REPORT test.
TABLES LFB1.
SELECT * FROM LFB1.
CASE LFB1-BUKRS.
WHEN ‘TW00’.
WRITE: / ‘DELTA’.
WHEN ‘TW02’.
WRITE: / ‘NETWORKING’.
ENDCASE.
ENDSELECT.
On change操作
REPORT test.
TABLES LFB1.
SELECT * FROM LFB1.
ON CHANGE OF LFB1 - LIFNR.
NEW - PAGE.
ENDON.
WRITE: / LFB1 - LIFNR, LFB1 - BUKRS .......
ENDSELECT.
循环LOOP的操作
LOOP AT WT_TABLE. //表名
INTO WS_TABLE_LINE. //从第一行开始拿到定义的结构中
WS_LINE-PRICE= WS_LINE-PRICE-100.
ENDLOOP. //结束LOOP
ONCHANG 是用在LOOP里的,在LOOP数据里对比两个字段有什么变化、区别,LOOP是在内表循环时用的,对比当前数据和上一个数据在某个字段的是否一致。
DO varying
DO.
写一段IF的条件退出语句,不然会无限循环
ENDDO.
DO
<>
ENDDO
WHILE A=<10.
WRITE:/’A=’,A.
A=A+1.
ENDWHILE.
LOOP可以套LOOP,但尽量少用
CHECK判断条件语句,做一个检查,不符合检查便跳出当前循环或报表
EXIT和CHECK差不多,看你写的位置跳到哪一步
STOP无需检查直接退出到最外
创建HELLO WORLD界面
Se38,输入程序名,创建
点小笔更改报告(程序名)
Write后加:可显示多个值,如果不加只显示一个
右键----格式-----添加注释/取消注释
/是换行,wirte:/ 就是换行显示的
输完代码,按激活对象,然后执行
REPORT XXXXXX
DATA:A TYPE I.
B TYPE I.
C TYPE I.
A=25.
B=12.
IF A>B.
C=A-B.
WRITE:/’A>B’.
ELSEIF A=B.
C=0.
WRITE:/’A=B’.
ELSE.
C=B-A.
WRITE:/’A
ENDIF.
WRITE:/’|A-B|=’,C.
REPORT XXXXXX
DATA:A TYPE I.
B TYPE I.
C TYPE I.
A=12.
B=11.
IF A>B.
C=A-B.
WRITE:/’A>B’.
IF A=12.
WRITE:/’A=12’.
ENDIF.
ELSE.
C=B-A.
WRITE:/’A
ENDIF.
WRITE:/’|A-B|=’,C.
ABAPDOCU进入各命令用法的例子,解释
每查一个按ABAP EDIT可以直接把代码拷到编辑器中
//查看是否匹配
CASE.
WHEN.
WRITE.
ENDCASE.
循环(DO LOOP)例子
REPORT xxxxxx
DATA:CNTR TYPE I.
CNTR=1.
DO.
WRITE:/CNTR.
CNTR=CNTR+1.
IF CNTR GT 10.
EXIT.
ENDIF.
ENDDO.
UNLINE. //显示一条分隔线
//CLEAR CNTR.
CNTR=1.
DO 9 TIMES.
WRITE:/CNTR.
CNTR=CNTR+1.
ENDDO.
循环(WHILE LOOP)例子
REPORT xxxxxx
DATA:CNTR TYPE I.
CNTR=1.
WHILE CNTR>9.
WRITE:/CNTR.
CNTR=CNTR+1.
ENDWHILE.
REPORT xxxxxx
DATA:CNTR TYPE I.
CNTR=1.
WHILE CNTR>10.
CNTR=CNTR+1.
WRITE:/CNTR.
IF CNTR=5.
CONTINUE.
ENDIF.
WRITE:/CNTR.
ENDWHILE.
CONTINUE只跳出本次循环继续执行下次循环,如果是exit、stop,就全部跳出,WHILE就不执行了。
Insert into
APPEND:APPEND….TO,往表里增加一行,先扫描表里是否有该行,如果有,那么进行加和操作(只对比非数字的字段项),如果没有,就直接加入。
COLLECT:收集汇总,相同的关键字,其数字部分(例如金额)是自己加和的
SORT:排序,升序降序
例如:sort itab descenging by age.
READ TABLE. //读表的一条数据
WITH KEY
INDEX
INSERT:插到当前索引的位置
APPEND:插到表的最后的位置
DELETE:删除一行
MODIFY:修改
例子:
REPORT XXXXXXX
TABLES:T001.
DATA:
BEGIN OF IntTab OCCURS 15.
BUKRS LIKE T001-BUKRS. //公司代码
BUTXT LIKE T001-BUTXT. // 公司名称
END OF IntTab.
DATA:ws_int like inttab.
SELECT * FROM T001.
CLEAR inttab.
Inttab-bukrs=t001-bukrs.
Inttab-butxt=t001-butxt.
Insert ws_int into table inttab.
APPEND inttab.
ENDSELECT.
LOOP AT INTTAB.
WRITE:/INTTAB-BUKRS,’ ’,INTTAB-BUTXT.
ENDLOOP.
Se11,查看数据库
TABLES:T001.
DATA:WS_T001 LIKE T001.
DATA:WT_T001 LIKE TABLE OF T001. //table定义一个内表
SELECT * FROM T001.
WS_T001-BUKRS=T001-bukrs. //BUKRS公司代码
WS_T001-BUTXT=T001-butxt. //BUTXT公司名称
ENDSELECT.
LOOP AT WT_T001 INTO WS_T001.
WRITE:/WS_T001-BUKRS, WS_T001-BUTXT.
ENDLOOP.
TABLES:T001.
DATA:WS_T001 LIKE T001.
DATA:WT_T001 LIKE TABLE OF T001. //table定义一个内表
SELECT SINGLE * FORM T001 WHERE BUKRS=’5640’.
WRITE:/T001-BUKRS,T001-BUTXT.
TABLES:T001.
DATA:WS_T001 LIKE T001.
DATA:WT_T001 LIKE TABLE OF T001. //table定义一个内表
SELECT * INTO CORRESPONDING FIELDS OF TABLE WT_001 FROM T001 WHERE BUKRS=’5640’. // 对比WT_001和T001,
所有字段一致的选择出来
LOOP AT WT_T001 INTO WS_T001.
WRITE:/ WS_T001-BUKRS,WS_T001-BUTXT.
ENDLOOP.
LOOP AT 表 INTO 行
LOOP AT itab INTO line FROM 2 TO 5.
//一般在制定一页显示几行时用
NUM=1.
LOOP AT itab TRANSPORTING NO FIELDS WHERE land=’USA’ .
WRITE:/NUM.
NUM=NUM+1.
WRITE:/itab-land,itab-name,itab-age,itab-weight.
ENDLOOP.
//不给itab赋任何值,
At first 显示在最前面的东西,放在at first里
At new字段关键字是否是第一次出现,第一次出现执行at new
Select options做选择屏幕用的,可调出标准查询的选项
Paramenters 做选择屏幕用的,
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME title text-020.
SELECTION-SCREEN COMMENT/1(30) text-020.
PARAMENT p_vkorg type TVKO-vkorg DEFAULT’0005’.
SELECT-OPTIONS S_vkorg FOR TVKO-vkorg.
SELECTION-SCREEN END OF BLOCK B1.
Se37里可查Function Modules系统已经写好了一些标准的功能,可以直接调用,也可以自己写Function Modules,然后再写程序即可调用。
程序先调用Function Modules,然后定义一些参数,Function Modules会去数据库取数,不用自己去数据库取数,然后程序可直接接调用。
程序调用Function Modules,直接处理我给你文本的值,处理完了返回给程序即可。
Macro宏
Include直接调用其他地方的程序,include 程序名
开发人员要注册SAP用户名,还要申请开发KEY,第一次用的时候只要输入一次开发KEY即可,以后都不用了
Include,引用了其他地方的程序等,可以写在该程序前面
DATA:数据定义,内表变量等都在这定义
Initialization初始化
Perform check 权限检查,一上来基本都是要做权限检查的
End of
At end of
At last
Sap分三个过程: 开发系统——>测试系统——>生产系统(正式的日常业务)
开发一个程序后可以分配一个TCODE,类似于事务代码,但是是z打头的
表、数据元素、域(数据元素依赖的基础)
依靠已经创建的域来创建数据元素,数据元素组成表描述描述描描述新建沙箱
ECC_Sandbox_erp ides
10.8.5.167
00
SND
用户名:abap01 密码:chem123 新密码:chem1234
商务智能(BI)
商务智能将数据进行整理规范
后勤数据统计分析
BW的报表是由各模块的数据经过抽取到数据仓库,然后以一定的规范做报表
ABAP直接从ERP中做报表
ETL:数据的导入传输
多维分析是给管理层的决策用的,综合的
多维数据集(CUBE)
度量值:数量、金额;组成了事实表
维度:从哪个方面分析数据(时间维度、业务分类维度等,除了量金额的都叫维度)
多维数据集的结构
上卷(聚合、合并):1.各个季度合并成年,从图上看,是第一季度和第二季度合并成上半年,第三季度第四季度合并成下半年。
2.消除维度,变成平面图看
下钻:将季度分开成月
切片:立体正方形切成单面
切块:立体正方形切成块
转轴:立体正方形转个
Cube是BW的常见的操作
统计表的组成,列、行、自由特性
数据仓库,ETL抽取、转换、装载
BW中的,OLAP在线分析;R/3中的,OLTP
BW数据仓库中开发时常用的词:第一层就是PSA(一个存储的空间,选择性的过滤一些数据放到PSA中比如选择某个公司下的)、然后是DSO(抽取加工转换,进行运算,合并数据提高性能)、Info Cubes(加载到多维立方体中)再通过多个工具转换
Eg.要看三年的营业收入的数据,关注每一个月(DSO)
处理链:安排好任务的先后顺序,到点会做处理
Cube是最重要的*******
切片、切块:在日历年、物料等上点右键,过滤器——选择筛选值,填入筛选的值
很少用到转轴功能,一般都是关键值在列上
打开一个报表
全局变量下:日历日 2009.01.01 – 2009.12.31(之间用空格隔开)
物料 //可不输
公司代码 //可不输
变量前面带*号的是必输的,不输的是默认的当前权限下可看的报表信息。
物料可选择多个物料,并存入可用变式里,那么就自动保存了,每次进去直接选择原来保存的可用变式即可。
过滤报表:右上角过滤器
下溯跟下钻差不多,在列里的日历月右键更改下溯-下溯曲(垂直、水平曲线),可以删除,恢复原来的显示
行上面是维度,列是关键值
数据仓库
联机事务处理(OLTP)
ABAP报表更新快,随时可查
数据仓库的四个特点要记住:面向主题、集成的、数据不可更改、随时间变化的
数据仓库,数据具有不同的细节级
粒度这个词很重要
分割。。。。。。。。。。。。
事实表只记录业务的量和金额,事实表的列(指标)少,但是记录行数缺相当大
BW中做了扩展的星形结构
在BW中的信息对象的概念:特性、指标
信息立方体
事实表最多可以有16个维度表
BW报表操作,三范式,数据仓库,
BW开发工具------Query Designer
关键值、特征、变量、例外条件
开始----程序
进入主界面后,查询(新建、打开)
试图
最右边的技术名称,[关键]文本,关键字有且唯一的标识
打开查询;选择查询:查找
历史
收藏夹
角色(还没用到)
信息范围:将所有的报表按照模块分类
过滤器中,红色=,就是不等于,例如合同编号 =[#],就是将带着些符号的都过滤掉
描述是表头名字
属性----显示----小数位数(数量3位的,金额2位的)
属性-----转换(统一单位,kg、t等进行统一,目标单位统一为一个单位)
任务=---查询----另存为,可对相似的报表直接复制,在修改即可
禁止用零,一般规定行为零就禁止,不会启用列为零禁止。
新选择是CUBE里已存在的关键值,新公式
NDIV0(X):被0除时等于0,否则为X
例如:销售数量为0,收入不是0,
技术名称,唯一的标识每张报表
保存时的技术名称是有规范的
技术名称:X表示三级企业开发的,RCSCCCA01是该报表基于的CUBE的编号
限制关键值、计算关键值
信息立方体:一个信息立方体只能有一个事实表和最多16个维度表,有3个维度是SAP自动维护的(时间、单位、信息包),剩下只有最多13个维度表能我们自己设计。
三个仓库:目标(信息对象、信息立方体、DSO)
PSA
数据源
两个车:信息包:把外部的数据源抽取到PSA里
DTP:数据传输过程
一个转换:容器---容器间进行加工,这之间要用到转换
Rsa1-----数据仓库工作台(建模)
数据源里提供的字段对应下一个数据目标,就叫转换
总结:ERP——>PSA——>DSO数据存储对象——>DSO——>信息立方体——>query designer——>BO——>仪表盘
PI培训
IR ——>ID——>IE