您的位置:首页 > 其它

ALV动态列内表实现Demo

2015-12-30 14:32 288 查看
开发财务报表或者一些预测数据的报表时,经常会有动态显示列的情况。

这里转摘贴吧上的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个动态列



输出效果为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: