2

当我点击“İptal”按钮时,我希望它跳过必填字段。

但我不想控制没有“必填”的必填字段。我想在屏幕截图等文本框中看到复选标记。

通常,当没有必填字段时,“İptal”按钮会调用不同的屏幕。

当我点击 İptal 按钮时,我希望它跳过这个必填字段

注意:屏幕是标准选择屏幕。

4

3 回答 3

2

我解决这个问题的方式不是在布局中使字段成为强制性字段,而是在您的代码中创建一些条件示例我的输入输出字段名为 ekpo-ebeln:

 IF ekpo-ebeln IS INITIAL.
    CASE ok_code.
      WHEN 'EXIT'.
        LEAVE PROGRAM.
      WHEN 'BACK'.
        CALL SCREEN 100.
    ENDCASE.
    MESSAGE 'Fill both of the fields' TYPE 'I'.

这解决了我的问题,并且有效!

于 2017-08-04T13:37:22.830 回答
1

您需要做的是为屏幕上具有“退出”功能类型的按钮分配一个功能代码。

然后您可以AT SELECTION-SCREEN ON EXIT-COMMAND在报告中使用该事件(我假设您在谈论报告,因为您谈论选择屏幕)。在验证屏幕上的字段之前,系统会调用此事件。在这里,您可以实现所有必要的逻辑。

但是,我能想到的唯一方法是将标准 GUI 状态%_00从程序复制RSSYSTDB到您的程序并添加您的功能代码并使其成为“退出”类型。然后,AT SELECTION-SCREEN OUTPUT您可以使用该SET PF-STATUS命令覆盖标准 GUI 状态。(否则如果你给你的按钮分配了一个功能码,但它不会受到特殊处理来触发ON EXIT-COMMAND事件)。

编辑: 我刚刚尝试过它并且它有效,但在将功能代码分配给按钮时(使用SELECTION-SCREEN PUSHBUTTON)无效。相反,我必须将功能代码添加为工具栏上的按钮。然后它触发AT SELECTION-SCREEN OUTPUT事件)。

编辑 2:( 刚刚将我的评论从下面复制到这里,因为需要注意)顺便说一下,当我复制它时,我必须将 %_00 GUI 状态重命名为其他名称。否则,即使在 SET PF-STATUS 中指定了 FROM PROGRAM,它仍然会使用 RSSYSTDB 中的旧 GUI 状态。

于 2013-02-26T11:32:21.327 回答
1

您可以执行以下技巧来实现您的要求。

先决条件:

  1. 首先也是最重要的!不要使用子句声明您的参数OBLIGATORY。此约束在选择屏幕处理期间覆盖所有内部检查和验证。

  2. 在这里,我假设您使用标准 GUI 状态并在应用程序工具栏上激活按钮。标准执行按钮具有标准ONLIfcode,而 İptal 具有IPT.

  3. 要操作目标字段,我们需要分配给它们的 ID:

    PARAMETERS: p_matnr TYPE mara-matnr MODIF ID OBL,
                p_mtart TYPE mara-mtart MODIF ID OBL.
    

解决方案详情:

  1. 声明 AT SELECTION-SCREEN OUTPUT 事件,其中字段的属性将被编辑。

    AT SELECTION-SCREEN OUTPUT.
    
    SET PF-STATUS 'SSCR'.       "<<- our GUI-status
    LOOP AT SCREEN.
     IF screen-group1 = 'OBL'.
       screen-required = '2'.   "<<- default obligatory-like field appearance
       MODIFY SCREEN.
     ENDIF.
    ENDLOOP.
    IF sy-ucomm = 'ONLI'.       "<<- making fields really obligatory
     LOOP AT SCREEN.
      IF screen-group1 = 'OBL'.
       screen-required = '1'.
       MODIFY SCREEN.
      ENDIF.
     ENDLOOP.
    ENDIF.
    
  2. 处理 AT SELECTION-SCREEN 事件中的功能代码。

    AT SELECTION-SCREEN.
    
     IF sy-ucomm = 'ONLI'.
      LEAVE TO SCREEN 1000.
     ENDIF.
     IF sy-ucomm = 'IPT'.
      "<do whatever you want>
     ENDIF.
    

说明:在程序启动时,您的字段的required属性设置为 2,这意味着它们具有强制性刻度,但实际上并不像 obligatory 那样,即这正是您所需要的。您可以完美地按下您的 İptal 按钮并运行任何其他程序。
但是,如果您想启用强制约束,您只需按标准执行,它会再次调用我们的选择屏幕 ( LEAVE TO SCREEN 1000),但使用另一个 ONLI fcode,其required属性被覆盖,瞧!在填写这些字段之前,不可能更进一步。

于 2017-03-25T16:16:31.667 回答