二维码

[fmalv] REUSE_ALV_FIELDCATALOG_MERGE函数用法

Twilight发表于 2014-02-04 12:02Twilight 最后回复于 2014-02-04 12:02 [复制链接] 4347 0

ALV的调用主要由以下几个标准函数实现,所有函数的输入输出参数必须大写,否则系统会出现异常中止

REUSE_ALV_FIENDCATALOG_MERGE:根据内表结构返回FIELDCAT字段结构信息,其常用输入输出参数如下:
EXPORTING项:
      1.I_PROGRAM_NAME:程序名称。
      2.I_INTERNAL_TABNAME:内表名称,必须为输出内表所自定义的STRUCTURE名。
      3.I_STRUCTURE_NAME:直接参考数据字典中所定义的透明表名或STRUCTURE名。
      函数定义时I_INTERNAL_TABNAME或I_STRUCTURE_NAME参数只需一项。
CHANGING项:
   CT_FIELDCAT:导出FIELDCAT内表数据。

注意:REUSE_ALV_FIENDCATALOG_MERGE函数不能与REUSE_ALV_GRID_DISPLAY_LVC连用,因为IT_FIELDCAT的类型不一样,能与REUSE_ALV_GRID_DISPLAY连用

最终运行结果如下:
REUSE_ALV_FIELDCATALOG_MERGE.jpg

主程序代码:
  1. REPORT  ZDEMON_015.
  2. *ALV START
  3. TYPE-POOLS:SLIS. "调用该类型池

  4. *定义FIELDCAT与LAYOUT
  5. DATA:FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
  6.       LAYOUT TYPE SLIS_LAYOUT_ALV,
  7.       W_REPID LIKE SY-REPID.

  8. TABLES:SPFLI.
  9. DATA:LSPFLI LIKE STANDARD TABLE OF SPFLI WITH HEADER LINE.

  10. *屏幕开始事件
  11. START-OF-SELECTION.
  12.   PERFORM GETDATA.
  13.   PERFORM CATALOG.
  14.   PERFORM ALVSHOW.


  15. *The Function Of GETDATA
  16. FORM GETDATA.
  17.   SELECT * FROM SPFLI INTO CORRESPONDING FIELDS OF TABLE LSPFLI.
  18. ENDFORM.                    "GETDATA


  19. *FORM CATALOG 根据结构体获取FIELDCAT
  20. FORM CATALOG.
  21.   W_REPID = SY-REPID.
  22.   CLEAR FIELDCAT.
  23.   CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
  24.     EXPORTING
  25.       I_PROGRAM_NAME         = W_REPID
  26. *I_INTERNAL_TABNAME           =
  27.       I_STRUCTURE_NAME       = 'SPFLI'
  28. *I_CLIENT_NEVER_DISPLAY       = 'X'
  29. *I_INCLNAME                   =
  30. *I_BYPASSING_BUFFER           =
  31. *I_BUFFER_ACTIVE              =
  32.     CHANGING
  33.       CT_FIELDCAT            = FIELDCAT[] "导出FIELDCAT内表数据
  34.     EXCEPTIONS
  35.       INCONSISTENT_INTERFACE = 1
  36.       PROGRAM_ERROR          = 2
  37.       OTHERS                 = 3.
  38.   IF SY-SUBRC <> 0.
  39.     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  40.       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  41.   ENDIF.

  42.   "对fieldcat属性的修改
  43. *READ TABLE fieldCat INDEX 2. "将第二列设为热点显示
  44. *fieldCat-HOTSPOT = 'X'.
  45. *MODIFY fieldCat INDEX 2.
  46. *
  47. *READ TABLE fieldCat INDEX 4. "将第四列设为KEY值字段
  48. *fieldCat-KEY = 'X'.
  49. *MODIFY fieldCat INDEX 4.
  50. *
  51. *READ TABLE fieldCat INDEX 5. "将第五列设为CHECKBOX
  52. *fieldCat-CHECKBOX = 'X'.
  53. *MODIFY fieldCat INDEX 5.
  54.   LAYOUT-COLWIDTH_OPTIMIZE = 'X'. "设置LAYOUT输出格式最优化
  55. ENDFORM.                    "CATALOG



  56. *The Function Of Show ALV
  57. FORM ALVSHOW.
  58.   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  59.     EXPORTING
  60.       I_CALLBACK_PROGRAM = W_REPID
  61.       I_GRID_TITLE       = 'ALV REPORT TEST'"ALV显示标题
  62.       IS_LAYOUT          = LAYOUT
  63.       IT_FIELDCAT        = FIELDCAT[]
  64.     TABLES
  65.       T_OUTTAB           = LSPFLI
  66.     EXCEPTIONS
  67.       PROGRAM_ERROR      = 1
  68.       OTHERS             = 2.
  69.   IF SY-SUBRC <> 0.
  70.     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  71.        WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  72.   ENDIF.
  73. ENDFORM.                    "ALVSHOW
复制代码


错误排查:
  有的时候写好代码调用 REUSE_ALV_FIELDCATALOG_MERGE 时会莫名的出错提示为 READ_REPORT_LINE_TOO_LONG 下面列出的错误信息有这么一句.
  The internal table "/FUNCTION=K_KKB_FIELDCAT_MERGE/DATA=L_ABAP_SOURCE[]" is 72
     characters wide. The program line is 99 characters wide.
   该FM会把整个程序代码拷贝至其内表中,如果程序的行超过72个字符,即报如上错误。可以做以下设置。
72VLINE.jpg
72vlinesetting.jpg
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表