对于某个单据上的关联选择其他单据的字段(例如:报价单模块单据头“客户名称”或者单据分录“产品名称”字段),如果可选数据范围有特殊的控制需求,即关联选择联动,目前可以在数据库表 ld_relatecreatecondition 中增加控制规则实现。
1. ld_relatecreatecondition 可补充“页面设置->审批要求->其他条件”
1) 页面设置中单据头“关联选择单据”字段,可以设置高级查询条件,但是一些复杂的应用还不能通过界面功能配置实现。
2) 单据分录中选择其他单据不能通过界面功能配置实现。
2. ld_relatecreatecondition 表结构说明
1) id:自动增长
2) modulename:被选模块
3) columnname:被选模块对应的查询字段
4) comparator:当 contenttype = 'sql' 时可以不用填写,表示被选模块按照查询字段(columnname)做查询时查询条件的比较关系
5) content:当 contenttype = 'sql' 时填写SQL语句,当 contenttype = 'db' 时填写查询字段(columnname)对应的查询内容
6) relatecreatemodule:当前模块,即针对哪个模块增加的规则
7) sequence:有多个规则时,规则的加载顺序
8) contenttype:规则的类型,sql/db。db类型适用于简单的字段比较,sql 类型适用于相对复杂的查询。
3. 业务场景一
应用需求:报价单选择客户,不允许选择“公海未分配”和“关闭”状态的客户(页面设置中选择关联单据字段的“审批要求 ->其他条件”不能按照“公海未分配”查询)

实现方法:在 ld_relatecreatecondition 表中增加控制规则,然后清除缓存、刷新页面即可。

1) modulename: Accounts (被选单据)
2) columnname:accountid
3) relatecreatemodule:Quotes (当前模块)
4) contenttype:sql
5) sequence:1
6) comparator:不需要填写
7) content:特殊控制查询SQL
ld_account.publicaccount<>1 AND IFNULL(ld_account.rating,'')<>'关闭'
4. 业务场景二
应用需求:报价单如果选择了“客户名称”之后,在单据分录选择“产品名称”时,只能选择关联了该“客户”的产品(产品上增加了选择“客户”的字段)。
实现方法:在 ld_relatecreatecondition 表中增加控制规则,然后清除缓存、刷新页面即可。

1) modulename: Products (被选单据)
2) columnname:productid
3) relatecreatemodule:Quotes (当前模块)
4) contenttype:sql
5) sequence:1
6) comparator:不需要填写
7) content:特殊控制查询SQL
(CASE
WHEN '{$Quotes.accountid}'>0 THEN ld_products.accountid='{$Quotes.accountid}'
ELSE 1=0
END)
说明:当前单据上的某个字段的取值方法:{ $模块名.字段列名}