----------------------------------------2007-8-7------------------------------
----------------------------------------2007-8-7------------------------------
使用摘录数据集提炼数据
双击事件
获得光标位置处的信息
使用摘录数据集提炼数据
WWWDATA:this table record Import/Export data information
用batch写程式的时候,如果要用到批量的情况,一定要记得把BDCDATA在每次循环的时候清空一下,系统不会自动清空的.
下面语句的形式可以有效提高查询语句的效率
SELECT * FROM SFLIGHT INTO WA_SFLIGHT
FOR ALL ENTRIES IN FTAB
WHERE CARRID = FTAB-CARRID AND CONNID = FTAB-CONNID .
双击事件
双击事件是在STATUS的F3上放上处理码,然后在User-Commend中相应就行了.这里常用到下面的内容,来获得双击时光标的位置.
获得光标位置处的信息
要在交互式事件中检索光标位置处的信息,请使用GET CURSOR语句引用字段或行。
关于该字段的信息,请使用语法:
语法
GET CURSOR FIELD <f> [OFFSET <off>] [LINE <lin>]
[VALUE <val>] [LENGTH <len>].
在用户行为中,该语句将光标位置处的字段名传送到变量<f>中。如果光标在字段上,则系统将SY-SUBRC设置为0,否则,将其设置为4。
系统传送子程序的全局变量、常量、字段符号或引用参数的名称。对子程序的文字、局部字段和VALUE参数,系统
将SY-SUBRC设置为0,但将SPACE作为名称传输。
选项有下列作用:
? OFFSET <off>
字段<off>包含光标在字段中的位置。如果光标在第一列上,则<off>=0。
? LINE <lin>
字段<lin>包含光标所在列表行的行号(SY-LILLI)。
? VALUE <val>
字段<val>包含光标所在字段的字符串输出表示法。表示法包括格式化字符。
? LENGTH <len>
字段<len>包含光标所在字段的输出长度。
GET CURSOR LINE <lin> [OFFSET <off>] [VALUE <val>] [LENGTH <len>].
此语句将用户行为期间光标所在行的行号传输到变量<lin>中。如果光标在列表行上,则系统将SY-SUBRC设置为0,否则,将其设置为4。可以使用此语句避免用户选择无效行。
选项有下列作用:
? OFFSET <off>
字段 <off>包含光标在列表行中的位置。如果光标在第一列上,则<off>=0。
? VALUE <val>
字段<val>包含光标所在行的字符串输出表示法。表示法包括格式化字符。
? LENGTH <len>
字段<len>包含光标所在行的输出长度。
使用摘录数据集提炼数据
由于内表具有固定的行结构,所以它不适于处理具有变化结构的数据集。出于这种考虑,ABAP/4提供了创建所谓的摘录数据集的可能性。摘录数据集是报表存储区中的顺序数据集。这意味着只能在循环中访问它的数据。不能象对内表操作那样通过索引访问其单个行。在报表运行过程中,系统可以正确地创建一个摘录数据集。至于内表,因为系统可根据需要展开它,所以原则上摘录数据集的大小是没有限制的。摘录数据集由一系列预定义的结构的记录组成。但是,不是所有记录的结构都必须相同。在一个摘录数据集中,可以一个接一个地存储不同长度和结构的记录。不必为要存储的不同结构创建单个的数据集。这实际上大大减少了维护工作。与内表不同,系统在存储摘录数据集时,将部分压缩摘录数据集。这减少了所需的存储空间。另外,不必在报表的开始处指定摘录数据集的结构,而可以在程序流过程中动态决定其结构。
创建并填充摘录数据集
要在报表中创建并填充摘录数据集 ,请执行下列三个步骤 :
1. 将要在摘录数据集中使用的记录类型定义为字段组。
FIELD-GROUPS <fg>.
特殊字段组 HEADER:在它里面放的field,其它字段组都能访问.(可以避免数据冗余)
2. 通过分配字段定义每个记录类型的结构。
INSERT <f1> ... <fn> INTO <fg>
3. 将所需的数据摘录到数据集中。
EXTRACT <fg>.
读取摘录数据集
...
[AT FIRST | AT <fgi> [WITH <fgj>] | AT LAST.
...
ENDAT.]
...
ENDLOOP.
语句LOOP-ENDLOOP终止创建报表的摘录数据集并在数据集的所有记录上执行循环。在每个循环过程中,系统将读取一个摘录记录并将其数据值直接放回到源字段中。可以连续执行多个循环。
与内表不同,对于摘录数据集不必使用特殊的工作区作为接口(参见访问内表)。对于每个记录的读取,都可以使用它们原始字段名在循环的语句块中处理读取的数据。
与内表上的LOOPAT-ENDLOOP循环不同,在摘录数据集上不能使用嵌套的LOOP-ENDLOOP循环,否则将产生运行时错误。
在循环的语句块中及处理循环后,不允许再使用EXTRACT语句。否则将产生运行时错误。
循环控制
如果只需对数据集的某些记录执行一些语句,则可使用控制语句AT和ENDAT。
系统将针对AT不同的选项处理控制语句之间的语句块,如下所示:
? AT FIRST
系统将针对数据集的第一条记录执行一次该语句块。
? AT <fgi> [WITH<fgj>]
如果当前读取的摘录记录的记录类型是用字段组<fgi>定义的,系统就处理该语句块。使用WITH <fgj>选项时,在摘录数据集中,字段组<fgi>当前读取的记录后面必须紧跟字段组<fgj>的记录。
? AT LAST
系统将针对数据集的最后一条记录执行一次该语句块。
关于如何使用控制语句AT和ENDAT处理控制级的信息,参见处理控制级。
关于在循环结束前如何终止该循环的信息,参见终止循环。