ABAP - 如果在选择中巧妙地忽略了sy-tcode ='MB1B'语句

时间:2015-10-23 15:25:35

标签: sap abap

这个让我非常难过。

我对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 ...... First Step

瞧,它直接跳到这里。 Second Step

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

我尝试过的事情:

  • 如果我对这些IF语句中的所有内容进行评论,那么该字段将会出现 不在那里,所以我知道它是以某种方式进入那里。
  • 完全退出SAP GUI并重新进入(如果缓存错误)。

感谢您的时间。

以下解决了我的问题:

在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。我的问题是尝试在选择屏幕区域中使用条件语句,这不起作用。

1 个答案:

答案 0 :(得分:4)

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

您可以做的是在AT SELECTION-SCREEN OUTPUT事件中添加逻辑以禁止新添加的SELECT-OPTION。