我正在使用line_index
函数,并希望搜索两个值,不仅为carrid
,而且为connid
。这可能吗?如果是,以什么方式?
因为现在,这是有效的:
lv_index = line_index( lt[ carrid = 'LH' ] ).
但是像这样添加代码[ connid = '2407' ]
之后:
lv_index = line_index( lt[ carrid = 'LH' ][ connid = '2407' ] ).
出现语法错误:
LT[]不是内部表
所有字段(条件)一个接一个地放在一个括号内:
lv_index = line_index( lt[ carrid = 'LH'
connid = '2407' ] ).
我想评论一下表表达式的链接。
因此,对应于OP示例的答案是,必须使用单个表表达式(itab[...]
)与所需的尽可能多的组件,而不是像(itab[...][...]
)那样使用表表达式链。
lt[ carrid = 'LH' ][ connid = '2407' ]
永远不可能是有效的(因为connid = '2407'
暗示LT
的每一行本身都是一个内部表,但carrid = 'LH'
是矛盾的,因为它意味着LT
的每一行都是一个结构)。
但是链表表达式的其他语法也是有效的,例如(只要内部表被充分定义)
itab[ 1 ][ comp1 = 'A' ]
itab[ comp1 = 'A' ][ 1 ]
itab[ comp1 = 'A' ]-itabx[ compx = 42 ]
下面是一个你可以使用的例子:
TYPES: BEGIN OF ty_structure,
connid TYPE c LENGTH 4,
END OF ty_structure,
ty_table TYPE STANDARD TABLE OF ty_structure WITH EMPTY KEY,
BEGIN OF ty_structure_2,
carrid TYPE c LENGTH 2,
table TYPE ty_table,
END OF ty_structure_2,
ty_table_2 TYPE STANDARD TABLE OF ty_structure_2 WITH EMPTY KEY,
ty_table_3 TYPE STANDARD TABLE OF ty_table_2 WITH EMPTY KEY.
DATA(lt) = VALUE ty_table_3( ( VALUE #( ( carrid = 'LH' table = VALUE #( ( connid = '2407' ) ) ) ) ) ).
DATA(structure) = lt[ 1 ][ carrid = 'LH' ]-table[ connid = '2407' ].