如何通过动态确定表字段来获得循环中的值?



在SAP中有一个表T552A。有几个字段,如TPR, TTP, FTK, VAR, KNF每月每天如TPR01, TPR02等。

在循环中,我希望通过动态确定表字段来访问上述字段,而不是硬编码字段名称,如下所示:

DATA: ld_begda LIKE sy-datum,
ld_endda LIKE sy-datum.
DATA: lc_day(2) TYPE c.
DATA: lc_field(10) TYPE c.
DATA: lc_value TYPE i.
ld_begda = sy-datum.
ld_endda = ld_begda + 30.
WHILE ld_begda <= ld_endda.
lc_day = ld_begda+6(2).
CONCATENATE 't552a-tpr' lc_day INTO lc_field.
lc_value = &lc_field.   " Need support at this point.

ld_begda = ld_begda + 1.
ENDWHILE.

像这样(取决于确切的需求):

FIELD-SYMBOLS: <lv_tpr> TYPE tprog.  
DATA: ls_t552a TYPE t552a.
DATA: lv_field TYPE fieldname.
WHILE ld_begda <= ld_endda.
lv_field = |TPR| && ld_begda+6(2).  "Dynamic field name
ASSIGN COMPONENT lv_field
OF STRUCTURE ls_t552a
TO <lv_tpr>.
IF sy-subrc EQ 0.
... "<lv_tpr> has now the value of the corresponding field
ENDIF.
ld_begda = ld_begda + 1.
ENDWHILE.

要存储动态字段的结果,需要一个可以存储任意类型值的变量,在ABAP中,这是通过字段符号来支持的。然后可以用ASSIGN COMPONENT:

将结构的一个组件(即表的一行)分配给一个字段符号。
ASSIGN COMPONENT lc_field OF STRUCTURE row_of_table TO FIELD-SYMBOL(<value>).
" work with <value> here

最近引入了新的泛型表达式(现在也支持结构),它允许你这样写(迟早):

... row_of_table-(lc_field) ...

最新更新