如何获取单据分录上列中的F7控件设置过滤条件?

本文介绍如何在单据编辑EDITUI上为F7类型的列设置过滤条件,通过获取编辑控件并转换为F7类型,进而设置EntityViewInfo实现范围限制。

场景:

      单据编辑EDITUI上分录中的列为F7类型,在实际运行中需要为其设置过滤条件限制其范围。

 

解决方法:

      由于绑定的F7的构造代码处理BOS放在了抽象类中,而且是private的,所以无法在实现类中对其做设置,只有用代码先取得列中的编辑控件,转型为F7,然后对其设置过滤条件entityviewinfo,具体代码如下:

  this.kdtEntrys.checkParse();

  KDBizPromptBox prmt = (KDBizPromptBox)this.kdtEntrys.getColumn("feeType").getEditor().getComponent();
  EntityViewInfo view = new EntityViewInfo();

  ...

  prmt.setEntityViewInfo(view);

 

  这样就实现了对列F7控件设置,抽象类中对列设置F7的代码放在了构造函数中调用,所以我们在实现类中可以将以上代码放在onload()方法中(构造函数先于onLoad()执行)。

<think>嗯,用户现在问的是如何在金蝶K3 V10.4的BOS单据中实现F7过滤条件单据体关联字段的联动。之前已经回答过如何添加过滤条件,但这次用户更关注的是联动问题。我需要仔细分析之前的对话和用户提供的引用资料,确保回答准确。 首先,回顾用户之前的提问和我的回答,他们提到了在BOS设计器中设置过滤条件,包括使用动态参数如this.Context。现在用户想了解如何让F7过滤条件根据单据体的字段值动态变化,比如选择部门后,供应商F7只显示该部门的供应商。 根据用户提供的引用内容,尤其是引用[1]中的ICSelBills表字段解释,特别是FSelType字段,1表示目标字段的当前值作为过滤条件。这可能涉及到在过滤条件中引用当前单据的字段值,比如用this.Department来绑定部门字段的值。 另外,引用[2]提到在过滤条件中使用标识符的问题,用户可能遇到多部分标识符的错误,需要正确使用关联字段的别名,比如用x2作为基础资料的标识符。这可能意味着在编写过滤条件时,需要注意表别名和字段的绑定方式,避免出现无法解析的情况。 接下来,我需要分步骤说明如何实现联动。首先,确定需要联动的字段,比如单据头的部门字段和单据体的供应商字段。然后,在供应商字段的过滤条件中引用部门字段的值,使用类似Supplier.Dept = this.Department的表达式。同时,可能需要设置FSelType为1,以便将当前值作为过滤条件。 另外,用户可能需要了解如何测试和调试过滤条件,比如使用临时提示框或日志查看传递的值是否正确。还要注意单据体字段联动的不同,可能需要使用单据体字段的别名,比如this.Entry.Department,或者通过主单据体关联字段来绑定。 最后,确保回答结构清晰,步骤详细,并包含常见问题解决方法,比如字段不存在错误或动态参数未生效的情况。参考之前的回答格式,使用代码块和示例表达式,帮助用户更好地理解和应用。</think>### 金蝶K3 V10.4 BOS单据F7过滤单据体字段联动实现方法 --- #### **一、核心实现逻辑** 通过**单据体关联字段值动态绑定**到F7过滤条件,需利用金蝶BOS提供的**上下文参数**(如 `this.Context`)或**关联字段标识符**(如 `x2`)实现联动。以下是具体步骤: --- #### **二、具体操作步骤** 1. **定位目标字段与关联字段** - 在BOS设计器中打开单据,确定需要设置F7过滤的字段(如“物料编码”)及与其联动的单据体字段(如“仓库”)。 2. **配置F7过滤条件** - 双击目标字段(如“物料编码”),在属性窗口中找到【过滤条件】或【过滤公式】。 - 输入动态过滤表达式,**绑定单据体字段值**: ```sql Material.Warehouse = this.Warehouse -- 假设"Warehouse"为当前单据体字段名称 ``` - **关键参数说明**: - `this` 表示当前单据上下文,`this.Warehouse` 引用单据体字段值[^1]。 - 若单据体字段为多分录,需指定分录索引(如 `this.Entry[0].Warehouse`)。 3. **设置字段关联关系** - 若需通过ICSelBills表配置关联(适用于复杂场景): - 在 `ICSelBills` 表中设置 `FSelType=1`,表示将目标字段当前值作为过滤条件[^1]。 - 配置 `FDstCtlField`(目标字段)与 `FFieldName`(关联字段)的映射关系。 4. **处理多表别名问题** - 若提示“无法绑定多部分标识符”,需**显式声明表别名**: ```sql x2.Material.Warehouse = this.Warehouse -- x2为基础资料默认别名[^2] ``` 5. **验证与调试** - 发布单据后,测试F7过滤是否随单据体字段值变化: - 若动态参数未生效,检查字段名称拼写和上下文作用域。 - 使用 `print(this.Warehouse)` 或临时提示框输出字段值验证参数传递[^2]。 --- #### **三、两种典型场景实现** 1. **单据头字段联动单据体F7过滤** ```sql -- 单据头"部门"字段控制单据体"供应商"过滤 Supplier.Dept = this.Header.Department ``` 2. **单据体字段间联动** ```sql -- 第一分录"仓库"字段控制第二分录"库位"过滤 Location.Warehouse = this.Entry[0].Warehouse ``` --- #### **四、常见问题解决** | 问题现象 | 原因分析 | 解决方案 | |---------|---------|---------| | **"字段不存在"错误** | 字段未正确绑定或别名冲突 | 使用 `x2` 显式声明基础资料别名[^2] | | **动态参数未生效** | 字段作用域错误(如误用单据头字段) | 确认 `this` 上下文指向单据体字段 | | **多分录过滤失效** | 未指定分录索引 | 使用 `this.Entry[n].FieldName` 明确分录位置 | --- #### **五、扩展应用** 1. **跨单据联动**:通过 `this.Context` 获取上游单据值,实现上下游单据过滤联动。 2. **动态公式**:结合 `CASE WHEN` 语句实现条件分支过滤(需PT补丁支持)。 --- ### 相关问题 1. 如何实现单据体多分录之间的F7字段联动? 2. 动态过滤条件中如何引用上游单据的字段值? 3. 配置过滤条件时出现“无效的上下文参数”如何排查? --- **附注**:具体字段名称和表结构可能因业务单据差异略有不同,建议通过【F8 SQL跟踪】分析实际执行的过滤语句[^2]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值