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

时间:2020-05-12 06:35:10

标签: sql field abap corresponding-records

我有一个问题,所以我有一个巨大的表,其中某些字段仅包含1到20之间的数字,并且我想将这些字段的值移到一个新表中,该表中有3个带有名称和数字( zjdc01或zadc01)。

现在,我要检查巨大表中的字段值,并将这些值附加到新字段中。

例如:

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是否对此有所帮助。

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

1 个答案:

答案 0 :(得分:1)

使用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.
相关问题