当你没有权限使用 SE16N 的时候

514 阅读4分钟

一、介绍

对于开发或者顾问来说,查看 SAP 表内容是必要的。可以使用 SAP SE16N 事务来选择表从而来筛选记录,分析数据问题、查找示例记录,或者只是查找几个月前在客户端系统中创建的销售订单。

如果你没有被授权使用 SE16N 事务码的话,例如下图:

image-20230822150842677.png

1. 通过SE38

而这段代码主要由程序 RK_SE16N 来完成的,代码如下:

REPORT RK_SE16N.

  IF sy-tcode NE 'SE16N'.                           "1757450
    call function 'AUTHORITY_CHECK_TCODE'
      exporting
        tcode  = 'SE16N'
      exceptions
        ok     = 0
        not_ok = 1.
    if sy-subrc ne 0.
      message e059(eu) with 'SE16N'.  " no authority
    endif.
  ENDIF.                                            "1757450

CALL FUNCTION 'SE16N_START'.

而对于 T-Code 的检查就是这段函数 AUTHORITY_CHECK_TCODE ,如果我们直接运行这个功能模块的话,也能得到和前台相同的消息:

image-20230822151356590.png

可以使用以下几种方式来跳过检查。

其实我们可以看到在 RK_SE16N 程序中看出,真正的 SE16N 的调用在功能模块 SE16N_START 当中,因此可以双击它,进入这个函数模块,然后点执行,就可以绕过权限检查使用 SE16N 的功能了:

image-20230822151707130.png

2. 通过 SE37 调用函数模块 SE16N_EXTERNAL_CALL

image-20230822161916154.png

3. 通过 SE37 调用函数模块 SE16N_INTERFACE

此方法适用于 SAP S4 HANA系统,通过函数模块 SE16N_INTERFACE

image-20230822153529781.png

还可以通过将 I_EDITI_SAPEDIT 设置为 X 直接进入编辑模式。这种方式是最方便进入编辑模式的,当然还有如下两种方法进入编辑模式,支持对数据库表中非主键的编辑以及行数据的整体插入和删除。

二、进入编辑模式

  1. 通过 SE16N 进入表显示,然后输入/H 进入调试模式:

image-20230822154517339.png

点击执行,然后将 GD-EDITGD-SAPEDIT 两个变量的值设置为 X ,如图所示:

image-20230822154603641.png

然后再点击执行就可以激活编辑模式了,在编辑模式下,可以对非主键的字段进行编辑,也可以删除和插入行记录。

  1. 使用 RKSE16N_EDIT 程序,激活编辑模式。

image-20230822155422459.png

运行程序 RKSE16N_EDIT 并激活功能,现在启动 SE16N 并选择您的输入。在点击执行按钮之前,输入命令 &sap_edit

image-20230822155709127.png

按下执行。结果是完全可编辑的表格。

三、总结

将 SE16n 作为首选表显示工具的主要原因:

  1. 在不离开屏幕的情况下在表格之间快速切换
  2. 在主屏幕上查看字段名称和字段描述
  3. 只需单击一个按钮即可快速选择结果字段
  4. 使用内置设置调整报告输出选项
  5. 结果屏幕上的 ALV 格式设置
  6. 激活“技术视图”以查看技术字段详细信息。

如果有时,需要我们写一个查询系统表的报表,就可以偷懒不用重复 ALV 的开发流程,可以利用如下的代码实现:

*&---------------------------------------------------------------------*
*& Report ZALV_BY_SE16N
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zalv_by_se16n.

**// Definition
PARAMETERS p_tab TYPE se16n_tab.
CHECK p_tab IS NOT INITIAL.

**// START-OF-SELECTION.
START-OF-SELECTION.


** Authorization Check
* Check for SE16N access when it called by customer t-codes
  IF sy-tcode NE 'SE16N'.                                   " 1757450
    CALL FUNCTION 'AUTHORITY_CHECK_TCODE'
      EXPORTING
        tcode  = 'SE16N'
      EXCEPTIONS
        ok     = 0
        not_ok = 1.
    IF sy-subrc NE 0.
      MESSAGE e059(eu) WITH 'SE16N'.  " no authority
    ENDIF.
  ENDIF.                                                    " 1757450

*—–> Call the SE16N function Module
**// END-OF-SELECTION.
END-OF-SELECTION.

**// Call SE16N with a restriction of selection criteria
  CALL FUNCTION 'SE16N_EXTERNAL_CALL'
    EXPORTING
      i_tab     = p_tab
*     i_variant = p_vari
*     I_HANA_ACTIVE             =
*     I_DBCON   =
*     I_OJKEY   =
*     i_max_lines = p_max_l
*     I_GUI_TITLE =
*     I_FCAT_STRUCTURE          =
*     I_LAYOUT_GROUP            =
*     I_NO_LAYOUTS              =
*     I_DISPLAY_ALL             =
*     I_TEMPERATURE             =
*     I_TEMPERATURE_COLD        =
*     I_SESSION_CONTROL         =
*      i_edit    = p_edit
*     I_NO_CONVEXIT             =
*     I_CHECKKEY  = ‘ ‘
*     I_FORMULA_NAME            =
*    TABLES
*     it_seltab = lt_stab
*     IT_SUM_UP_FIELDS          =
*     IT_GROUP_BY_FIELDS        =
*     IT_ORDER_BY_FIELDS        =
*     IT_AGGREGATE_FIELDS       =
*     IT_TOPLOW_FIELDS          =
*     IT_SORTORDER_FIELDS       =
*     IT_CALLBACK_EVENTS        =
*     IT_OUTPUT_FIELDS          =
*     IT_HAVING_FIELDS          =
    EXCEPTIONS
      no_values = 1
      OTHERS    = 2.

*//  No Need to populate error
  IF sy-subrc <> 0.
    MESSAGE w002(wusl).
* Implement suitable error handling here
  ENDIF.

几行代码,兼具 ALV 报表的功能,何乐而不为,赶快使用起来吧,如图所示:

image-20230822170458318.png

image-20230822170520735.png

本篇文章分享到这,喜欢的点点关注和收藏~