2

我有一个结构组件的字段符号:

ASSIGN COMPONENT lv_field_name OF STRUCTURE ls_structure TO <lv_data>.
IF sy-subrc = 0.
  WRITE <lv_data> TO lv_field_value.
ENDIF.

问题:如果<lv_data>是类型CURR的结果WRITE...可能是错误的。

<lv_data>对包含货币符号的字段的引用(如“EUR”)。在我的例子中,我们可以假设引用的货币字段具有相同的结构。

有没有一种抽象的方法来获取参考的货币价值,<lv_data>这样我就可以写出类似的东西

WRITE <lv_data> TO lv_field_value CURRENCY <lv_currency>.

我查看了类cl_abap_typedescr和子类,但没有发现任何可以用来分配的东西<lv_currency>

4

1 回答 1

3

该类cl_abap_structdescr有一个get_ddic_field_list返回结构表的方法DFIES。字段REFTABLEREFFIELD包含相应字段的货币或单位的参考字段的名称。

DATA(lo_structdescr) = CAST cl_abap_structdescr( cl_abap_typedescr=>describe_by_data( ls_structure ) ).
DATA(lt_ddic_fields) = lo_structdescr->get_ddic_field_list( ).

DATA(ls_ddic_info) = lt_ddic_fields[ fieldname = lv_field_name ].
ASSIGN COMPONENT lv_field_name OF STRUCTURE ls_structure TO FIELD-SYMBOL(<lv_data>).
ASSIGN COMPONENT ls_ddic_info-reffield OF STRUCTURE ls_structure TO FIELD-SYMBOL(<lv_currency>).

WRITE <lv_data> CURRENCY <lv_currency>.

警告:此代码假定货币字段与值字段具有相同的结构。这并非总是如此!有可能ls_ddic_info-reftable提到不同的结构。在这种情况下,它会变得复杂得多。您需要找到与您的结构相对应的表条目(可能来自数据库)并从那里检索货币字段。

于 2021-07-30T10:07:19.470 回答