sap之标准ALV
ALV
ALV
全称SAP LIST VIEW
,是SAP提供的数据报表显示工具。
优点:ALV
通过调用标准函数实现,节省了编程时间和代码量。
全局定义:
TYPE-POOLS SLIS. "类型池SLIS:
DATA: WA_FIELDCAT TYPE slis_fieldcat_alv , "相当于工作区
IT_FIELDCAT TYPE slis_t_fieldcat_alv , "存放列名的内表
WA_LAYOUT TYPE slis_layout_alv . " 负责整个ALV的全局属性
传统ALV:
* 两个标准函数
* REUSE_ALV_GRID_DISPLAY
* REUSE_ALV_LIST_DISPLAY
* 最新的标准函数
REUSE_ALV_GRID_DISPLAY_LVC
面向对象ALV (OO ALV)
1 设置ALV显示字段的结构
以下两种方式实现。
*----------------------------------------*
* 子程序方式
*----------------------------------------*
FORM ZQM_FIELDCAT USING F_FILEDNAME
F_SELTEXT
F_KEY
F_LEN
F_COL.
CLEAR WA_FIELD.
WA_FIELDCAT-COL_POS = F_COL. "列的位置
WA_FIELDCAT-FIELDNAME = F_FILEDNAME. "字段
WA_FIELDCAT-SELTEXT_L = F_SELTEXT. "列名长文本
WA_FIELDCAT-KEY = F_KEY.
WA_FIELDCAT-DO_SUM = 'X'. "求和
APPEND WA_FIELDCAT TO IT_FIELDCAT.
ENDFORM. "ZQM_FIELDCAT
*----------------------------------------*
* 宏方式
*----------------------------------------*
DEFINE EDIT_FIELDCAT.
WA_FIELDCAT-COL_POS = &1.
WA_FIELDCAT-FIELDNAME = &2.
* WA_FIELDCAT-SELTEXT_L = &3.
WA_FIELDCAT-KEY = &3.
WA_FIELDCAT-DO_SUM = &4.
WA_FIELDCAT-REF_TABNAME = &5.
WA_FIELDCAT-REF_FIELDNAME = &6.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
END-OF-DEFINITION.
2 设置ALV的布局
WA_LAYOUT-ZEBRA = 'X'. " 使ALV界面呈现颜色交替
WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. " 自动优化列宽
3 为ALV输出内表排序
* 设置排序参数
WA_SORT-SPOS = 2. " 排序顺序
WA_SORT-FIELDNAME = 'MATNR'. " 排序字段
WA_SORT-UP = 'X'. " 升序
WA_SORT-SUBTOT = 'X'. "小计
APPEND WA_SORT TO IT_SORT.
CLEAR WA_SORT.
4 ALV标准函数-REUSE_ALV_GRID_DISPLAY
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = SY-REPID "下面两个参数只要有一个使用,该参数就要使用
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS' " 自定义状态栏, 参数是子程序名称
I_CALLBACK_USER_COMMAND = 'USER_COMMAND' " 自定义执行事件,参数是子程序名称
I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE' "设置表头
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_END_OF_LIST = 'END_OF_LIST' "设置表尾
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
IS_LAYOUT = wa_layout "报表样式
it_fieldcat = it_fieldcat "列字段展示
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
IT_SORT = it_sort "排序
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* O_PREVIOUS_SRAL_HANDLER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = it_vbap " 这个必填参数,输出的内表数据
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
* 定义 响应执行事件的子程序 包括响应状态栏上的事件码
FORM USER_COMMAND USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN '&IC1'.
* MESSAGE I003(Z_FC).
MESSAGE I002(Z_FC) WITH rs_selfield-tabindex rs_selfield-fieldname.
WHEN 'MESS'.
MESSAGE '你点击了消息按钮' TYPE 'I'.
WHEN OTHERS.
ENDCASE.
ENDFORM.
* 自定义状态栏
FORM SET_PF_STATUS USING rt_extab TYPE slis_t_extab.
DATA: WA_EXTAB LIKE LINE OF rt_extab.
WA_EXTAB-fcode = '&INFO'.
APPEND WA_EXTAB TO rt_extab.
SET PF-STATUS 'STATUS' EXCLUDING rt_extab. " 排除rt_extab中的状态栏按钮
ENDFORM.
* 设置表头子程序
FORM TOP_OF_PAGE.
DATA: it_list_commentary type slis_t_listheader WITH HEADER LINE.
it_list_commentary-typ = 'H'.
it_list_commentary-info = '销售报表'.
APPEND it_list_commentary.
it_list_commentary-typ = 'S'.
it_list_commentary-info = sy-datum.
APPEND it_list_commentary.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = it_list_commentary[]
* I_LOGO =
* I_END_OF_LIST_GRID =
* I_ALV_FORM =
.
ENDFORM.
* 设置表尾
FORM END_OF_LIST using cl_dd type ref to cl_dd_document.
CALL METHOD cl_dd->add_text
EXPORTING
text = '这是表尾'
.
CALL METHOD cl_dd->add_icon
EXPORTING
sap_icon = 'ICON_ADDRESS'
.
ENDFORM.
5 更改ALV字段并同步自建数据表
参考ABAP
数据表操作教程。
ALV报表数据怎么可以实现可编辑? 然后可以保存到自建表ZTVBAP_TEST
中?
-
修改ALV字段展示属性值。
"修改alv显示字段属性 edit wa_fieldcat-edit = 'X'. "指定显示字段可编辑 MODIFY it_fieldcat FROM wa_fieldcat TRANSPORTING edit WHERE fieldname = 'KWMENG'. CLEAR wa_fieldcat.
-
声明与自建表同名的工作区, 并定义一个内表
"声明与自建表同名的工作区 TABLES:ZTVBAP_TEST. "定义一个内表 DATA: IT_ZTVBAP_TEST TYPE STANDARD TABLE OF ZTVBAP_TEST.
-
执行点击保存事件,调子程序:
PERFORM SAVE_DATA.
* 定义 响应执行事件的子程序 FORM USER_COMMAND USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. CASE r_ucomm. WHEN '&IC1'. * MESSAGE I003(Z_FC). MESSAGE I002(Z_FC) WITH rs_selfield-tabindex rs_selfield-fieldname. WHEN 'MESS'. MESSAGE '你点击了消息按钮' TYPE 'I'. WHEN 'CLEAR'. PERFORM clear_data. "清空字段数据 rs_selfield-refresh = 'X'. "刷新界面 WHEN '&DATA_SAVE'. " 保存数据 PERFORM SAVE_DATA. WHEN OTHERS. ENDCASE. ENDFORM.
-
子程序
GET_GLOBALS_FROM_SLVC_FULLSCR
函数将传统的alv转变为面向对象的alv,可以保证数据同步。FORM save_data . DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID. " 使用OO 的刷新方式,先使用GET_GLOBALS_FROM_SLVC_FULLSCR接收屏幕ALV,放置容器,再调用刷新方法 CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' * EXPORTING * IR_SALV_FULLSCREEN_ADAPTER = IMPORTING * ET_EXCLUDING = * E_REPID = * E_CALLBACK_PROGRAM = * E_CALLBACK_ROUTINE = E_GRID = G_GRID * ET_FIELDCAT_LVC = * ER_TRACE = * E_FLG_NO_HTML = * ES_LAYOUT_KKBLO = * ES_SEL_HIDE = * ET_EVENT_EXIT = * ER_FORM_TOL = * ER_FORM_EOL = . " 同步数据 将alv中的数据同步到内表中 CALL METHOD g_grid->check_changed_data * IMPORTING * e_valid = * CHANGING * c_refresh = 'X' . "获取数据 LOOP AT it_vbap INTO wa_vbap. " 只有 wa_vbap 中的字段与 ZTVBAP_TEST 字段一致的才会迁移。 " MOVE-CORRESPONDING wa_vbap TO ZTVBAP_TEST. ZTVBAP_TEST-ZWERKS = wa_vbap-werks. ZTVBAP_TEST-ZMATNR = wa_vbap-MATNR. ZTVBAP_TEST-ZKWMENG = wa_vbap-KWMENG. ZTVBAP_TEST-ZMEINS = wa_vbap-MEINS. APPEND ZTVBAP_TEST TO IT_ZTVBAP_TEST. CLEAR ZTVBAP_TEST. ENDLOOP. " 更新或新建数据 MODIFY ZTVBAP_TEST FROM TABLE IT_ZTVBAP_TEST. ENDFORM.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)