--------------------------------------------------2007-07-16~2007-07-17-------------------------------------------

来源:互联网 发布:彩票数据采集 编辑:程序博客网 时间:2024/04/30 22:58

 

--------------------------------------------------2007-07-16~2007-07-17-------------------------------------------
ALV控件的使用
调用程序
在报表的最上面输出.
在调用报表和被调用报表之间传递数据.
填写被调用报表的选择屏幕
选择表
RANGES语句
格式化选择屏幕
Reprot程序中使用变式
定义过程块
ABAP/4事件处理程序
事件关键字
提炼数据
在使用SUM等语句时提出要不需要操作的column
包含START-OF-SELECTION过程块和FORM-ENDFORM块选择屏格式:
 
 
 
 
ALV控件的使用
例程:BCALV_GRID_DEMO
     BCALV_GRID_3, BCALV_GRID_4, BCALV_GRID_5.........
First Steps 
This section describes the easiest way to display a list with selected data in the ALV Grid Control. To do this, you must:
  1. Create an instance of the ALV Grid Control and integrate it into a screen.
  2. Select the data to be displayed and pass it together with a description of the fields to the instance.
See also sample report BCALV_GRID_DEMO in development class SLIS.
Creating an ALV Grid Control
You instantiate an ALV Grid Control in the same way as other controls:
  1. Declare reference variables for the ALV Grid Control and the container. In addition, declare an internal table that you fill with selected data later on:
DATA: grid TYPE REF TO cl_gui_alv_grid,
      g_custom_container TYPE REF TO cl_gui_custom_container
      gt_sflight TYPE TABLE OF sflight.
In order to integrate a control into a screen, you can use four different container controls (in this example, we use the custom container control).
  1. Create a standard screen and mark an area for the custom container control in the graphical Screen Painter (icon identified by letter 'C'). Assign name CCCONTAINER to this area.
Exercise 1: Reserving an Area for a Control of the Controls Tutorial explains how to mark an area in the alphanumerical Screen Painter version.
  1. In the PBO module of the screen, you must now instantiate the container control and the ALV Grid Control. By doing this, you create a link between the container control and the screen, using the container created in the Screen Painter. Using parameter parent, you define the container control as the parent of the ALV Grid Control:
IF g_custom_container IS INITIAL.
    CREATE OBJECT g_custom_container
       EXPORTING
          CONTAINER_NAME = 'CCCONTAINER'.
    CREATE OBJECT GRID1
       EXPORTING
         I_PARENT = g_custom_container.
ENDIF.
The IF query of reference variable g_custom_containerensures that the instances are only generated when the PBO is processed for the first time.
Normally, you must use method cl_gui_cfw=>flushto pass the methods called to the frontend. However, since the Control Framework performs an automatic flush at the end of the PBO module, this step is not required here.
 
When you start the program, although the two instances (the container control and the ALV Grid Control) are generated, they are not visible.
Displaying a List in the ALV Grid Control
Once you have created the ALV Grid Control and integrated it into a screen using a container control, you must pass the data and its structure to the ALV Grid Control:
  1. Fill the internal table with data:
SELECT * FROM sflight INTO TABLE gt_sflight.
  1. Pass the output table and the structure data to the ALV Grid Control. Again, ensure to call this method only once after the ALV Grid Control is created:
CALL METHOD grid->set_table_for_first_display
             EXPORTING I_STRUCTURE_NAME = 'SFLIGHT'
             CHANGING IT_OUTTAB = gt_sflight.
In this case, the structure data is provided through the Data Dictionary. The ALV Grid Control gets the field information from table SFLIGHT and displays all fields of the table.
 
在报表的最上面输出.
TOP-OF-PAGE.
WRITE 'Report 1'.
ULINE.
 
