如何在SAP Dynpro标签页中嵌入标准选择TABLES PERNR.
SAP Dynpro标签页嵌入TABLES PERNR.解决方案
1. 为子屏幕定义TABLES PERNR.
默认选择屏幕(SCREEN 1000)的元素会直接显示在主屏幕顶部,无法嵌入标签页。必须把PERNR选择控件放到子屏幕类型的选择屏幕中,具体实现如下:
代码实现
在ABAP程序中声明子屏幕选择屏幕,绑定PERNR内表:
* 标签1对应的子屏幕选择屏幕:人员编号选择 SELECTION-SCREEN BEGIN OF SCREEN 1100 AS SUBSCREEN. TABLES: pernr. " 直接嵌入标准PERNR选择控件(含搜索帮助、多选功能) SELECTION-SCREEN END OF SCREEN 1100. * 标签2对应的子屏幕:额外元素示例 SELECTION-SCREEN BEGIN OF SCREEN 1200 AS SUBSCREEN. PARAMETERS: p_enable AS CHECKBOX TEXT '启用高级功能'. " 示例复选框 SELECTION-SCREEN END OF SCREEN 1200. * 主程序数据声明(用于接收PERNR选择结果) DATA: gt_pernr TYPE STANDARD TABLE OF pernr, gs_pernr TYPE pernr. * 初始化时同步子屏幕与主程序的PERNR内表(可选) INITIALIZATION. gt_pernr = pernr[].
关键注意点
- 必须添加
AS SUBSCREEN关键字,否则该选择屏幕无法作为子屏幕嵌入标签页区域。 TABLES: pernr.会自动生成SAP标准的人员编号选择界面,无需手动创建输入框、搜索帮助等控件。
2. 集成到Dynpro标签布局
步骤1:创建主屏幕(SCREEN 1000)
- 打开SE80,创建/编辑主屏幕1000。
- 添加标签控件(TABSTRIP),命名为
TAB_MAIN,调整尺寸适配屏幕。 - 为标签控件添加两个标签页:
- 标签1:文本设为「人员编号选择」,功能代码设为
TAB1。 - 标签2:文本设为「额外设置」,功能代码设为
TAB2。
- 标签1:文本设为「人员编号选择」,功能代码设为
- 在标签控件内部添加子屏幕区域(SUBSCREEN AREA),命名为
SUBSCR_AREA,尺寸覆盖标签控件的内容区域。
步骤2:主屏幕PBO/PAI逻辑处理
在主屏幕的PBO(输出前处理)和PAI(输入后处理)中,实现子屏幕的加载与标签切换逻辑:
* 主屏幕1000的PBO模块 MODULE pbo_1000 OUTPUT. DATA: lv_sub_dynnr TYPE sy-dynnr. * 根据当前选中的标签页,匹配对应子屏幕编号 CASE sy-ucomm. WHEN 'TAB1' OR INITIAL. lv_sub_dynnr = '1100'. " 加载PERNR选择子屏幕 WHEN 'TAB2'. lv_sub_dynnr = '1200'. " 加载复选框子屏幕 ENDCASE. * 调用子屏幕到指定区域 CALL SUBSCREEN subscre_area INCLUDING sy-repid lv_sub_dynnr. ENDMODULE. * 主屏幕1000的PAI模块 MODULE pai_1000 INPUT. * 传递子屏幕的用户输入到主程序 CALL SUBSCREEN subscre_area. * 处理PERNR选择结果(示例:点击执行按钮时获取数据) IF sy-ucomm = 'ONLI'. gt_pernr = pernr[]. " 后续业务逻辑处理... ENDIF. ENDMODULE.
步骤3:屏幕属性配置
- 确保标签控件的「激活子屏幕」属性已勾选。
- 子屏幕区域的名称必须与代码中
CALL SUBSCREEN后的名称完全一致(示例中为SUBSCRE_AREA)。
问题排查说明
你之前遇到的「PERNR显示在标签上方」问题,是因为直接在默认选择屏幕(SCREEN 1000)中使用TABLES: pernr.——默认选择屏幕的元素会优先渲染在主屏幕顶部,不属于标签页的子屏幕区域。通过将PERNR放到带AS SUBSCREEN的选择屏幕中,就能将其嵌入指定标签页内。
内容的提问来源于stack exchange,提问作者Youssef Benslimane
相关产品推荐
相关产品推荐

