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.