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.