调用程序
报表                                                 事务
无返回调用     SUBMIT LEAVE TO                  TRANSACTION
调用并返回     SUBMIT AND RETURN        CALL TRANSACTION
调用报表
SUBMIT <rep> [AND RETURN] [<options>].(静态)
SUBMIT (<rep>) [AND RETURN] [<options>].(动态)
如果忽略AND RETURN选项,则系统将删除调用报表的所有数据和列表级。终止被调用报表之后,它将返回到启动调用报表的级别。
如果使用 AND RETURN系统将存储调用报表的数据,并在处理完调用的报表后返回到调用报表。系统用紧接着调用的语句恢复执行调用报表。
任何使用 SUBMIT 的被调用报表,都与AND RETURN选项无关,都可以访问调用报表的 ABAP/4 内存,该调用报表包括存储在 ABAP/4 内存中的数据簇。.
 
在调用报表和被调用报表之间传递数据.
l         将被调用报表的数据存储到内存中并离开.
AT USER-COMMAND.
     CASE SY-UCOMM.
        WHEN 'MBCK'.
           EXPORT ITAB TO MEMORY ID 'HK'.
          LEAVE.
 ENDCASE.
 
l        在调用报表中使用被调用报表保存的数据
SUBMIT ZSAPMZTS1 AND RETURN.
IMPORT ITAB [TO <ITAB>] FROM MEMORY ID 'HK'.
 
填写被调用报表的选择屏幕
SUBMIT ... [VIA SELECTION-SCREEN]
           [USING SELECTION-SET <var>]
           [WITH <sel> <criterion>]
           [WITH FREE SELECTIONS <freesel>]
           [
EXPORTING LIST TO MEMORY  AND RETURN]
           [WITH SELECTION-TABLE <rspar>].
[AND RETURN]
1.    VIA SELECTION-SCREEN
显示被调用报表的选择屏幕。默认情况下,SUBMIT之后系统不显示选择屏幕。
2.    USING SELECTION-SET <var>
此选项告诉系统使用变 <var> 启动被调用程序(参见使用变体预设置选择)。
3.    WITH <sel> <criterion>
使用此选项填写选择屏幕的单个元素<sel>(选择表和参数)。使用元素<criterion> 之一
使用此选项填写选择屏幕的单个元 <sel>选择表和参数)。使用元素 <criterion> 之一:
 
-      <op> <f> [SIGN <s>]用于单值选
 
如果 <sel> 是选择标准,请用 <op> 填写被调用的报表选择表格 <sel> OPTION 字段,用 <f> 填写 LOW 字段,用 <s> 填写 SIGN 字段(参见选择表)。
如果 <sel> 是参数,则可以使用 <op> 任何操作符。总是用 <f> 填写参数 <sel>
 
-      [NOT] BETWEEN <f1> AND <f2> [SIGN <s>]用于间隔选
 
<f1> 传送到被调用报表中选择表 <sel> LOW 字段中,将 <f2> 传送到 HIGH 字段中,将 <s> 传送到 SIGN 字段中。如果忽略 NOT
选项,则系统将把值 BT 填写到 OPTION 字段中;如果使用 NOT,则系统将把值 NB 填写到 OPTION 字段中(参选择表)。
 
-      IN <seltab>传送选择表
 
用调用报表中表格 <seltab> 的值填写被调用报表中的选择表 <sel>表格 <seltab> 必须有选择表的结构。可以使用 RANGES 语句创建这
样的表格(参见 RANGES 语句)。
 
 
4.    IN <seltab>传送选择表
用调用报表中表格<seltab> 的值填写被调用报表中的选择表 <sel>表格 <seltab> 必须有选择表的结构。可以使用RANGES语句创建这样的表格(参见 RANGES 语句)。
5.    WITH FREE SELECTION <freesel>动态选择的用户对话
6.    WITH SELECTION-TABLE <rspar>值的动态传
7.... EXPORTING LIST TO MEMORY
Effect
Does not display the output list of the called report, but saves it in ABAP memory and leaves the called report immediately. Since the calling program can read the list from memory and process it further, you need to use the addition ... AND RETURN. Also, since the called report cannot be requested for printing, the addition ... TO SAP-SPOOL is not allowed here. You can read the saved list from SAP memory with the function module 'LIST_FROM_MEMORY' and then (for example) store it in the database with EXPORT. You can process this list further with the function modules 'WRITE_LIST', 'DISPLAY_LIST' ... of the function group "SLST".
 
