轉ABAP將內表行列轉換實例(動態內表) .


把內表的行列轉換,網上的例子很多,但是新人想看懂,幾乎很難,所以總結下我是怎么完成的。

 

比如:你的內表如圖:

你想讓內表最后展示成這樣:如圖:

那么完成之后會是這樣:

 

完成這個過程,得用到動態內表。看代碼:

DATA:BEGIN OF itab8 OCCURS 0,
     bezei       LIKE zchannel-bezei,         "銷售辦事處
     zdate       LIKE zchannel-zdate,         "日期
     salesamount LIKE zchannel-salesamount,   "總額
  END OF itab8.

 

先排序:

  SORT itab8 BY bezei zdate DESCENDING.

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

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

下面構建動態內表結構

  DATA: dy_table TYPE REF TO data,
        dy_wa TYPE REF TO data,
        it_str TYPE lvc_t_fcat,  "是Table Type
        wa_str TYPE lvc_s_fcat.  "是一個Structure  用於存儲即將構建的動態內表結構

  FIELD-SYMBOLS: <dyn_table> TYPE table,  "是一個標志,可以理解為一個指針,將來創建的內表就要通過它們來訪問
                 <dyn_wa> TYPE ANY,
                 <FS> TYPE ANY.

  wa_str-fieldname = 'BEZEI'.
  wa_str-col_pos = 1.
  wa_str-inttype = 'CHAR'.
  wa_str-intlen = 20.
  APPEND wa_str TO it_str.
  CLEAR wa_str.

  wa_str-fieldname = 'SELFI'.
  wa_str-col_pos = 1.
  wa_str-inttype = 'CHAR'.
  wa_str-intlen = 20.
  APPEND wa_str TO it_str.
  CLEAR wa_str.


  REFRESH fieldcat.
  PERFORM input_fieldcat  USING 'BEZEI'  '銷售辦事處'  ''  '' '' '' ''.

  LOOP AT TDATE.
        wa_str-fieldname = TDATE.
        wa_str-col_pos = 1.
        wa_str-inttype = 'CHAR'.
        wa_str-intlen = 20.
        APPEND wa_str TO it_str.
        CLEAR wa_str.
     PERFORM input_fieldcat  USING TDATE  TDATE  ''  '' '' '' ''.
  ENDLOOP.

*此方法用於構建動態內表,輸入=構建的結構,輸出=dy_table
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = it_str
    IMPORTING
      ep_table        = dy_table.

  ASSIGN dy_table->* TO <dyn_table>.
  CREATE DATA dy_wa LIKE LINE OF <dyn_table>.
  ASSIGN dy_wa->* TO <dyn_wa>.

下面往結構里寫數

   DATA FIELDNAME(20).
   LOOP AT ITAB8.
      ASSIGN COMPONENT 'BEZEI' OF STRUCTURE <dyn_wa> TO <FS>.  "分配結構里的銷售辦事處,用FS字段 指向它
<FS> = ITAB8-BEZEI. FIELDNAME = ITAB8-ZDATE. "這里把日期類型定義為char型,因為用DATS報錯。 ASSIGN COMPONENT FIELDNAME OF STRUCTURE <dyn_wa> TO <FS>. "分配結構的日期,將FS指向它 <FS> = ITAB8-SALESAMOUNT. AT END OF BEZEI. APPEND <dyn_wa> TO <dyn_table>. ENDAT. ENDLOOP.

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM