选择屏幕动态隐藏字段(SELECT-OPT…

本文介绍如何在ABAP程序中根据用户选择动态地显示或隐藏筛选条件。通过使用screen-invisible和screen-input属性,可以实现在不同模式下对SELECT-OPTIONS和其他参数的可见性和可用性的控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

申明:博客针对初级顾问

选择屏幕,比如查询报表,有时候需要根据用户选择动态隐藏筛选条件
如果仅仅是灰掉不可显示,直接screen-input 0.就行,(1可编辑0不可编辑)
如果需要不显示,screen-invisible '1'.

如果使用了SELECT-OPTIONS:而且没有设置NO-EXTENSION
后面会多出一个选择值的按钮来。

其实想去掉很简单,直接debug看这个对应的名称就行了。
一般前面lab页签是 %_定义字段名称_%_APP_%-TEXT
后面的值选择按钮是 '%_定义字段名称_%_APP_%-VALU_PUSH' 

案例如下:

TABLES: bsid,vbak,vbrk,vbrp,knc1.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS p_r  RADIOBUTTON GROUP g1 USER-COMMAND select DEFAULT 'X'. "日模式
PARAMETERS p_y  RADIOBUTTON GROUP g1  .                               "月模式
SELECTION-SCREEN END OF BLOCK b1.


SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE t1 .
SELECT-OPTIONS:
      s_bukrs    FOR    bsid-bukrs  ,                  "  公司代码
      s_vkorg    FOR    vbak-vkorg  ,                  "  销售组织
      s_fkdat    FOR    vbrk-fkdat  ,                  "  发票日期
      s_kkber    FOR    vbrk-kkber  ,                  "  信贷范围
      s_kunag    FOR    vbrk-kunag  ,                  "  售达方
      s_gsber    FOR    vbrp-gsber  ,                  "  业务范围
      s_gjahr     FOR    knc1-gjahr  .                  "  会计年度

PARAMETERS:
      p_budat   TYPE   bsid-budat  ,                  "  记账日期
      p_span    TYPE   num1  .                        "  期间
SELECTION-SCREEN END OF BLOCK b2.




AT SELECTION-SCREEN OUTPUT .

PERFORM frm_modify_screen.


START-OF-SELECTION.


FORM frm_modify_screen .

  LOOP AT SCREEN.
    IF p_r IS NOT INITIAL.                                             "如果是日模式,隐藏会计年底和期间
      t1 text-002.
      IF screen-name 'S_GJAHR' OR
          screen-name 'P_SPAN'  OR
          screen-name '%_P_SPAN_%_APP_%-TEXT'.

        CLEAR p_span.
        CLEAR s_gjahr[].
        screen-input 0.
        screen-invisible '1'.
      ENDIF.
    ELSE.                                                              "如果是月模式,隐藏业务范围和记账日期
      t1 text-003.

      IF screen-name 'S_GSBER-LOW'
        OR screen-name 'P_BUDAT'
        OR screen-name 'S_GSBER-HIGH'
         OR screen-name '%_S_GSBER_%_APP_%-TEXT'                     "前面描述 lab签
         OR screen-name '%_S_GSBER_%_APP_%-VALU_PUSH'                "select options 后面的值选择按钮
         OR screen-name '%_P_BUDAT_%_APP_%-TEXT'.

        CLEAR p_budat.
        CLEAR s_gsber[].
        screen-active '1'.
        screen-invisible '1'.
        screen-input 0.
      ENDIF.
    ENDIF.


    MODIFY SCREEN.
  ENDLOOP.


ENDFORM.                    FRM_MODIFY_SCREEN

### 如何在 `el-Select` 选择器中实现回显功能 为了使 `el-Select` 组件能够正确地显示选项名称而不是仅显示 value,在初始化时需要确保所绑定的模型值与选项列表中的某个项匹配。如果发现只有 value 显示而无 label,则可能是由于 select 中确实不存在该条目造成的[^2]。 对于 Vue3 Element Plus 结合使用的场景,当页面加载完成或是从服务器获取到初始数据后,应当立即将这些数据映射成适合用于填充 `el-select` 的格式,并且设置好相应的 model 属性来反映当前的选择状态。具体来说: 1. **准备选项数据** 需要构建一个数组形式的数据源供 `el-select` 使用,其中每一项都应该包含至少两个属性:一个是作为展示文本的 `label` 字段;另一个是用来唯一标识该项的 `value` 字段。 ```javascript const options = [ { value: 'option1', label: '黄金糕' }, { value: 'option2', label: '双皮奶' } ]; ``` 2. **处理回显逻辑** 如果是从服务端接收到的数据里包含了已经选定的信息(比如编辑模式下的已有记录),那么就需要找到这个已知 value 对应的对象实例并将其 `label` 提取出来以便于后续操作。这一步骤通常是在组件挂载完毕或者是接收到新的 props 后执行一次同步更新动作。 ```javascript import { ref, watch } from 'vue'; export default { setup() { let selectedValue = ref(''); // 假设这是来自API响应的结果 const apiResponseData = [{ id: 1, name: "Option One", code:"opt1"}]; function findLabelByCode(code){ return apiResponseData.find(item => item.code === code)?.name || ''; } // 当外部传入的新值发生化时触发此函数重新计算selectedLabel watch(selectedValue,(newValue)=>{ this.selectedLabel=findLabelByCode(newValue); }); return { selectedValue, options, selectedLabel }; } }; ``` 3. **模板部分** 将上述 JavaScript 量应用至 HTML 模板内,通过 v-model 来双向绑定用户的输入行为内部的状态量。 ```html <template> <div class="app"> <!-- ... --> <el-form-item label="活动区域"> <el-select v-model="selectedValue" placeholder="请选择"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> <!-- 输出选中的标签名 --> <p>您选择了:<span>{{ selectedLabel }}</span></p> <!-- ... --> </div> </template> ``` 另外需要注意的是,有时候即使提供了完整的对象作为默认值也可能遇到无法正常渲染的情况,这时可以尝试指定 `value-key` 参数以帮助框架更好地识别各个项目之间的差异性[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值