ABAP设置报表默认变式

作者:公众号 约 4 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发
ABAP设置报表默认变式 - 封面图
ABAP设置报表默认变式 - 封面图

前言

每个顾问可能都知道在报表的选择屏幕可以设置变式,但是用户需要每次到变式目录中选择自己设置的变式。

有没有一种方式,进入程序后自动获取用户设置的变式呢?答案是肯定的。

设置变式

1\. 在自开发程序中,创建变式,名称为 "U_+用户名"

ABAP设置报表默认变式 - 封面图
ABAP设置报表默认变式 - 封面图

2\. 在开发中程序的 IN ITIALIZATION 事件中添加如下代码

INITIALIZATION. zcl_common=>get_default_variant( ).

3\. 使用TCODE打开程序后,选择屏幕自动根据变式填充值

ABAP设置报表默认变式 - 封面图
ABAP设置报表默认变式 - 封面图

额外说明

1\. 用户 变式: 名称为 "U_+用户名" ,只对特定用户起作用。

2\. 自定义 变式: 名称为 "C_+事务代码" ,如果没有用户变式时,该变

式有效。

3\. 自定义系统变式: 名称为 "CUS&+事务代码" ,这种变式创建时会产

生传输 请求, 如果没有用户变式和自定义变式时,该变 式有效。

4\. 系统变式: 名称为 "SAP&+事务代码" ,这种变式由SAP官方创建,

如果没有前3种变式时,该变式有效。

代码

METHOD get_default_variant. DATA: lv_repid LIKE sy-repid. DATA: lv_subrc LIKE sy-subrc. DATA: lv_variant TYPE rsvar-variant. DATA: lt_callstack TYPE abap_callstack. CALL FUNCTION 'SYSTEM_CALLSTACK' IMPORTING callstack = lt_callstack. ASSIGN lt_callstack[ 2 ] TO FIELD-SYMBOL(<fs_stack>). IF sy-subrc EQ 0. lv_repid = <fs_stack>-mainprogram. ENDIF.

CHECK lv_repid IS NOT INITIAL. IF sy-slset IS INITIAL AND sy-calld IS INITIAL AND sy-batch IS INITIAL AND sy-tcode <> 'SE38' AND sy-tcode <> 'SA38'.

*--- 用户默认变式 lv_variant = |U_{ sy-uname }|. lv_subrc = is_variant_exists( report = lv_repid variant = lv_variant ). IF lv_subrc IS NOT INITIAL.*--- 自定义默认变式/不跨Client lv_variant = |C_{ sy-tcode }|. lv_subrc = is_variant_exists( report = lv_repid variant = lv_variant ). IF lv_subrc IS NOT INITIAL.*--- 系统默认变式,跨客户端,"CUS&"开头变式会产生请求 lv_variant = |CUS&{ sy-tcode }|. lv_subrc = is_variant_exists( report = lv_repid variant = lv_variant ). IF lv_subrc IS NOT INITIAL. lv_variant = |SAP&{ sy-tcode }|. lv_subrc = is_variant_exists( report = lv_repid variant = lv_variant ). ENDIF. ENDIF. ENDIF. IF lv_subrc = 0. CALL FUNCTION 'RS_SUPPORT_SELECTIONS' EXPORTING report = lv_repid variant = lv_variant EXCEPTIONS variant_not_existent = 01 variant_obsolete = 02. ENDIF. ENDIF. ENDMETHOD.
METHOD is_variant_exists. CALL FUNCTION 'RS_VARIANT_EXISTS' EXPORTING report = report variant = variant IMPORTING r_c = rv_subrc EXCEPTIONS not_authorized = 1 no_report = 2 report_not_existent = 3 report_not_supplied = 4. rv_subrc = COND #( WHEN sy-subrc <> 0 THEN sy-subrc ELSE rv_subrc ). ENDMETHOD.

总结

完整代码见Github

地址:https://github.com/a87b01c14/ZCL_COMMON.git

公众号

关于作者:公众号

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「ABAP设置报表默认变式.md」整理生成,仅用于内部技术分享与学习交流。