二维码

[fmalv] 一个带有变式的简单ALV Grid程序

Twilight发表于 2014-07-22 10:48Twilight 最后回复于 2014-07-22 10:48 [复制链接] 7340 0

ALV中要搞布局格式,REUSE_ALV_GRID_DISPLAY函数中要启用参数I_SAVE参数,I_SAVE TYPE C。
I_SAVE有4个可选值: I_SAVE= '' --- 不能保存格式;
                              I_SAVE = 'X' --- 保存标准格式;
                              I_SAVE = 'U' --- 保存特定用户格式;
                              I_SAVE = 'A' --- 保存标准格式和特定用户格式。
为了进一步管理布局,则需要启用IS_VARIANT参数,IS_VARIANT  TYPE disvariant。disvariant是系统中预定义的一个结构。
简单的情况,赋值 ls_variant-report = sy-repid.
有3个与ALV布局相关的函数:REUSE_ALV_VARIANT_DEFAULT_GET 读取默认的布局
                                      REUSE_ALV_VARIANT_EXISTENCE 检测指定布局是否存在
                                      REUSE_ALV_VARIANT_F4 显示布局格式选择对话窗。
REUSE_ALV_VARIANT_F4,selection-screen 中用到的alv的变式的F4的处理函数,REUSE_ALV_VARIANT_EXISTENCE,根据屏幕里面填入的variant 来取的layout,REUSE_ALV_VARIANT_DEFAULT_GET 得到default的变式,最后得到的变式关联到REUSE_ALV_GRID_DISPLAY 这个fm 里面的 IS_VARIANT
可参考标准程序:BALVST02_GRID
NOTE:这里的变式指的是alv变式,定义方法:点击lav界面上部的菜单settings->layout->save
          可参考:定义一个ALV Layout Variant变式

