首页 > 代码库 > ABAP、BW培训笔记

ABAP、BW培训笔记

ABAP开发

目标:ABAP编辑器、报表程序创建语法检查修改执行等基本操作、ABAP数据字典、SQL的使用

大体介绍

  • ABAPAdvanced  Business    Application  Programming

  • ABAP第四代的语言(ABAP/4),到后期会有JAVA的东西引进来,PI有自己的JAVA端,但ERP/R3还是主要用ABAP开发

  • 报表(Reports)不会改变业务(主要关注报表开发);对话(Dialogs)可能会改变业务、功能增强的开发

  • ABAP程序组成要素:关键字Keywords;选项Options(字体界面等);Parameters(参数)

关键词,选项和参数是用至少一个空格分开

EgWRITE  Figure  CURRENCY  ‘TWD’.

每写完一句代码是用.号结束的,每句是用关键字开始的,每个语句可能用到很多行,关键字选项参数等是用空格隔开的

注释:如果是用*注释,*号前面是注释,号是后面都都是注释

Report    ZFRLFA01  //程序名

程序类型:1MFI

应用(哪个模块的):ZFKMSCV…….001

开发类:如果不需要传输那么就放在本地  $TMP-Local object

             需要传输的就放到一个开发类中(按照模块保存数据)

编辑锁(Editor Lock)锁住编辑权限

做开发事务代码:se38

ZC001(成本控制)ZF001FI)。。。。。。。。。。。。。。。。。

程序名,保存地,请求号命名等都是有规范的,为后期查找等提供了方便。

程序开发时用到的数据类型,定义一些变量(P大型数据、I整型数据、F浮点型、N数字文本、C文本、D日期、T时间、X16进制)

Initial value 是各变量默认的初始值

定义变量最大只能30个字符,不能使用的特殊符号:()+.,:

空格是一个定义好的值了

用已经定义好了的变量去定义两一个变量

DATA:

Company       like T001-BUKRS  *在这个公司代码下

String130   type C  *这样string130位的 C类型的

String2      like string1  * string 2string1数据是一致的

String3      like string1

可以用一个结构定义多个变量

TYPESBEGIN OF ADDRESS

恢复初始化CLEAR<FIELD>

给一个变量赋值(用=即可)

通过位移的方式来赋值,在保存一个字符串是有位的,可定义从第几个字符开始取,从第0位开始算

2个结构的相同字段可以直接赋值,不用一一用=号赋值

定义文本编号:标题文本、编码文本,选择文本

ULINE    隔一行

SKIP  跳过

NEW-PAGE   新起一页

Write一种格式、值等直接在打印机以这种形式打印

zm024

se93

zp*

 

语句if   else       

Range变量   in <range>

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<field>from<field1>.      //从第几行到第几行

DO.

写一段IF的条件退出语句,不然会无限循环

ENDDO.

DO<n>TIMES.    //做几次

<> 

ENDDO

 

WHILE  A=<10.

WRITE:/’A=’,A.

A=A+1.

ENDWHILE.

 

LOOP可以套LOOP,但尽量少用

CHECK判断条件语句,做一个检查,不符合检查便跳出当前循环或报表

EXITCHECK差不多,看你写的位置跳到哪一步

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<B’.

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<B’.

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只跳出本次循环继续执行下次循环,如果是exitstop,就全部跳出,WHILE就不执行了。

Insert   into

APPENDAPPEND….TO,往表里增加一行,先扫描表里是否有该行,如果有,那么进行加和操作(只对比非数字的字段项),如果没有,就直接加入。

COLLECT:收集汇总,相同的关键字,其数字部分(例如金额)是自己加和的

 

 

 

SORT:排序,升序降序

例如:sort  itab   descenging  by   age. 

READ  TABLE.       //读表的一条数据

WITH  KEY<key>.    //按条件读取

      INDEX<idx>.      //按索引读取

 

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,查看数据库

TABLEST001.

DATAWS_T001  LIKE  T001.   

DATAWT_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.

 

 

 

TABLEST001.

DATAWS_T001  LIKE  T001. 

 DATAWT_T001  LIKE  TABLE  OF  T001.   //table定义一个内表

SELECT  SINGLE * FORM  T001  WHERE  BUKRS=’5640’.

WRITE:/T001-BUKRS,T001-BUTXT.

 

TABLEST001.

DATAWS_T001  LIKE  T001. 

 DATAWT_T001  LIKE  TABLE  OF  T001.   //table定义一个内表

SELECT  * INTO  CORRESPONDING  FIELDS  OF  TABLE WT_001  FROM  T001  WHERE  BUKRS=’5640’.   // 对比WT_001T001

       所有字段一致的选择出来

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.消除维度,变成平面图看

下钻:将季度分开成月

切片:立体正方形切成单面

切块:立体正方形切成块

转轴:立体正方形转个

 

CubeBW的常见的操作

统计表的组成,列、行、自由特性

数据仓库,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位的)

属性-----转换(统一单位,kgt等进行统一,目标单位统一为一个单位)

任务=---查询----另存为,可对相似的报表直接复制,在修改即可

禁止用零,一般规定行为零就禁止,不会启用列为零禁止。

新选择是CUBE里已存在的关键值,新公式

NDIV0X):被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

 

本文出自 “小恐龙” 博客,谢绝转载!

ABAP、BW培训笔记