qmhiro - by - 20 五月, 2008 00:32

Collect语句镶嵌在select---endselect之中使用,在报表开发中经常用到,作用是根据tableunique key,把表中其他的字段进行自动的累加,一般用在对某些数据进行总数统计的时候.

举例如下:

data:begin of mytable,

keyfield like XXX,

fliedl1 like XXX,

field2 like XXX,

end of mytable.

Data: mytable_col like hashed table of mytable

With unique key keyfield with headline.

select keyfield fliedl1 field2 from table_system

into (mytable- keyfield, mytable-fliedl1, mytable- field2).

Collect mytable into mytable_col.

Endselect.

这个例子的作用是以keyfield为主键,fliedl1fliedl2的数据进行累加,计算属于每个keyfieldfliedl1fliedl1的总和.

Collect使用有两个条件:

<!--[if !supportLists]-->1. <!--[endif]-->累加时送入的表必须时hashed table或者 sorted table,即必须拥有唯一的key.

<!--[if !supportLists]-->2. <!--[endif]-->除了key之外的其他属性必须时数字型的,才能进行累加计算.

当然 mytable mytable_col.的表的类型必须完全一致.

一般的报表在生成时都需要对大量的数据进行计算,这时使用collect语句的好处就是不用在把数据取到本地后再loop进行累加,降低报表对系统的压力.

come form: http://blog.csdn.net/nodreamer/archive/2007/02/25/1514272.aspx

从内部表中抽取唯一记录的方法测试

三种方法简单介绍:

方法一: 内部表循环赋值,使用COLLECT语句追加记录

方法二: 内部表循环赋值,使用AT NEW和APPEND语句追加记录

方法三: 整个内部表赋值,使用DELETE ADJACENT DUPLICATES语句删除重复记录.

http://abaper.blogbus.com/logs/2679647.html



qmhiro - by - 19 五月, 2008 10:37

COME FORM: http://i.cn.yahoo.com/02900427056/blog/p_5/

关键字: ABAP面试

问题一:锁对象(Lock Object)和 FM(Function Module),激活Lock Object时,

案 产生的 FM 的名字是什么?

答案:首先要在 ABAP 字典中创建锁对象,然后才能在 ABAP 程序中设锁。

创建锁对象时,系统会自动生成两个 FM 来进行锁管理。

用于设锁的 FM 为: ENQUEUE_<锁对象名>。它用于在锁表(Lock Table)

中生成一个锁项(Lock Entry)。若设锁不成功的话,就会在 Return 中反映出来。

用于释放锁的 FM 为:DEQUEUE_<锁对象名>。它用于从锁表中删除一个锁项。

在 ABAP 程序中,只需使用 "CALL FUNCITION ..." 语句就可以调用它们。

这两个锁 FM 是在 SAP 系统的一个特殊工作进程中执行的,专门进行锁管理。

它运行在一个单独的服务器上,而该服务器专门用于维护整个 SAP 系统的主锁表

(Central Lock Table)。

有两种锁类型:

1. 共享锁——只读锁,一个用户正在读数据时,阻止其他用户更改该数据。

2. 独占锁——可写锁,一个用户正在修改数据时,阻止其他用户更改该数据。

问题二:更新方面的 FM

更新 FM 分为 V1 和 V2,那么首先会执行哪一种更新类型呢?每种类型又是以

哪种模式(异步、同步或本地)执行的呢?

答案:V1 更新类型比 V2 更新类型的优先级高,因此,V1 比 V2 行执行。

V1 的执行模式可以为异步、同步或本地;V2 只能为异步执行。

问题三:ABAP 内存(ABAP Memory)交换

在使用 ABAP 内存的程序间进行数据交换时用到的两个语句是什么?

答案:EXPORT to MEMORY ID 用于将数据复制到 ABAP 内存,IMPORT from

MEMORY ID 用于将数据从 ABAP 内存复制到程序中。

在 ABAP 内存间进行交换的数据必须在两个程序中都进行声明,并包含同样的数据声明。

问题四:授权对象(Authorization Objects)

什么是授权对象?在 ABAP 程序中使用哪条语句进行授权检查?

答案:授权对象由一组字段组成,这些字段中的值将被用于进行授权检查。

ABAP 程序中使用 AUTHORITY-CHECK 语句根据授权对象进行授权检查。

在 AUTHORITY-CHECK 语句中,必须指明授权对象的所有字段,但有一个例外,

可以用 DUMMY 关键字来绕过某个字段的检查。

