微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

循环进入动态字段名

如何解决循环进入动态字段名

问题:我有2张这样的桌子:

表1:具有许多列和行的HR表

表2: 表,其中包含我需要从表1中读取的列的列表

MY TABLES IMAGE

在表1中,我需要循环所有行,并且需要检查表2中的所有字段,如果该字段中有“ X”,则需要从表2中打印字段描述。

我尝试使用嵌套循环(循环表1和每个循环迭代循环表2并检查行的所有字段)进行操作,但我无法在表上使用变量-(我需要在循环中使用变量)

我的代码

LOOP AT lt_hrp9229  INTO ls_hrp9229 
  LOOP AT lt_otype_fields INTO ls_otype_fields .
   IF ls_hrp9229-ls_otype_fields-FIELD_NAME = 'X'.
    ev_descript_data = ev_descript_data && ','  &&  ls_otype_fields-Field_description.
   ENDIF.
 ENDLOOP.
ENDLOOP.

在这一行有问题:

IF ls_hrp9229-ls_otype_fields-FIELD_NAME = 'X'

我无法在循环中使用动态字段名称

谢谢。

解决方法

您可以使用以下代码:

FIELD-SYMBOLS <l_flag> TYPE FLAG.

ASSIGN COMPONENT ls_otype_fields-field_name OF STRUCTURE ls_hrp9229 TO <l_flag>.
IF SY-SUBRC = 0 AND <l_flag> = abap_true.
  ...
ENDIF.
,

使用类似这样的内容:

DATA: lt_hrp9229 TYPE TABLE OF HRP9229.
DATA: ev_descript_data TYPE string.

SELECT *
  FROM dd03l
  INTO TABLE @DATA(lt_otype_fields)
  WHERE tabname = 'HRP9229'.

LOOP AT lt_hrp9229 ASSIGNING FIELD-SYMBOL(<fs_9229>).
  LOOP AT lt_otype_fields ASSIGNING FIELD-SYMBOL(<fs_fields>).
    ASSIGN COMPONENT <fs_fields>-fieldname OF STRUCTURE <fs_9229> TO FIELD-SYMBOL(<field_description>).
    CHECK sy-subrc = 0.
   IF <field_description> = 'OBJID'.
    ev_descript_data = ev_descript_data && ','  && <fs_fields>-rollname. " pull your FIELD_DESC here instead 
   ENDIF.
 ENDLOOP.
ENDLOOP.
,

我使用FIeld-Symbol解决了这个问题。

 LOOP AT lt_hrp9229 INTO ls_hrp9229.
      lv_index = sy-tabix.
      LOOP AT lt_s_fields INTO ls_s_fields.
        ASSIGN COMPONENT ls_s_fields-field_name OF STRUCTURE ls_hrp9229
        TO FIELD-SYMBOL(<ls_s_fields_value>).

        IF <ls_s_fields_value> = 'X'.
          ev_descript_data = ev_descript_data && ','  && ls_s_fields-field_desc  .
        ENDIF.
      ENDLOOP.
      ls_et_hrp9229-descript_data = ev_descript_data.
      MODIFY et_hrp9229 INDEX lv_index FROM ls_et_hrp9229 TRANSPORTING descript_data .
      CLEAR ev_descript_data.
    ENDLOOP.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。