获取货币字段符号引用的货币符号

问题描述

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

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>内容

解决方法

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 可能提到了不同的结构。在这种情况下,它会变得更加复杂。您需要找到与您的结构对应的表的条目(可能来自数据库)并从那里检索货币字段。