Function ALV

ALV

START-OF-SELECTION.
  PERFORM FRM_GET_DATA.           "获取数据
  PERFORM FRM_BUILD_LAYOUT.		  "定义布局
  PERFORM FRM_BUILD_FCAT.		  "定义展示字段
  PERFORM FRM_BUILD_DISPLAY.      "调用ALV展示函数

步骤:

  1. 调用数据获取函数:使用将数据库中所需的内容读入内表。

    SELECT A~MBLNR,               "查询屏幕输入条件数据
             A~MJAHR,
             B~ZEILE,
             A~BUDAT,
             B~MATNR,
             B~BWART,
             B~LIFNR,
             B~DMBTR,
             B~MENGE
        FROM MKPF AS A
             INNER JOIN
             MSEG AS B
             ON A~MBLNR = B~MBLNR
        INTO CORRESPONDING FIELDS OF TABLE @GT_OUTPUT UP TO 1000 ROWS
        WHERE A~MBLNR IN @S_MBLNR
          AND A~MJAHR IN @S_MJAHR
          AND A~BUDAT IN @S_BUDAT
          AND B~MATNR IN @S_MATNR
          AND B~BWART IN @S_BWART.
    
  2. 定义ALV展示布局

    FORM FRM_BUILD_LAYOUT .
      GS_LAYOUT-CWIDTH_OPT = 'X'.              "最优列宽
      GS_LAYOUT-ZEBRA      = 'X'.              "斑马线
      GS_LAYOUT-SEL_MODE   = 'A'.              "选择方式
    ENDFORM.
    
  3. 定义ALV展示字段

    FORM FRM_BUILD_FCAT.
      DATA:LS_FCAT TYPE LINE OF LVC_T_FCAT.
      "定义一个宏用于设置每个字段属性
      DEFINE DMKPF_FCAT.
        CLEAR LS_FCAT.
        LS_FCAT-FIELDNAME   = &1.             "字段名
        LS_FCAT-REPTEXT     = &2.             "展示名
        LS_FCAT-KEY         = &3.             "设为key
        LS_FCAT-CHECKBOX    = &4.             "设为复选框
        LS_FCAT-EDIT        = &5.             "可编辑
        LS_FCAT-COL_OPT     = &6.             "自适应宽度
        APPEND LS_FCAT TO GT_FCAT.
      END-OF-DEFINITION.
      "宏调用,设置需要展示的字段的属性
      DMKPF_FCAT  'CHK'   'Select'                   'X' 'X' 'X' ''.
      DMKPF_FCAT  'MBLNR' 'Material Document'        'X' ''  ''  'X'.
      DMKPF_FCAT  'MJAHR' 'Material Document Year'   ''  ''  ''  'X'.
      DMKPF_FCAT  'ZEILE' 'Item no'                  ''  ''  ''  'X'.
      DMKPF_FCAT  'BUDAT' 'Posting Date'             ''  ''  ''  'X'.
      DMKPF_FCAT  'MATNR' 'Material Number'          ''  ''  ''  'X'.
      DMKPF_FCAT  'MAKTX' 'Material Description'     ''  ''  ''  'X'.
      DMKPF_FCAT  'BWART' 'Movement Type'            ''  ''  ''  'X'.
      DMKPF_FCAT  'LIFNR' 'Vendor'                   ''  ''  ''  'X'.
      DMKPF_FCAT  'NAME1' 'Vendor Description'       ''  ''  ''  'X'.
      DMKPF_FCAT  'DMBTR' 'Amount'                   ''  ''  ''  'X'.
      DMKPF_FCAT  'MENGE' 'Quantity'                 ''  ''  ''  'X'.
      DMKPF_FCAT  'REMARKS' 'remarks'                ''  ''  'X'  'X'.
    
    
    
    ENDFORM.
    
  4. 调用ALV展示函数

    FORM FRM_BUILD_DISPLAY .
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
        EXPORTING
          "回调程序,SY-REPID表示当前程序
          I_CALLBACK_PROGRAM       = SY-REPID
          "GUI状态函数:FRM_SET_STATUS
          I_CALLBACK_PF_STATUS_SET = 'FRM_SET_STATUS'
          "用户自定义指令函数:FRM_USER_COMMAND
          I_CALLBACK_USER_COMMAND  = 'FRM_USER_COMMAND'
          "ALV布局
          IS_LAYOUT_LVC            = GS_LAYOUT
          "ALV显示字段
          IT_FIELDCAT_LVC          = GT_FCAT
        TABLES
          "数据内表来源
          T_OUTTAB                 = GT_OUTPUT
        EXCEPTIONS
          PROGRAM_ERROR            = 1
          OTHERS                   = 2.
      IF SY-SUBRC <> 0.
    * Implement suitable error handling here
      ENDIF.
    ENDFORM.
    
    
    *       为按钮添加新功能
    FORM FRM_SET_STATUS USING TR_EXTAB TYPE SLIS_T_EXTAB.
      SET PF-STATUS 'ZSTANDARD'.
    ENDFORM.
    
    *      设置用户自定义指令
    FORM FRM_USER_COMMAND USING PV_UCOMM TYPE SY-UCOMM
                             PS_SELFIELD TYPE SLIS_SELFIELD.
      CASE PV_UCOMM.
        WHEN '&EACH'.                                       "全选事件
          CLEAR GS_OUTPUT.
          LOOP AT GT_OUTPUT INTO GS_OUTPUT.
            GS_OUTPUT-CHK = 'X'.
            MODIFY GT_OUTPUT FROM GS_OUTPUT.
          ENDLOOP.
          PERFORM FRM_REFRESH_ALV.
        WHEN '&NONE'.                                     "取消全选事件
          CLEAR GS_OUTPUT.
          LOOP AT GT_OUTPUT INTO GS_OUTPUT.
            GS_OUTPUT-CHK = ''.
            MODIFY GT_OUTPUT FROM GS_OUTPUT.
          ENDLOOP.
          PERFORM FRM_REFRESH_ALV.
        WHEN '&PRT'.                                       "打印事件
          PERFORM FRM_REFRESH_ALV.
          LOOP AT GT_OUTPUT INTO GS_OUTPUT.
            IF GS_OUTPUT-CHK = 'X'.
              APPEND GS_OUTPUT TO GIT_OUTPUT.
            ENDIF.
          ENDLOOP.
          PERFORM FRM_DATA_PRINT.
    	"打印事件
        WHEN '&DWN'.
          PERFORM FRM_REFRESH_ALV.
          CLEAR:GS_OUTPUT.
          LOOP AT GT_OUTPUT INTO GS_OUTPUT.
            IF GS_OUTPUT-CHK = 'X'.
              APPEND GS_OUTPUT TO GIT_OUTPUT.
            ENDIF.
          ENDLOOP.
          PERFORM FRM_DWN_ELSX.                             "DOWNLOAD AS ELSX
      ENDCASE.
    ENDFORM.
    

