我有一个结构组件的字段符号:
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
的表。REFTABLE
和REFFIELD
字段包含对应字段的货币或单位的引用字段的名称。
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
可能提到了一个不同的结构。在这种情况下,事情就复杂多了。您需要找到该表中与您的结构(可能来自数据库)相对应的条目,并从中检索货币字段。