zoukankan      html  css  js  c++  java
  • 转载: 内表行列转换 -- 动态内表结构

    把内表的行列转换,网上的例子很多,但是新人想看懂,几乎很难,所以总结下我是怎么完成的。

    比如:你的内表如图:

    你想让内表最后展示成这样:如图:

    那么完成之后会是这样:

    完成这个过程,得用到动态内表。看代码:

    [plain] view plaincopy

    1. DATA:BEGIN OF itab8 OCCURS 0, 
    2.      bezei       LIKE zchannel-bezei,         "销售办事处 
    3.      zdate       LIKE zchannel-zdate,         "日期 
    4.      salesamount LIKE zchannel-salesamount,   "总额 
    5.   END OF itab8. 

    先排序:

    [plain] view plaincopy

    1. SORT itab8 BY bezei zdate DESCENDING. 

    要以日期作为列,得先取得唯一的日期。

    [plain] view plaincopy

    1. DATA TDATE LIKE SY-DATUM OCCURS 0 WITH HEADER LINE. 
    2. LOOP AT itab8. 
    3.     TDATE = ITAB8-ZDATE. 
    4.     COLLECT TDATE. 
    5.   ENDLOOP. 

    下面构建动态内表结构

    [plain] view plaincopy

    1.   DATA: dy_table TYPE REF TO data, 
    2.         dy_wa TYPE REF TO data, 
    3.         it_str TYPE lvc_t_fcat,  "是Table Type 
    4.         wa_str TYPE lvc_s_fcat.  "是一个Structure  用于存储即将构建的动态内表结构 
    5.   FIELD-SYMBOLS: <dyn_table> TYPE table,  "是一个标志,可以理解为一个指针,将来创建的内表就要通过它们来访问 
    6.                  <dyn_wa> TYPE ANY, 
    7.                  <FS> TYPE ANY. 
    8.   wa_str-fieldname = 'BEZEI'. 
    9.   wa_str-col_pos = 1. 
    10.   wa_str-inttype = 'CHAR'. 
    11.   wa_str-intlen = 20. 
    12.   APPEND wa_str TO it_str. 
    13.   CLEAR wa_str. 
    14.   wa_str-fieldname = 'SELFI'. 
    15.   wa_str-col_pos = 1. 
    16.   wa_str-inttype = 'CHAR'. 
    17.   wa_str-intlen = 20. 
    18.   APPEND wa_str TO it_str. 
    19.   CLEAR wa_str. 
    20.   REFRESH fieldcat. 
    21.   PERFORM input_fieldcat  USING 'BEZEI'  '销售办事处'  ''  '' '' '' ''. 
    22.   LOOP AT TDATE. 
    23.         wa_str-fieldname = TDATE. 
    24.         wa_str-col_pos = 1. 
    25.         wa_str-inttype = 'CHAR'. 
    26.         wa_str-intlen = 20. 
    27.         APPEND wa_str TO it_str. 
    28.         CLEAR wa_str. 
    29.      PERFORM input_fieldcat  USING TDATE  TDATE  ''  '' '' '' ''. 
    30.   ENDLOOP. 
    31. *此方法用于构建动态内表,输入=构建的结构,输出=dy_table 
    32.   CALL METHOD cl_alv_table_create=>create_dynamic_table 
    33.     EXPORTING 
    34.       it_fieldcatalog = it_str 
    35.     IMPORTING 
    36.       ep_table        = dy_table. 
    37.   ASSIGN dy_table->* TO <dyn_table>. 
    38.   CREATE DATA dy_wa LIKE LINE OF <dyn_table>. 
    39.   ASSIGN dy_wa->* TO <dyn_wa>. 

    下面往结构里写数

    DATA FIELDNAME(20). 

    1. LOOP AT ITAB8. 
    2.    ASSIGN COMPONENT 'BEZEI' OF STRUCTURE <dyn_wa> TO <FS>.  "<span style="color: rgb(128, 128, 128); font-family: 微软雅黑; font-size: 10pt;">分配结构里的销售办事处,用FS字段 指向它</span>  
      注sophy: 这里就是为什么要用到reference。如果直接用field symbol这里会报错说没有这个component。现在用reference,在前面执行到的时候有create data这里在运行时根据 like line of <kyn_table> 动态赋予了表结构。
    3.    <FS> = ITAB8-BEZEI.    
    4.    FIELDNAME = ITAB8-ZDATE. "这里把日期类型定义为char型,因为用DATS报错。 
    5.    ASSIGN COMPONENT FIELDNAME OF STRUCTURE <dyn_wa> TO <FS>. "分配结构的日期,将FS指向它 
    6.    <FS> = ITAB8-SALESAMOUNT. 
    7.    AT END OF BEZEI. 
    8.       APPEND <dyn_wa> TO <dyn_table>. 
    9.    ENDAT. 
    10. ENDLOOP. 
  • 相关阅读:
    图片懒加载技术
    验证码处理
    基于requests模块的cookie,session和线程池爬取
    最快理解
    Golang
    Django REST framework
    Django REST framework
    Django
    Django
    搭建邮件服务器 Postfix + Dovecot (CentOS)
  • 原文地址:https://www.cnblogs.com/sophyzhu/p/3502969.html
Copyright © 2011-2022 走看看