ABAP Range Table

1. Range Table 概述

Range TableSAP R/3系统标准内表的一种,结构与 Selection Table 一致,由 SIGN, OPTION, LOWHIGH字段组成;

可以通过 TYPE RANGE OF 语句或 RANGES 关键字定义 Range Table

Range Table 常用于Open SQL语句中的条件筛选,可以优化取数效率与程序性能。

 

2.定义Range Table

可以通过两种方式定义:

1) TYPE RANGE OF…

DATA rtab {TYPE RANGE OF type}|{LIKE RANGE OF dobj}

[INITIAL SIZE n]

[WITH HEADER LINE]

[VALUE IS INITIAL]

[READ-ONLY].

 

2) RANGES

语法:

RANGES rtab FOR dobj [OCCURS n].

 

示例:


* 全局变量
DATA: gt_marc TYPE STANDARD TABLE OF marc.

*-------------------------------------------
* 通过 RANGE OF 定义
*-------------------------------------------
DATA: gr_werks TYPE RANGE OF werks_d,
      gw_werks LIKE LINE  OF gr_werks.

* 宏定义
DEFINE set_range.
  gw_werks-sign   = 'I'.
  gw_werks-option = 'EQ'.
  gw_werks-low    = &1.
  append gw_werks to gr_werks.
END-OF-DEFINITION.

set_range '1000'.
set_range '1010'.

SELECT *
  FROM marc
  INTO CORRESPONDING FIELDS OF TABLE gt_marc
  WHERE werks IN gr_werks.

*-------------------------------------------
* 通过 RANGES 定义
*-------------------------------------------
TABLES:marc.

RANGES: gr_matnr FOR marc-matnr.

这里需要注意,For后面字段必须为参考表的字段,不能使用 Data Element 来定义,否则系统会报出错误。

如:


RANGES: gr_werks FOR werks_d.

系统会提示:

abap_11_Range_Table_Error

 

3. 在 Subroutine 中传输 Range Table


TABLES: mara.

* 全局变量
DATA: gt_mara  TYPE STANDARD TABLE OF mara.

DATA: gr_matnr TYPE RANGE OF mara-matnr WITH HEADER LINE,
      gl_matnr LIKE LINE  OF gr_matnr.

*&---------------------------------------------------------------------*
*&      Form  frm_get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PT_MARA    text
*      -->PR_MATNR   text
*----------------------------------------------------------------------*
FORM frm_get_data  TABLES pt_mara  STRUCTURE mara
                          pr_matnr STRUCTURE gr_matnr.

  SELECT matnr mtart matkl
    FROM mara
    INTO CORRESPONDING FIELDS OF TABLE pt_mara
    WHERE matnr IN pr_matnr.

ENDFORM.                    " F_GET_DATA

 

4. 在 Function Module 中传输 Range Table

当需要在 Function Module 中传输Range Table 时,可以直接参考预定义类型 Table:

abap_11_Range_Table_Function

 

程序示例:


FIELD-SYMBOLS < fs_line >  TYPE ANY.
FIELD-SYMBOLS < fs_value > TYPE ANY.

DATA lv_value TYPE char40.

LOOP AT t_selection ASSIGNING < fs_line >.

  ASSIGN COMPONENT 'LOW' OF STRUCTURE < fs_line > TO < fs_value >.
  lv_value = < fs_value >.

  …
ENDLOOP.

 

 

参考文章:

http://blog.csdn.net/liangziyisheng/article/details/6322665 (liangziyisheng 的专栏)

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>