动态内表展示

可根据输入的表名,动态获取数据,动态生成ALV。
主要的方法是根据输入的表或结构 获取字段目录生成动态内表。
ALV field也根据函数字段生成 根据条件将取到的数据赋值到动态内表中展示。

在这里插入代码片
*&---------------------------------------------------------------------*
*& Report ZTEST001
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST001.
TABLES: MARA,DD03L.
TYPE-POOLS: SLIS.
DATA: DYN_WA TYPE REF TO DATA.
FIELD-SYMBOLS :
  <DYN_TABLE> TYPE TABLE,
  <DYN_WA>    TYPE ANY,
  <DYN_FIELD> TYPE ANY,
  <FS_STR>    TYPE ANY.
DATA: LI_DFIES_TAB TYPE  TABLE OF DFIES,
      LS_DFIES_TAB TYPE  DFIES.
DATA: LI_X031L TYPE TABLE OF X031L,
      LS_X031L TYPE X031L.
DATA: D_REF      TYPE REF TO DATA,
      LT_ALV_CAT TYPE TABLE OF LVC_S_FCAT,
      LS_ALV_CAT LIKE LINE OF LT_ALV_CAT.
"ALV相关
DATA: I_FIELDCAT  TYPE LVC_T_FCAT,                   "内表-字段属性
      WA_FIELDCAT TYPE LVC_S_FCAT,                   "工作区-字段属性
      WA_LAYOUT   TYPE LVC_S_LAYO.                   "工作区-布局

*&---------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.

SELECT-OPTIONS:
                S_TABLE FOR DD03L-TABNAME  NO-EXTENSION NO INTERVALS.
SELECTION-SCREEN END OF BLOCK B1.
*&---------------------------------*
START-OF-SELECTION.
  CALL FUNCTION 'DDIF_NAMETAB_GET'
    EXPORTING
      TABNAME     = S_TABLE-LOW
      ALL_TYPES   = ' '
      LFIELDNAME  = ' '
      GROUP_NAMES = ' '
*     uclen       = '00'
      STATUS      = 'A'
    TABLES
      X031L_TAB   = LI_X031L
      DFIES_TAB   = LI_DFIES_TAB
    EXCEPTIONS
      NOT_FOUND   = 1
      OTHERS      = 2.
*根据取出的字段目录生成参考字段目录
  LOOP AT LI_DFIES_TAB INTO LS_DFIES_TAB.
    LS_ALV_CAT-FIELDNAME = LS_DFIES_TAB-FIELDNAME.
    LS_ALV_CAT-REF_TABLE = S_TABLE-LOW.
    LS_ALV_CAT-REF_FIELD = LS_DFIES_TAB-FIELDNAME.
    APPEND LS_ALV_CAT TO LT_ALV_CAT.
    CLEAR LS_ALV_CAT.
  ENDLOOP.
  
*创建动态内表
  CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
    EXPORTING
      IT_FIELDCATALOG = LT_ALV_CAT
    IMPORTING
      EP_TABLE        = D_REF.
*    指定生成的内表到字段符号
  ASSIGN D_REF->* TO <DYN_TABLE>.
*    创建动态工作区结构
  CREATE DATA DYN_WA LIKE LINE OF <DYN_TABLE>.
*    创建动态工作区
  ASSIGN DYN_WA->* TO <DYN_WA>.

  SELECT * FROM (S_TABLE-LOW) INTO CORRESPONDING FIELDS OF   TABLE  <DYN_TABLE>.

*-设置alv格式
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      I_STRUCTURE_NAME       = S_TABLE-LOW
    CHANGING
      CT_FIELDCAT            = I_FIELDCAT
    EXCEPTIONS
      INCONSISTENT_INTERFACE = 1
      PROGRAM_ERROR          = 2.

  WA_LAYOUT-CWIDTH_OPT = 'X'.                 "优化列宽设置
  WA_LAYOUT-ZEBRA      = 'X'.                 "斑马线

*-调用ALV
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM      = SY-REPID           "程序名
*     I_CALLBACK_PF_STATUS_SET    = 'FRM_SET_STATUS' "状态
*      I_CALLBACK_USER_COMMAND = 'FRM_USER_COMM' "双击事件
*     I_CALLBACK_HTML_TOP_OF_PAGE = 'FRM_TOP_OF_PAGE' "抬头设置
*     it_sort_lvc             = li_sort
      IS_LAYOUT_LVC           = WA_LAYOUT          "输出格式
      IT_FIELDCAT_LVC         = I_FIELDCAT         "项目名
    TABLES
      T_OUTTAB                = <DYN_TABLE>
    EXCEPTIONS
      PROGRAM_ERROR           = 1
      OTHERS                  = 2.

**GUI
*FORM FRM_SET_STATUS.
*  SET PF-STATUS 'S1000'.
*ENDFORM.
**用户按钮事件
FORM FRM_USER_COMM USING UCOMM LIKE SY-UCOMM
                         SELFIELD TYPE SLIS_SELFIELD.
                         
ENDFORM.
*HTML抬头
FORM FRM_TOP_OF_PAGE USING P_CL_DD TYPE REF TO CL_DD_DOCUMENT..

ENDFORM.
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值