ALV常用属性

I_CALLBACK_PROGRAM:调用ALV的程序名称"通常使用SY-REPID

I_CALLBACK_PF_STATUS_SET:ALV的GUI

I_CALLBACK_USER_COMMAND:自定义用户命令的FROM

I_CALLBACK_TOP_OF_PAGE:ALV抬头内容信息

I_CALLBACK_HTML_TOP_OF_PAGE:ALV HTML格式抬头内容信息

I_GRID_TITLE:ALV 标题

I_GRID_SETTINGS:GRID信息

IS_LAYOUT_LVC:ALV输出布局样式

IT_FIELDCAT_LVC:设定显示的项目名称及输出设定

IT_EXCLUDING:隐藏设置的ALV工具栏

IT_SORT_LVC:ALV自定义排序

I_DEFAULT:用户是否可以定义默认的布局,'X'-可以定义默认布局,Space-不可以定义默认布局 (默认:X)

I_SAVE:保存表格布局,'X'-只能保存全局变式;'U'-只能保存特定变式;'A'-都可以保存;Space-不能保存变式 (默认:space)

IS_VARIANT:表格布局变式

IT_EVENTS:设置事件, 类型为slis_t_event的内表(name:事件名称,form:事件的FORM)

不常用

I_INTERFACE_CHECK: 检查接口一致性

I_BYPASSING_BUFFER: 是否使用缓存

I_BUFFER_ACTIVE:是否激活缓存,如果每次显示ALV都是相同的字段目录,则该字段目录会被放到一特殊的缓存里,加快显示速度。

I_CALLBACK_HTML_END_OF_LIST:ALV HTML格式页脚内容信息

I_STRUCTURE_NAME:为输出表数据结构的命名,指定了这个参数,域目录将会自动生成

I_BACKGROUND_ID:ALV背景图片Object ID

IT_SPECIAL_GROUPS / IT_SPECIAL_GROUPS_LVC:若内表中一些字段通过SP_GROUP被分组在一起,必须为这些组传递组文本内表

IT_FILTER / IT_FILTER_LVC:ALV过滤设置

IS_SEL_HIDE:替换或修改屏幕中select-option的值

IT_EVENT_EXIT:设置回调的方法的执行行为,表明用户所写的代码是在执行标准执行之前还是之后

IS_PRINT:后台打印的相关参数

I_SCREEN_START_COLUMN:以对话框形式显示的开始列

I_SCREEN_START_LINE:以对话框形式显示的开始行

I_SCREEN_END_COLUMN:以对话框形式显示的结束列

I_SCREEN_END_LINE:以对话框形式显示的结束行

I_HTML_HEIGHT_TOP:HTML抬头的高度

I_HTML_HEIGHT_END:HTML页脚的高度

IT_ALV_GRAPHICS:是否可以在图表中显示ALV

IT_HYPERLINK:使用超链接

导出为Excel文件

ALV标准导出

使用ALV标准导出:加入GUI状态后添加标准按钮"电子表格" 即可将内表数据导出为Excel文件。

image-20220523102216324

GUI_DOWNLOAD

使用函数进行导出

GUI按钮

SE41

image-20220726153138881

根据条件显示ALV按钮

image-20220726154020710

代码实现

FORM FRM_STATUS_SET USING IT_EXTAB TYPE SLIS_T_EXTAB.       "#EC CALLED
  REFRESH IT_EXTAB.
  IF P_PZDR <>  'X'.
    APPEND '&MN' TO IT_EXTAB.
    APPEND '&GZ' TO IT_EXTAB.
    SET PF-STATUS 'STANDARD' EXCLUDING IT_EXTAB.
  ELSE.
    APPEND '&CX' TO IT_EXTAB.
    SET PF-STATUS 'STANDARD' EXCLUDING IT_EXTAB.
  ENDIF.
ENDFORM.
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值