ABAP range 用法

转自http://www.sapjx.com/abap-range-table.html

1. Range Table 概述

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

可以通过 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 来定义,否则系统会报出错误。

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.
原文地址:https://www.cnblogs.com/rainysblog/p/6424436.html