选择表
系统为每个SELECT-OPTIONS 语句创建选择表。选择表是一个带表头行的内表。它的行结构是字段字符串,由四个组件构成,即 SIGN OPTION LOW HIGH每个选择表行表示数据选择的条件
l         SIGN
数据类型C,长度1。表示保存在 OPTION 中的运算符是否需要翻转。允许值是 I E
-      I 表示“包含”(包含标准-运算符不翻转)
-      E 表示“排除”(排除标准-运算符翻转)
l         OPTION
OPTION 的数据类型是 C,长度为 2OPTION包含选择运算符。如果SIGN 包含E,运算符的作用就象它的前面有 NOT(有 NOT 的详细信息,参见组合几个逻辑表达式)一样。下列运算符是可用的:
如果 HIGH 是空的,您可以使用 EQ NE GT LE LT CP NP。这些运算符在编程逻辑表达式中描述。运算符CP NP
没有它们在通常逻辑表达式中所具有的范围。只有当在输入字段中使用了通配符(“ * ”或“ + ”)时它们才是有效的。没有定义退出符号。
如果 HIGH 已被填充,则可以使用 BT(位于)和 NB(不位于)。这些运算符的功能与 BETWEEN NOT BETWEEN一样(参见检查字段是否属于某一范围)。
l         LOW
LOW的数据类型与数据库表的列类型相同,该表与选择标准相连接。      如果 HIGH 为空,LOW 的内容定义单值选择。它与OPTION 中的运算符相结合,为数据库选择指定了条件。如果 HIGH 已填充,LOW HIGH 中的内容为间隔选择指定上界和下界。与 OPTION 中的运算符相结合,该间隔为数据库选择指定了条件。
l         HIGH
HIGH 的数据类型与数据库表的列类型相同,该表与选择标准相连接。HIGH 中的内容为间隔选择指定了上界。OPTION 中的运算符相结合,该间隔为数据库选择指定了条件。
如果选择表包含多行,系统将按下列规则执行数据选择:
1.    组成 SIGN 字段值为 I(包含)的行上定义的集合联合
2.    去掉 SIGN 字段值为 E(排除)的行上定义的集合联合
3.    选择结果集合。
如果选择表只具有SIGN字段等于 E的行,系统将选择这些行所指定的集合之外的所有数据。除了用SELECT-OPTIONS 语句创建选择表,您可以用在创建和处理内表中描述的语句或 RANGES 语句,按相同的结构创建内表。这些表可以用与SELECT-OPTIONS 语句创建的真正的选择表相似方法使用,但是有限制。有 RANGES 语句的详细信息,见RANGES 语句 要用与选择表相同的结构创建内表,可使用 RANGES 语句,如下所示:
RANGES <seltab> FOR <f>.
该语句创建选择表 <seltab>该表参考数据库表的列 <f> 或内部字段 <f>。选择表 <seltab> 必须在程序中填充。不必在程序中再用TABLES语句声明数据库表。
RANGES 语句是下列语句的短格式:
DATA: BEGIN OF <seltab> OCCURS 10,
         SIGN(1),
         OPTION(2)
         LOW LIKE <f>,
         HIGH LIKE <f>,
      END OF <seltab>.
用RANGES创建的内表与选择表结构相同,但功能不同。
 
格式化选择屏幕
使用 SELECTION-SCREEN 语句的各种选项,可以做下列工作 :
 
指定空行、下划线和注释
将几个元素放在一行上
定位元素
创建元素块
在应用工具条中创建按钮
在选择屏幕上创建按钮
SELECTION-SCREEN 只能用于选择屏幕。它在没有选择屏幕的报表中是无效的。例如,不执行 PARAMETERS 或 SELECT-OPTIONS 语句就无法创建按钮。
 
