SAP ABAP 动态向结构中添加字段

需求描述:在程序中动态地向内表添加字段,并用alv展示展示出来。

发布日期:20250218

主要逻辑分为3个部分:
1.根据现有结构生成字段列表。
2.向字段列表中动态添加字段。
3.根据添加后的字段列表生成内表。
最后向内表写数据就行啦。

详细代码如下,粘贴可用。

  REPORT zmm_rpt_538_wu5.

  DATA:gs_main TYPE ztmm_152_log.

  DATA: r_tabdescr TYPE REF TO cl_abap_structdescr.
  DATA: wa_field TYPE dfies,
        t_dfies  TYPE  ddfields.
  DATA: gs_fieldcat TYPE lvc_s_fcat,
        gt_fieldcat TYPE lvc_t_fcat,
        gs_layout   TYPE lvc_s_layo.
  DATA: dy_table TYPE REF TO data.
  FIELD-SYMBOLS:<gt_out> TYPE STANDARD TABLE.

*根据结构gs_main生成字段列表并整理至gt_fieldcat
  r_tabdescr ?= cl_abap_structdescr=>describe_by_data( gs_main ).
  CALL METHOD cl_salv_data_descr=>read_structdescr
    EXPORTING
      r_structdescr = r_tabdescr
    RECEIVING
      t_dfies       = t_dfies.
  LOOP AT t_dfies INTO wa_field.
    CLEAR gs_fieldcat.
    MOVE-CORRESPONDING wa_field TO gs_fieldcat.
    gs_fieldcat-coltext = gs_fieldcat-scrtext_m.
    IF gs_fieldcat-inttype = 'P'.
      gs_fieldcat-intlen = 23.
    ENDIF.
    APPEND gs_fieldcat TO gt_fieldcat.
  ENDLOOP.

* 根据周期生成字段
  DO 5 TIMES.
    CLEAR: gs_fieldcat.
    gs_fieldcat-fieldname = 'REQ_QTY' && sy-index.
    gs_fieldcat-coltext = '需求' && sy-index.
    gs_fieldcat-inttype = 'P'.
    gs_fieldcat-intlen = 23.
    gs_fieldcat-decimals = 3.
    APPEND gs_fieldcat TO gt_fieldcat.

    gs_fieldcat-fieldname = 'DATE' && sy-index.
    gs_fieldcat-coltext = '日期' && sy-index.
    gs_fieldcat-inttype = 'C'.
    gs_fieldcat-intlen = 16.
    APPEND gs_fieldcat TO gt_fieldcat.
  ENDDO.

*根据字段清单创建内表
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = gt_fieldcat
    IMPORTING
      ep_table        = dy_table.

  ASSIGN dy_table->* TO <gt_out>.

  gs_layout-sel_mode   = 'A'.
  gs_layout-zebra      = 'X'.
  gs_layout-cwidth_opt = 'X'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program = sy-cprog
      is_layout_lvc      = gs_layout
      it_fieldcat_lvc    = gt_fieldcat
    TABLES
      t_outtab           = <gt_out>
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.

最后看一下输出效果。成功添加了字段。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值