You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PNP逻辑数据库时无法清空PNPBUKRS选择选项的求助

PNP逻辑数据库BUKRS筛选器无法清空的解决思路

问题根源

  1. 代码事件顺序错误:GET pernr是PNP逻辑数据库的专属事件,不能嵌套在AT SELECTION-SCREEN块中,会导致逻辑执行混乱。
  2. 清空操作时机不对:在START-OF-SELECTION中清空选择选项仅在程序执行阶段生效,返回选择屏幕时该事件不会触发,屏幕仍保留缓存值。
  3. PNP的选择选项属于全局绑定字段,仅清空内表和工作区不足以同步到屏幕显示,需在屏幕输出事件中处理。

解决步骤

1. 修正代码事件结构

将GET pernr事件单独抽出,遵循ABAP标准事件执行顺序:

DATA: g_auto_filled_bukrs TYPE c LENGTH 1. " 新增标志位,标记是否自动填充过BUKRS

AT SELECTION-SCREEN.
  IF pnpbukrs[] IS INITIAL.
    pnpbukrs-sign   = 'I'.
    pnpbukrs-option = 'EQ'.
    pnpbukrs-low    = '1021'.
    APPEND pnpbukrs.
    g_auto_filled_bukrs = 'X'. " 标记为自动填充
  ENDIF.

START-OF-SELECTION.
  IF t_p0001 IS INITIAL.
    REFRESH pnpbukrs[].
    CLEAR pnpbukrs.
  ENDIF.

GET pernr.
  PERFORM f_seleciona_dados.

END-OF-SELECTION.
  " 后续业务处理逻辑

2. 添加屏幕输出事件重置选择选项

通过AT SELECTION-SCREEN OUTPUT事件,在用户返回选择屏幕时触发清空操作,同步屏幕显示:

AT SELECTION-SCREEN OUTPUT.
  IF g_auto_filled_bukrs = 'X'.
    REFRESH pnpbukrs[]. " 清空选择选项内表
    CLEAR pnpbukrs.      " 清空工作区
    CLEAR g_auto_filled_bukrs. " 重置标志位,避免重复清空
  ENDIF.

3. 验证逻辑效果

  • 用户未输入BUKRS时,程序自动填充1021并标记标志位。
  • 程序执行完成后返回选择屏幕,AT SELECTION-SCREEN OUTPUT事件触发,BUKRS选择选项被清空,屏幕显示为空。
  • 用户手动输入BUKRS时,标志位不触发,保留用户输入值。

补充说明

若无需区分手动输入和自动填充场景,可直接在AT SELECTION-SCREEN OUTPUT中无条件清空,但需确保符合业务需求;避免直接修改PNP逻辑数据库的全局缓存,通过标准事件处理是最安全的方式。

内容的提问来源于stack exchange,提问作者Hugo Ximenes Loiola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 21:54:52