一个授权对象中最多可以定义 10 个字段。

问题五:修改(Modifications)

在 SAP 系统中是怎样定义"修改"的?它们对更新(upgrade)有怎样的影响?

答案:修改是指用户对 SAP 发布的库对象(Repository Object)进行的更改。

必须在更新期间对修改进行评审(Review),来决定是否应该使用新的 SAP 对象,

以及将来使用时是否需要进一步修改该对象。

问题六:修改助手(Modification Assistant)

什么是修改助手?

答案:修改助手是 4.5 版中引入的一个工具,用于简化更新过程。可以通过

ABAP 编辑器触发修改助手,它会记录对系统进行的修改。修改助手支持通过

ABAP 编辑器、Screen Painter、Menu Painter、文本元素维护、Function Builder 和

ABAP 字典进行的修改。

问题七:功能模块出口(Function Module Exit)

实现功能模块出口时 SAP 应用程序中应使用哪条语句?

答案:某些 SAP 应用程序中存在功能模块出口,它使用户能够向 SAP

程序中添加一些功能。通过搜索 "CALL CUSTOMER" 可以发现是否存在功能模块出口。

问题八:事务变式(Transaction Variants)

什么是事务变式?为何要使用它?

答案:事务变式是一组屏幕变式,用于预定义屏幕行为和默认值。通过使用变式功能,

可以将用户不需要的字段、子屏幕及全屏幕从用户视图中取消。可以给任何输入字

段设置默认值,字段也可以不用带 "Ready for Input" 状态。

只能为对话和报表事务创建事务变式;变式中只能包含普通屏幕、子屏幕及对话屏幕。

开发人员可以使用 GuiXT 脚本语言通过事务变式维护对屏幕进行修改。修改屏幕布局的方式有:插入按钮、值帮助(Value Helps)、移动对象、插入屏幕等等。

问题九:更改 SAP (Changing SAP)

请列出用户修改 SAP 标准功能的不同方式。

答案:SAP Standard 可以通过 Personalization、Customizing、Modifications、Enhancements 及自定义 ABAP 程序进行更改。这些方式的示例如下:

Personalization——Personalization 技术包含创建变式、设置/获取参数及活动组(Activity Groups)。

Customizing ——是最常用的使用 SAP 工具(如 R/3 Reference Model and Implementation Guide)更改 SAP Standard 的方式。可以认为 Customizing 是实施 R/3 所必需的,通常由 Functional Team 来执行。

Enhancements——常由开发 Team 执行,包含的活动有:字典增强、Funciton Module Exits、菜单和屏幕出口及 Business Add-ins (BADI)。

自定义 ABAP 程序——可以与 SAP 对象或自定义开发的对象一起工作。

Modifications——不建议对 SAP 对象使用 Modifications。使用 SSCR (SAP Software Change Registration)注册所有对 SAP 对象的手动修改。

问题十:添加字段

向 SAP 表中添加字段的方法是哪两种?

答案:这两种方法是:Append 结构(Append Structure)和自定义 Include(Customizing Include)。Append 结构是在向表尾添加字段时创建的,自定义 Include 由 SAP 开发人员指定,以使用户可以创建新字段。

问题十一:什么是 BADI?

答案:BADI 是 Business Add-in 的缩写。它是一种新的功能增强概念,使用 ABAP 对象技术。这是一种使用面向对象的方法来进行 SAP 增强。实现 BADI 要用到类、接口及方法等面向对象的概念。

要对一个 SAP 应用程序进行增强,必须首先定义 BADI。为 BADI 创建一个接口,接着创建一个适配器类(Adapter Class)来实现这个接口, 然后创建这个适配器类的实例。



qmhiro - by - 18 五月, 2008 07:53

