ABAP range 用法

Posted Rainystuday

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:

技术分享

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.

 





以上是关于ABAP range 用法的主要内容,如果未能解决你的问题,请参考以下文章

Abap range 表相关问题

ABAP中如何创建ranges table type?

ABAP中,用Ranges定义的内表,由于数据量大导致运行错误

ABAP中Collect的用法

ABAP系列SAP ABAP DYNP_VALUES_UPDATE 更新屏幕字段的函数及用法

SAP程序代码中RANGE表的用法注意点