SAP ALV字段动态展示代码实现

  DATA: r_tabdescr TYPE REF TO cl_abap_structdescr.
  DATA: wa_field TYPE dfies,
        t_dfies  TYPE  ddfields.
  DATA: gt_fieldcat  TYPE lvc_t_fcat,
        gs_fieldcat  TYPE lvc_s_fcat,
  FIELD-SYMBOLS:<gt_out> TYPE STANDARD TABLE,
                <gs_out> TYPE any,
                <fs1>    TYPE any.

  r_tabdescr ?= cl_abap_structdescr=>describe_by_data( ztpp0003 ). "获取原结构字段
  CALL METHOD cl_salv_data_descr=>read_structdescr
    EXPORTING
      r_structdescr = r_tabdescr
    RECEIVING
      t_dfies       = t_dfies.

  "加入动态字段
  LOOP AT gt_ztpp0003 INTO DATA(gs_ztpp0003).
    CLEAR gs_fieldcat.
    gs_fieldcat-fieldname = 'Z' && gs_ztpp0003-pdatu.
    gs_fieldcat-scrtext_l =  gs_ztpp0003-pdatu.
    gs_fieldcat-outputlen = 6.
    APPEND gs_fieldcat TO gt_fieldcat2.
  ENDLOOP.

 "加入原结构字段
 LOOP AT t_dfies INTO wa_field.
    CLEAR gs_fieldcat.
    MOVE-CORRESPONDING wa_field TO gs_fieldcat.
    gs_fieldcat-coltext = gs_fieldcat-scrtext_m.
    APPEND gs_fieldcat TO gt_fieldcat.
  ENDLOOP.

 "创建动态内表
  DATA: dy_table TYPE REF TO data.
  DATA: dy_str TYPE REF TO data.
  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>.
  
  "创建动态内表的工作区
  CREATE DATA dy_str LIKE LINE OF <gt_out>.
  ASSIGN dy_str->* TO  <gs_out>.

  "处理字段
  DATA:lv_str TYPE string.
  LOOP AT gt_ztpp0003 INTO gs_ztpp0003.

    CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'  去前导零
      EXPORTING
        input  = gs_ztpp0003-matnr
      IMPORTING
        output = gs_ztpp0003-matnr.

    MOVE-CORRESPONDING gs_ztpp0003 TO <gs_out>.
    lv_str = 'Z' && gs_ztpp0003-pdatu.   
    ASSIGN COMPONENT lv_str OF STRUCTURE <gs_out> TO <fs1>. "动态字段
    <fs1> = gs_ztpp0003-plnmg.

    AT END OF matnr.
      APPEND <gs_out> TO <gt_out>.
      CLEAR <gs_out>.
    ENDAT.
  ENDLOOP.

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值