SAP ABAP小结
=========================================================== 作者: qiujun(http://qiujun.itpub.net)
出处:http://qiujun.itpub.net/post/24006/298614
---------------------------------------------------------------

1 使用binary search之前,需要sort,并且sort by ascending(系统默认的顺序也是ascending)。而且read table with key的顺序同sort的顺序相同,否则出错,常会找不到纪录。Delete adjacent duplicates之前一定要sort。

2 关于内部表示和外部表示:调用BAPI和Update DB的时候,一定要使用内部形式(物料号有前导零的时候被认为是内部形式;单位一般也有内部形式外部形式之分)。在se11浏览数据的时候,显示数据的画面是使用内部形式,当detail overview的时候,则是外部形式。

3 使用at new, at first, at last, at end of的时候要注意:loop的时候不能加条件;at和endat之间不能使用loop into的working area。手动实现at new, at end of的时候,需要注意,容易出错,尤其是在at end of的时候。

4 一般情况下,更新数据库需要commit,但debug会自动commit,程序结束也会自动commit。

5 对于选择界面上的select-options,clear s_lifnr[]是指clear body part,clear s_lifnr是指clear header part。一般不直接编辑界面上的select-options。

---------------------------------------------------------------
come from : http://blog.csdn.net/CompassButton/archive/2007/03/08/1524491.aspx
---------------------------------------------------------------
1、AT New事件触发说明
如 AT New f.
f 是内表的一个字段,当f字段或者f字段左边的字段内容发生变化是该事件后面的语句都会执行。
TYPES: BEGIN OF COMPANIES_TYPE,
NAME(30),
PRODUCT(20),
SALES TYPE I,
END OF COMPANIES_TYPE.

DATA: COMPANIES TYPE STANDARD TABLE OF COMPANIES_TYPE WITH
NON-UNIQUE DEFAULT KEY INITIAL SIZE 20,
WA_COMPANIES TYPE COMPANIES_TYPE.

...

LOOP AT COMPANIES INTO WA_COMPANIES.
AT NEW PRODUCT.
NEW-PAGE.
WRITE / WA_COMPANIES-NAME WA_COMPANIES-PRODUCT.
ENDAT.
WRITE: / WA_COMPANIES-PRODUCT, WA_COMPANIES-SALES.
AT END OF NAME.
SUM.
WRITE: / WA_COMPANIES-NAME, WA_COMPANIES-SALES.
ENDAT.
ENDLOOP.
这个样例当name变化时,AT new事件也会执行。

2、AT New 发生时工作区的字段的值

All character type fields (on the right) are filled with "*" after the current control level key.

All other fields (on the right) are set to their initial values after the current control level key.

AT NEW 和AT END OF的用法
http://www.sapclub.org/blog/nyf425/archive/2008/01/07/67689.html
-------------------------------------------------------------------
使用 AT NEW f. 和 .AT END OF f 时需要注意:

1,f 必须是内表的第一个字段。

2,内表中f 之后的字段的值都会变成 *。

例:

REPORT Z_TEST.

DATA: BEGIN OF TH_LIFNR,
LIFNR TYPE LFA1-LIFNR,
ITEM TYPE C,
END OF TH_LIFNR.

DATA: TD_LIFNR LIKE TABLE OF TH_LIFNR.

SELECT LIFNR FROM EKKO
INTO TABLE TD_LIFNR
WHERE EBELN > 4500006374
AND EBELN < 4500006390.

SORT TD_LIFNR ASCENDING BY LIFNR.

LOOP AT TD_LIFNR INTO TH_LIFNR.
AT NEW LIFNR.
WRITE:/10 TH_LIFNR-LIFNR.
WRITE:/ 'The next is new lifnr.'.
ENDAT.
ENDLOOP.


----------------------------------------------------------------
http://www.chinavalue.net/Article/Archive/2007/1/18/54443_2.html

在写abap 的过程中,可能需要统计,求和等那么如何实现呢?其实在loop ... endloop 中间,有个AT <LEVEL>,<…>,ENDAT循环. 其中的<LEVEL>包括: FRIST, LAST, NEW , END OF.这些可以用来进行内表中按某个字段进行分组统计.
FIRST 内 表的第一行
LAST 内 表的最后一 行
NEW <f> 行组 的开头,与 字段 <f> 和 <f> 剩余字段中 的内容相同
END Of <f> 行组 的结尾,与 字段 <f> 和 <f> 剩余字段中 的内容相同

AT - ENDAT 块中的语句 块使用这些 行条件代表 预定义的控 制结构。用 户可以使用 它们处理内 表中的控制 断点,而不 必使用 编程分支和循环 中所述的控 制语句自己 编程。
在 AT - ENDAT 语句块中, 工作区域没 有用当前表 格行进行填 充。初始化 所有不是标 准关键字部 件的字段( 参见
标识表格行 )。对于行 条件 FIRST 和 LAST, 系统用星号 (*) 改写所有标 准关键字段 。对于行条 件 NEW <f> 和 END OF <f>,系 统用星号 (*) 改写所有出 现在工作区 域中指定字 段 <f> 右边的标准 关键字段。 用户可根据 自己的需求 在 AT - ENDAT 语句块中填 充工作区域 。

DATA: BEGIN OF LINE,
COL1 TYPE C,
COL2 TYPE I,
COL3 TYPE I,
END OF LINE.
DATA ITAB LIKE LINE OCCURS 10.
LINE-COL1 = A.
DO 3 TIMES.
LINE-COL2 = SY-INDEX.
LINE-COL3 = SY-INDEX ** 2.
APPEND LINE TO ITAB.
ENDDO.
LINE-COL1 = B.
DO 3 TIMES.
LINE-COL2 = 2 * SY-INDEX.
LINE-COL3 = ( 2 * SY-INDEX ) ** 2.
APPEND LINE TO ITAB.
ENDDO.
LOOP AT ITAB INTO LINE.
WRITE: / LINE-COL1, LINE-COL2, LINE-COL3.
AT END OF COL1.
SUM."按Col1 求和.
ULINE.
WRITE: / LINE-COL1, LINE-COL2, LINE-COL3.
SKIP.
ENDAT.

AT LAST.
SUM."总求和.
ULINE.
WRITE: / LINE-COL1, LINE-COL2, LINE-COL3.
ENDAT.
ENDLOOP.
其输出为:
A 1 1
A 2 4
A 3 9
________________________________
A 6 14

B 2 4
B 4 16
B 6 36
________________________________
B 12 56

________________________________
* 18 70




博客日历
« 七月 2008 »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
搜索
管理控制台
TOP_Read
TOP_Reply
New_Reply
网站链接
100easy
itput.net
erphome
sap.itpub.net
sapforum.net
ERP100 SAP论坛
我看企业管理
CSDN SAP 论坛
SAP俱乐部
sapsh.com
226E
saphome.NET
huihoo SAP
sap netweaver
sapsky.com
CSDN tag系统
SAP开发者社区
SAP SDN Blogs
sapfans
sap-directory
ittoolbox
sap-img
bwexpertonline
sapteched.com
BW Discussion Forums
sapprofessionals.org
squidoo.com
chetanasforum.com
sapcookbook.com
ENGLISH招聘网站
SAP BW Resumes
hotgigs
ZP rnd.in
jobsvista.com
SAPBWReport
bwexpertonline
BW A & Q
wordpress.com
bwexpertonline.com
国外论坛
sap jobs
searchsap.com
job
SAP JOBS
gleez.com/sap-bw
uky.edu
www.ittestpapers.com
SAP SERACH
searchsap.techtarget.com
Aaron Wang
SAP Help Portal
SAP BW Library
sap support portal
SAP CN
SAP Certification
BW Technical Consultant Certification
sap certification
BW310 help
全国车次网
个人所得税计算器
购书中心书籍检索
个税住房按揭计算器
广图书目检索
蔚蓝电子商务
当当网
得益网
eastday.com
21stcentury
全库网123查
SAP BOOKS
SAP BW Hints and Tips
SAP BW certification
博克SAP书籍
广社保业务大厅
招行理财计算器
工行理财计算器
nw2004s library
股票买卖计算
chinese-english
SAP生活
零售业SAP学习
小白之家
XCBQL SAP天地
iyahui
SAP R3 人民公社
MBA智库百科
神话的博客
翱翔云天
JYW
SAP圈
会计博客-arrow
SAP CLUB
JACK WU HOME
SAPING
JY0314
天一剑客
aton001 ABAP
SAP砍刀
zhpfeng
jumpwater
lifeiwu
My SAP CW
Flying的ERP空间
思考、规划、执行
大兵SAP HR博客
SAP Specialist
youlan
SAP博客
SAP BW
厚德载物
forchheim bw
天津包子
科华SAP笔记
wangqiwu
ABAP
沧海拾贝
ABAP chouer
老黄的畅享空间
SAP-ENGLISH
Jack Wu BW
SAP BI Blog
sap-img.com
sdn.sap.com
SAP BW Interviews
forchheim
ericmw78
LAZY的窝窝
charles6222FICO
IDES FICO
robinyou
SAP屠夫的博客
一把老骨头
Melody
http://charles6222.itpub.net
shenpng
arrow
似雪飞翔
学无止境ABAP
童话.生活...
铁血论坛
我爱笑话
ICXO
MSN理财网
汽车之家
汽车标志
汽车报价库
ask question
SAP book
英文早报
羽球在线
中羽网社区
大傻羽球
FT中文
sap-press.de
bw.sdn.sap.com
和讯
和讯BBS
新闻聚合
RSS 0.90
RSS 1.0
RSS 2.0
Atom 0.3