为内表动态添加字段

16 篇文章 1 订阅

    有时内表部分字段是明确的,部分字段需要在运行时动态添加。
    1.先把明确固定的字段声明一个结构,注意字段参照数据元素,或数据字典中的字段。如:
    DATA:BEGIN OF gs_main1,
       werks       LIKE marc-werks,
       matnr       LIKE mara-matnr,
       matne       LIKE mara-matnr,
       maktx       LIKE makt-maktx,
       groes       LIKE mara-groes,
       zzprd       LIKE mara-zzprd,
       mfrpn       LIKE mara-mfrpn,
       meins       LIKE mara-meins,
       plifz       LIKE marc-plifz,
       mtart       LIKE mara-mtart,
       mtbez       LIKE t134t-mtbez,
       lifnr       LIKE lfa1-lifnr,
       lifnr_name1 LIKE lfa1-name1,
       alpgr       LIKE stpo-alpgr,
       alprf       LIKE stpo-alprf,
       plnmg       TYPE pbed-plnmg,  "总需求
       labst       TYPE mard-labst,  "总库存
       enmng       TYPE resb-enmng,  "总在制数量
       bstmg       TYPE ekpo-menge.  "总未交货数量
   DATA  END OF gs_main1.
   2. 根据以上结构生成字段列表:
   
  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.
 
  r_tabdescr ?= cl_abap_structdescr=>describe_by_data( gs_main1 ).
  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.

* 根据周期生成字段:周期在运行是才能确定
  SORT gt_week.
  LOOP AT gt_week.
    CLEAR gs_fieldcat.
    gs_fieldcat-fieldname = 'F' && gt_week.
    gs_fieldcat-coltext = gt_week && '周'.
    gs_fieldcat-inttype = 'P'.
    gs_fieldcat-intlen = 23.
    gs_fieldcat-decimals = 3.
    APPEND gs_fieldcat TO gt_fieldcat.
  ENDLOOP.
  
  3. 根据字段清单创建内表
  DATA: dy_table TYPE REF TO data.
  FIELD-SYMBOLS:<gt_out> TYPE STANDARD TABLE.
  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>.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值