Reprot程序中使用变式
ABAP/4 可以在一个选择设置中组合全部选择所需的值。可以对每个报表程序创建任意多个不同的选择设置,而它们仍只分配给值得怀疑的报表程序。这种选择设置称为变式。
使用联机变式
联机情况下,由于不必在每次显示选择屏幕时都输入同一种选择设置 ,所以通过变式启动报表会保存用户工作。另外,使用变式可使输入错误减到最少。通过为报表程序的每个应用程序创建具有最优值的变式,可保证 最终列表尽可能地既精确又迅速。
在后台处理中使用变式
在后台处理中,变式是为选择传递值的唯一可行的方法。 因此在后台执行的报表程序必须通过变式启动 (例外:SUBMIT… VIA JOB)。 为避免每次值变化时都创建新的变式,ABAP/4 提供了以变量值为变式赋值的可能(参见变式属性)。为确保报表程序总是通过变式启动,可以在程序属性中设定。
 
 
定义过程块
两个事件关键字之间或事件关键字与FORM语句之间的所有语句构成过程 块。出现事件时,系统将在相应事件关键字之后处理过程块。
ABAP/4 报表程序中的所有语句都是过程块或子程序的一部分。
没有紧跟着事件关键字或FORM-ENDFORM 块的语句自动成为默认事件 START-OF-SELECTION 过程块的一部分这样将有下列影响 :
1.    如果在REPORT或PROGRAM 语句与第一个事件关键字或 FORM 语句之间写语句,则将把这些语句包括在 START-OF-SELECTION 过程块中
2.    如果没有把START-OF-SELECTION关键字包括在报表中,则这些语句构成整个START-OF-SELECTION 过程块。
       如果将START-OF-SELECTION 关键字包括在报表中,则将把这些语句插入到此块的开始部分。
3.    如果没有在程序中指定事件关键字,则该程序FORM语句之前的所有语句构成START-OF-SELECTION 过程块。注意,这种情况下,永远不会执行FORM - ENDFORM块之后的所有语句。
因为通过事件唯一切换执行顺序,所以在程序中过程块的出现顺序是没有任何关系的。但是,为了保证可读性,在程序中应该以过程块的执行顺序排列它们。
与操作或控制语句不一 样,系统在生成程序时 而不是在运行时间中执行说明性语句。对它们的执行与它们在程序代码中的位置无关,并且可以属于任何过程块。为清楚起见,应该把所有说明性的关键字放到程序或子程 序的开始处 。
 
ABAP/4 处理程序
报表程序是过程块的集合,执行该程序以对特定事件作出反应,特别是使用逻辑数据库时。可以把这些块视为可调用模块。在程序代码中 ,它们不需要以任何特殊的顺序出现。一旦调用报表程序 ,系统就启动另一个进程(控制程序),该进程调用这些模块,并控制外部程序流。
此控制程序是ABAP/4处理程序。它监视ABAP/4报表程序、 逻辑数据库程序和其他程序模块( 例如对话屏幕)之间的交互作用。 它也解释ABAP/4程序的运行时间对象。 必须生成每个ABAP/4程序,在ABAP/4编辑器中编写这些程序,以创建其运行时间对象。这既适用于报表程序,也适用于逻辑数据库程序。即可以在 ABAP/4编辑器中通过选择“程 序 -> 生成”执行 该生成,也可以在“ABAP/4编辑器:初始屏幕”上 通过选择“ 生成”执行 。第一次启动报表程序 时,自动生成该报表程序。
通过在程序中使用的事 件关键字控 制 ABAP/4处理程序和不同程序之间的交互作用。例如
?      在报表程 序 START-OF-SELECTION、 GET 中,等等,
?      在逻辑数 据库程序 PUT 中,等等,
根据由事件关键字定义的流,ABAP/4 处理程序解释相应程序单元,并开始处理它们。
事件及其事件关键字
事件关键字                                                   事件
INITIALIZATION                             在显示选择屏幕之前的点
AT SELECTION-SCREEN                 选择屏幕仍然活动时,处理用户在选择屏幕上输入之后的点
START-OF-SELECTION                   处理选择屏幕之后的点
GET <table>                                     点位于逻辑数据库提供数据库表<table>的行处。
GET <table> LATE                                   处理所有表之后的点,在逻辑数据库的结构中,使这些表位于数据库表<table>的下层。
END-OF-SELECTION                       处理完逻辑数据库提供的所有行之后的点.
TOP-OF-PAGE                                  启动新页时,列表处理中的点
END-OF-PAGE                                 结束页时,列表处理中的点
可以用这些关键字改善输出列表的格式。
下列事件出现在报表程序输出列表 的显示中:
事件关键字                                                   事件
AT LINE-SELECTION                      用户在该点处选择行
AT USER-COMMAND                      用户在该点处按下功能键或在命令字段中输入命令
AT PF<nn>                                       用户在该点处按下有功能代码 PF<n> 的功能键
可以使用这些关键字编写交互式报告的程序。
事件关键字AT SELECTION-SCREEN的选项使您能够在处理选择屏幕时为特定事件创建过程块 。在下列主 题中说明这些事件:
处理特殊输入字段
处理多重选择
创建输入值列表
创建输入字段的帮助
处理单选按钮组
处理输入字段块
选择屏幕的PBO
 
