访问在 运行 时间动态选择的任何结构字段

Access any structure field chosen dynamically at run time

我有一个问题,所以我有一个巨大的 table,其中一些字段只包含 1-20 之间的数字,我想将这些字段的值移动到一个新的 table 那里是 3 个带有名称和编号的字段(zjdc01 或 zadc01)。

现在我想检查巨大 table 中的字段值并将值附加到新字段。

例如:

CASE LS_ATLAS_DC-ZJDC01.
    WHEN 1.
      LS_ATLAS-ZJDC01 = LS_ATLAS_DC-ZJDC01.
      LS_ATLAS-ZADC01 = LS_ATLAS_DC-ZADC01.
      LS_ATLAS-ZBDC01 = LS_ATLAS_DC-ZBDC01.
    WHEN 2.
      LS_ATLAS-ZJDC02 = LS_ATLAS_DC-ZJDC01.
      LS_ATLAS-ZADC02 = LS_ATLAS_DC-ZADC01.
      LS_ATLAS-ZBDC02 = LS_ATLAS_DC-ZBDC01.
    WHEN 3.
      LS_ATLAS-ZJDC03 = LS_ATLAS_DC-ZJDC01.
      LS_ATLAS-ZADC03 = LS_ATLAS_DC-ZADC01.
      LS_ATLAS-ZBDC03 = LS_ATLAS_DC-ZBDC01.
    WHEN 4.
      LS_ATLAS-ZJDC04 = LS_ATLAS_DC-ZJDC01.
      LS_ATLAS-ZADC04 = LS_ATLAS_DC-ZADC01.
      LS_ATLAS-ZBDC04 = LS_ATLAS_DC-ZBDC01.

但这很累人,我认为还有另一种解决方案,但我不知道 ABAP 是否有解决方案。

也许你们中的一些人有解决方案或有他解决的类似问题。

使用ASSIGN COMPONENT name OF STRUCTURE structure TO <field_symbol>.

DATA name TYPE string. " component name
FIELD-SYMBOLS: <zjdc_xx> TYPE any,
               <zadc_xx> TYPE any,
               <zbdc_xx> TYPE any.

IF number BETWEEN 1 and 4.

  name = |ZJDC{ number WIDTH = 2 ALIGN = RIGHT PAD = '0' }|.   "<== ZJDC01 to ZJDC04
  ASSIGN COMPONENT name OF STRUCTURE ls_atlas TO <zjdc_xx>.
  name = |ZADC{ number WIDTH = 2 ALIGN = RIGHT PAD = '0' }|.   "<== ZADC01 to ZADC04
  ASSIGN COMPONENT name OF STRUCTURE ls_atlas TO <zadc_xx>.
  name = |ZBDC{ number WIDTH = 2 ALIGN = RIGHT PAD = '0' }|.   "<== ZBDC01 to ZBDC04
  ASSIGN COMPONENT name OF STRUCTURE ls_atlas TO <zbdc_xx>.

  <zjdc_xx> = LS_ATLAS_DC-ZJDC01.
  <zadc_xx> = LS_ATLAS_DC-ZADC01.
  <zbdc_xx> = LS_ATLAS_DC-ZBDC01.

ENDIF.