ALV動態列內表實現Demo

開發財務報表或者一些預測數據的報表時,經常會有動態顯示列的情況。

 這裏轉摘貼吧上的ALV動態顯示列的Demo,可做學習用。

REPORT  yiris_dynamic_alv_demo.
DATA: wa_layo TYPE lvc_s_layo,
      wa_fcat TYPE lvc_s_fcat,
      it_fcat TYPE lvc_t_fcat.
DATA: it_scol TYPE lvc_t_scol.
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
               <dyn_wa>,  <dyn_field>.
DATA: dy_table TYPE REF TO data,
      dy_line  TYPE REF TO data.

DATA: colname(10), index(2).

PARAMETERS: col TYPE i. "列 數

CLEAR: it_fcat.
*1)根 據 條 件 動 態 生 成 列
DO col TIMES.
  index = index + 1.
  CONCATENATE 'COL' index INTO colname.
  PERFORM frm_add_fact USING colname 'C' '描述' '100'.
ENDDO.
*2)根 據 it_fcat 生 成 動 態 內 表
CALL METHOD cl_alv_table_create=>create_dynamic_table
  EXPORTING
    it_fieldcatalog = it_fcat
  IMPORTING
    ep_table        = dy_table.
*如 果 定 義 時 沒 有 指 定 類 型 或 者 結 構 ,那 麼 REF 必 須 ASSIGN
*到 另 外 一 個 FS 裏 間 接 使 用
ASSIGN dy_table->* TO <dyn_table>.
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
*3)給 表 字 段 賦 值
CLEAR: index.
DO col TIMES.
  index = index + 1.
  CONCATENATE 'COL' index INTO colname.
  ASSIGN COMPONENT colname OF STRUCTURE <dyn_wa> TO <dyn_field>.
  <dyn_field> = '列數據1'.
ENDDO.
APPEND <dyn_wa> TO <dyn_table>.
*4)給 內 表 裝 入 第 二 條 數 據
CLEAR: index.
DO col TIMES.
  index = index + 1.
  CONCATENATE 'COL' index INTO colname.
  ASSIGN COMPONENT colname OF STRUCTURE <dyn_wa> TO <dyn_field>.
  <dyn_field> = '列數據2'.
ENDDO.
APPEND <dyn_wa> TO <dyn_table>.

CLEAR: wa_layo.
wa_layo-zebra = 'X'.
wa_layo-cwidth_opt = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  EXPORTING
    i_callback_program = sy-repid
    is_layout_lvc      = wa_layo
    it_fieldcat_lvc    = it_fcat
  TABLES
    t_outtab           = <dyn_table>
  EXCEPTIONS
    program_error      = 1
    OTHERS             = 2.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.


FORM frm_add_fact  USING value1 value2 value3 value4.
  wa_fcat-fieldname = value1.
  wa_fcat-inttype = value2.
  wa_fcat-reptext = value3.
  wa_fcat-intlen  = value4.
  APPEND wa_fcat TO it_fcat.
  CLEAR: wa_fcat.
ENDFORM.                    " frm_add_fact


 

比如在選擇屏幕上設定顯示4個動態列

輸出效果爲:

發佈了176 篇原創文章 · 獲贊 13 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章