SAP报表选择界面维护配置表数据或分组隐藏选择界面时,因为条件必输报错,解决方案

问题:当SAP报表选择界面存在多组,通过RADIOBUTTON GROUP 按钮,来区分多个选择界面时,如果有一个界面上对于条件做了必输,那么如果不输入条件,就点击另一组时是会报错的,同样的,如果界面挂的有前台维护配置表,如果没有输入相应的必输条件就点击,也是会报错XXX字段必输的

解决方法:在定义选择条件时不使用OBLIGATORY,而选择SCREEN-REQUIRED = 2 来控制界面的字段必输

这里如果SCREEN-REQUIRED = 2 则屏幕必输,但是点击其他RADIOBUTTON时不会因为这个而报错,如果使用SCREEN-REQUIRED = 1. 则会报错,而SCREEN-REQUIRED = 0.则表示不控制必输,另外如果必输字段没有输入,就点击执行,SET CURSOR FIELD P_FILE.可以用这个将光标放到指定字段上,并加之报错信息和返回

实现效果如下:

对于界面配置表类型

对于RADIOBUTTON GROUP 

代码如下:

SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME TITLE TEXT-T01 .

  PARAMETERS:
    P_FILE TYPE RLGRAP-FILENAME MODIF ID MD1.

  SELECT-OPTIONS :  S_BUKRS FOR ZTFI027A-BUKRS NO INTERVALS MODIF ID MD2.

  PARAMETERS: P_GJAHR LIKE ZTFI027A-GJAHR MODIF ID MD2,
              P_MONAT LIKE ZTFI027A-MONAT   MODIF ID MD2.

  SELECT-OPTIONS:
                    S_VKBUR FOR ZTFI027A-VKBUR MODIF ID MD2,
                    S_ZBRAND FOR ZTFI027A-ZBRAND MODIF ID MD2,
                    S_MATNR FOR ZTFI027A-MATNR MODIF ID MD2,
                    S_ZFYMX FOR ZTFI027A-ZFYMX MODIF ID MD2.

  PARAMETERS:
    P_DR RADIOBUTTON GROUP G1 DEFAULT 'X' USER-COMMAND CM1,
    P_CX RADIOBUTTON GROUP G1  .   "导入
  "查询

SELECTION-SCREEN END OF BLOCK BK1.
SELECTION-SCREEN FUNCTION KEY 1.

LOOP AT SCREEN.
    CASE 'X'.
      WHEN P_DR .
        IF SCREEN-GROUP1 = 'MD1'.
          SCREEN-REQUIRED = 2.       "当屏幕组为md1时控制相应字段必输
          SCREEN-INVISIBLE = '0'.    "控制是否可见
          SCREEN-ACTIVE = 1.         "控制屏幕字段是否激活
        ELSEIF SCREEN-GROUP1 = 'MD2'.
          IF SCREEN-NAME CS 'S_BUKRS' OR SCREEN-NAME CS 'P_GJAHR' OR SCREEN-NAME CS 'P_MONAT'.
            SCREEN-REQUIRED = 0.
          ENDIF.
          SCREEN-INVISIBLE = '1'.
          SCREEN-ACTIVE = 0.
        ENDIF.
      WHEN P_CX.
        IF SCREEN-GROUP1 = 'MD1'.
          SCREEN-REQUIRED = 0.
          SCREEN-INVISIBLE = '1'.
          SCREEN-ACTIVE = 0.
        ELSEIF SCREEN-GROUP1 = 'MD2'.
          IF SCREEN-NAME CS 'S_BUKRS' OR SCREEN-NAME CS 'P_GJAHR' OR SCREEN-NAME CS 'P_MONAT'.
            SCREEN-REQUIRED = 2.
          ENDIF.
          SCREEN-INVISIBLE = '0'.
          SCREEN-ACTIVE = 1.
        ENDIF.
      WHEN OTHERS.
    ENDCASE.

    MODIFY SCREEN.
  ENDLOOP.


  CASE  'X'.
    WHEN  P_DR.
      IF P_FILE IS INITIAL.
        "上传文件必输
        SET CURSOR FIELD P_FILE.     "如果屏幕这个字段是空的,则将鼠标光标放置到这个字段框上
        MESSAGE S008(ZFICO_001) DISPLAY LIKE 'E'. "返回报错信息
        LEAVE LIST-PROCESSING.                    
      ENDIF.
    WHEN   P_CX.
      IF  S_BUKRS IS INITIAL.
        SET CURSOR FIELD S_BUKRS.
        MESSAGE S010(ZFICO_001) DISPLAY LIKE 'E'.
        LEAVE LIST-PROCESSING.

      ELSEIF  P_GJAHR IS INITIAL .
        SET CURSOR FIELD P_GJAHR.
        MESSAGE S011(ZFICO_001) DISPLAY LIKE 'E'.
        LEAVE LIST-PROCESSING.

      ELSEIF  P_MONAT IS INITIAL.
        SET CURSOR FIELD P_MONAT.
        MESSAGE S012(ZFICO_001) DISPLAY LIKE 'E'.
        LEAVE LIST-PROCESSING.
      ENDIF.
    WHEN OTHERS.
  ENDCASE.
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值