提炼数据
1.         在读取数据过程中提炼数据
2.         用内表提炼数据
3.         使用摘录数据集提炼数据
 
摘录数据集
摘录是用户可用报表创建的顺序数据集。如果需要多次将大量数据作为一个整体处理,请使用摘录。
如果使用大量数据,则将数据保存在内表中并在其中提炼数据有以下缺点:
由于系统一个接一个地处理所有内表,所以在几个内表中划分大量数据时,必须考虑处理内表所需的运行时间。并且系统以未压缩形式存储内表,这意味着大量的数据需要大量的存储空间。甚至系统还必须将数据集展开成已分页的区域,这样就降低了处理速度。
l         用平铺内表提炼数据
l         使用嵌套内表提炼数据
 
使用SUM等语句对内表实现类似group by的功能.
初始化所有不是标准关键字部件的字段。对于行条件FIRST LAST,系统用星号(*) 改写所有标准关键字段。对于行条件NEW <f> END OF <f>,系统用星号(*) 改写所有出现在工作区域中指定字段<f> 右边的标准关键字段。用户可根据自己的需求在AT - ENDAT 语句块中填充工作区域。
不要在LOOP语句的作用受 FROM、TO或WHERE限制的循环中使用控制级别语句(参见逐行读取内表),因为没有很好地定义交互作用
Eg:
LOOP AT ITAB1 .
      AT END OF WERKS.          WERKS 左边的标准关键字段不会变成*
            sum.
   itab1-zTOT = ITAB1-LABST + ITAB1-INSME + ITAB1-SPEME + ITAB1-RETME +
                                ITAB1-UMLME + ITAB1-LBLAB + ITAB1-KULAB.
        CHECK itab1-zTOT <> 0.
        ITAB1-LGORT = SPACE.
        IF....
        ELSE.
          move-corresponding itab1 to itab_zm02. itab_zm02表中放入的就时归总过的记录
          append itab_zm02.
        ENDIF.
      ENDAT.
ENDLOOP.
 
也可以嵌套使用.
LOOP AT <itab>.
  AT FIRST. ... ENDAT.
    
AT NEW <f1>. ...... ENDAT.
      AT NEW <f
2 >. ...... ENDAT.
        .......
          <single line processing>
.......
      
AT END OF <f2>. ... ENDAT.
    
AT END OF <f1>. ... ENDAT.
  AT LAST. .... ENDAT.
ENDLOOP.
 
包含START-OF-SELECTION过程块和FORM-ENDFORM块选择屏格式:
REPORT SAPMZTST.
START-OF-SELECTION.
    WRITE / 'Statement 1'.
   WRITE / 'Statement 2'.
    PERFORM ROUTINE.
    WRITE / 'Statement 3'.
 
FORM ROUTINE.
   WRITE / 'Subroutine'.
 ENDFORM.
在程序的这 种形式中, 也可以忽略 START-OF-SELECTION 语句。
 

 

原创粉丝点击