程序执行结果:
ALV Grid.png
程序代码:
  1. TABLES : sflight.
  2. TYPE-POOLS : slis.
  3. **INTERNAL TABLE DECLARTION
  4. DATA : wa_sflight TYPE sflight,
  5.        it_sflight TYPE TABLE OF sflight.
  6. **DATA DECLARTION
  7. DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,
  8.       gd_layout    TYPE slis_layout_alv,
  9.       gd_repid     LIKE sy-repid,
  10.       g_save TYPE c VALUE 'X',
  11.       g_variant TYPE disvariant,
  12.       gx_variant TYPE disvariant,
  13.       g_exit TYPE c,
  14.       ispfli TYPE TABLE OF spfli.
  15. * To understand the importance of the following parameter, click here.
  16. **SELECTION SCREEN DETAILS
  17. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-002 .
  18. PARAMETERS: variant LIKE disvariant-variant.
  19. SELECTION-SCREEN END OF BLOCK b1.
  20. **GETTING DEFAULT VARIANT
  21. INITIALIZATION.
  22.   gx_variant-report = sy-repid.
  23.   CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
  24.     EXPORTING
  25.       i_save     = g_save
  26.     CHANGING
  27.       cs_variant = gx_variant
  28.     EXCEPTIONS
  29.       not_found  = 2.
  30.   IF sy-subrc = 0.
  31.     variant = gx_variant-variant.
  32.   ENDIF.
  33. **PERFORM DECLARATIONS
  34. START-OF-SELECTION.
  35.   PERFORM data_retrivel.
  36.   PERFORM build_fieldcatalog.
  37.   PERFORM display_alv_report.

  38. *&---------------------------------------------------------------------*
  39. *&      Form  BUILD_FIELDCATALOG
  40. *&---------------------------------------------------------------------*
  41. *       text
  42. *----------------------------------------------------------------------*
  43. *  -->  p1        text
  44. *  <--  p2        text
  45. *----------------------------------------------------------------------*
  46. FORM build_fieldcatalog .
  47.   fieldcatalog-fieldname   = 'CARRID'.
  48.   fieldcatalog-seltext_m   = 'Airline Code'.
  49.   fieldcatalog-col_pos     = 0.
  50.   APPEND fieldcatalog TO fieldcatalog.
  51.   CLEAR  fieldcatalog.

  52.   fieldcatalog-fieldname   = 'CONNID'.
  53.   fieldcatalog-seltext_m   = 'Flight Connection Number'.
  54.   fieldcatalog-col_pos     = 1.
  55.   APPEND fieldcatalog TO fieldcatalog.
  56.   CLEAR  fieldcatalog.
  57.   fieldcatalog-fieldname   = 'FLDATE'.
  58.   fieldcatalog-seltext_m   = 'Flight date'.
  59.   fieldcatalog-col_pos     = 2.
  60.   APPEND fieldcatalog TO fieldcatalog.
  61.   CLEAR  fieldcatalog.
  62.   fieldcatalog-fieldname   = 'PRICE'.
  63.   fieldcatalog-seltext_m   = 'Airfare'.
  64.   fieldcatalog-col_pos     = 3.
  65.   fieldcatalog-outputlen   = 20.
  66.   APPEND fieldcatalog TO fieldcatalog.
  67.   CLEAR  fieldcatalog.
  68. ENDFORM.                    " BUILD_FIELDCATALOG


  69. *&---------------------------------------------------------------------*
  70. *&      Form  DISPLAY_ALV_REPORT
  71. *&---------------------------------------------------------------------*
  72. *       text
  73. *----------------------------------------------------------------------*
  74. *  -->  p1        text
  75. *  <--  p2        text
  76. *----------------------------------------------------------------------*
  77. FORM display_alv_report .
  78.   gd_repid = sy-repid.
  79.   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  80.     EXPORTING
  81.       i_callback_program      = gd_repid
  82.       i_callback_top_of_page  = 'TOP-OF-PAGE'  "see FORM
  83.       i_callback_user_command = 'USER_COMMAND'
  84.       it_fieldcat             = fieldcatalog[]
  85.       i_save                  = 'X'
  86.       is_variant              = g_variant
  87.     TABLES
  88.       t_outtab                = it_sflight
  89.     EXCEPTIONS
  90.       program_error           = 1
  91.       OTHERS                  = 2.
  92.   IF sy-subrc <> 0.
  93. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  94. *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  95.   ENDIF.
  96. ENDFORM.                    "DISPLAY_ALV_REPORT
  97. " DISPLAY_ALV_REPORT
  98. *&---------------------------------------------------------------------*
  99. *&      Form  DATA_RETRIVEL
  100. *&---------------------------------------------------------------------*
  101. *       text
  102. *----------------------------------------------------------------------*
  103. *  -->  p1        text
  104. *  <--  p2        text
  105. *----------------------------------------------------------------------*
  106. FORM data_retrivel .
  107.   SELECT * FROM sflight INTO TABLE it_sflight.
  108. ENDFORM.                    " DATA_RETRIVEL
  109. *-------------------------------------------------------------------*
  110. * Form  TOP-OF-PAGE                                                 *
  111. *-------------------------------------------------------------------*
  112. * ALV Report Header                                                 *
  113. *-------------------------------------------------------------------*
  114. FORM top-of-page.
  115. *ALV Header declarations
  116.   DATA: t_header TYPE slis_t_listheader,
  117.         wa_header TYPE slis_listheader,
  118.         t_line LIKE wa_header-info,
  119.         ld_lines TYPE i,
  120.         ld_linesc(10) TYPE c.
  121. * Title
  122.   wa_header-typ  = 'H'.
  123.   wa_header-info = 'SFLIGHT Table Report'.
  124.   APPEND wa_header TO t_header.
  125.   CLEAR wa_header.
  126. * Date
  127.   wa_header-typ  = 'S'.
  128.   wa_header-key = 'Date: '.
  129.   CONCATENATE  sy-datum+6(2) '.'
  130.                sy-datum+4(2) '.'
  131.                sy-datum(4) INTO wa_header-info.   "todays date
  132.   APPEND wa_header TO t_header.
  133.   CLEAR: wa_header.

  134.   CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
  135.     EXPORTING
  136.       it_list_commentary = t_header
  137.       i_logo             = 'ENJOYSAP_LOGO'.
  138. ENDFORM.                    "top-of-page
复制代码
回复

使用道具 举报

快速回帖

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

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