IF sy-tcode = 'MB1B' 语句在选择中被巧妙地忽略

IF sy-tcode = 'MB1B' statement being subtly ignored in selection

这个让我很困惑。

我对 MB1B 进行了增强,我希望它的更改在 MB1B 和 MI09 上可见,并且它正在运行。然而,我试图阻止这些变化出现在不同的交易中(例如 IH08、IE05、IQ09)。我所做的是用 if 语句包围我所有的增强代码,如下所示:

IF sy-tcode = 'MB1B' OR sy-tcode = 'MI09'.
  INCLUDE z_pallet_selopt.
ENDIF.

然而,当我 运行 IH08 时,调试器将到达这一点并继续并包括 z_pallet_selopt。

所以我会在这里,然后按 F5...

你瞧,它直接跳到这里。

在第二个屏幕截图中,您可以看到相同的 IF 语句。如果我从那个点按 F5,它会直接跳出(或者看起来是这样),但是当程序完成执行并显示选择屏幕时,选择字段仍然可见。我所做的唯一更改是这些 IF 语句,它们都是相同的,但有趣的是,它确实围绕将 S_PALLET 的标题更改为 Pallet 的代码块工作。

我尝试过的事情:

感谢您的宝贵时间。

以下解决了我的问题:

在AT SELECTION-SCREEN OUTPUT.之后的增强点中,我插入了以下代码:

" If I'm not being executed from MB1B and MI09, hide myself
IF sy-tcode <> 'MB1B' AND sy-tcode <> 'MI09'.
  LOOP AT SCREEN.
    IF SCREEN-GROUP1 = 'PLT'.
      SCREEN-ACTIVE = '0'.
      MODIFY SCREEN.
      CONTINUE.
    ENDIF.
  ENDLOOP.
ENDIF.

对于我希望隐藏的特定选择屏幕选项:

s_pallet for ausp-atwrt MODIF ID PLT.

感谢 Gert Beukema 和 this helpful thread。我的问题是尝试在选择屏幕区域中使用条件语句,但这不起作用。

选择屏幕中没有 IF 语句之类的东西。发生的事情是 include 包含了你的新 SELECT-OPTION 并且你已经注意到 IF 被忽略了。

你可以做的是在 AT SELECTION-SCREEN OUTPUT 事件中添加逻辑来抑制你新添加的 SELECT-OPTION。