ALV动态列内表实现

【博主SAP/ABAP交流群53144545

ALV输出里有时会碰到输出列事先无法确定的情况,这时会需要用到动态内表的方法。

以下程序实现从VBAK表中取得若干VBELN销售订单号,然后把这些销售订单号作为列输出,其中有多少VBELN是从屏幕上由用户选择的。

只列举跟动态有关的部分代码:


* 动态内表定义部分
DATA DYN_TABLE    TYPE REF TO DATA,
 DATA  DYN_LINE     TYPE REF TO DATA.

FIELD-SYMBOLS <IT_DYN> TYPE STANDARD TABLE,
FIELD-SYMBOLS <WA_DYN> TYPE ANY.

 

* 从屏幕选择VBELN

  SELECT VBELN
    FROM VBAK
    INTO CORRESPONDING FIELDS OF TABLE IT_TAB
   WHERE VBELN IN S_VBELN.

 

* 往FIELDCAT内表填数据

  SORT IT_TAB BY VBELN ASCENDING.
  DESCRIBE TABLE IT_TAB LINES G_LINES.

  DO G_LINES TIMES.
    CONCATENATE 'VBELN' G_NO INTO L_VBELN. ”为字段取名VBELN01, VBELN02,VBELN03…

    L_TABNAME = L_VBELN. "为字段标签取名VBELN01, VBELN02,VBELN03…
    PERFORM FILL_ALV_FLIELCAT_SUB USING L_VBELN L_TABNAME L_POS L_OUTLEN '' '' '' ''. "此FORM为APPEND数据到FLIELCAT,具体内容此处省略
    G_NO = G_NO + 1.
  ENDDO.


* 根据FLIELCAT创建动态内表(类似做转置)

  CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
    EXPORTING
      IT_FIELDCATALOG           = IT_FIELDCAT
    IMPORTING
      EP_TABLE                  = DYN_TABLE
    EXCEPTIONS
      GENERATE_SUBPOOL_DIR_FULL = 1
      OTHERS                    = 2.

* Internal Table
  ASSIGN DYN_TABLE->* TO <IT_DYN>.”动态内表的FS

* Line Structure
  CREATE DATA DYN_LINE LIKE LINE OF <IT_DYN>.
  ASSIGN DYN_LINE->* TO <WA_DYN>.”动态内表行的FS

 

* 根据IT_TAB的内容为动态内表IT_DYN赋值

  LOOP AT IT_TAB ASSIGNING <WA_TAB>.
    CONCATENATE 'VBELN' G_NO INTO L_VBELN. ”像之前那样拼接字段
    ASSIGN COMPONENT L_VBELN OF STRUCTURE <WA_DYN> TO <FS1>.
    <FS1> = <WA_TAB>-VBELN.
    G_NO = G_NO + 1.
  ENDLOOP.
  APPEND <WA_DYN> TO <IT_DYN>.

 

输出结果:



此程序实现了一个最基本的ALV动态列输出,如果有更复杂的要求,比如说从VBAP中取得VBELN和MATNR,统计同一VBELN的MATNR数量,并以VBELN,MATNR01,MATNR02,MATNR03...的方式列输出,则取值和赋值逻辑会更加复杂,不过实现原理依然是一样的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值