辅助资料扩展多选辅助资料列表使用案例

【业务背景】出库申请单有研发、制造、管理等单据类型,申请类型有A、B、C、D、E这些类型,当单据类型=研发时,需要控制申请类型只能选择A、B;当单据类型=制造时,申请类型只能选择B、C。
【需求分析】单据类型和申请类型都为自定义的辅助资料,需要在单据扩展"单选辅助资料列表"时,两者形成联动的逻辑关系,即当单据类型=研发时,需要控制申请类型只能选择A、B;当单据类型=制造时,申请类型只能选择B、C。一个申请类型可能属于多个单据类型,即属于多对多的关系
方案1:使用"上级辅助资料过滤下级辅助资料"的方式,参考:【如何根据上级辅助资料过滤下级辅助资料】实现。这种方式属于一对一关系处理,两两组合会使得辅助资料的设置量翻倍,维护困难,无法满足需求
方案2:辅助资料能够扩展一个"多选辅助资料",结合插件,去数据库读取关联数据加入到过滤条件中
【实现】以方案2的处理方式:
1、辅助资料能够扩展一个"多选辅助资料",BOS会默认生成一个实体关联表存数据
多选基础资料和多选辅助资料,BOS的处理方式是生成一个关联表,具体表结构:
FPKID:关联表ID
FEntryID:单据体ID
F_RQHX_XXX:页面字段

2、针对1中生成的多选辅助资料表,手动修改表结构t_Cust_Entry100165,FPKID由INT改为varchar(36)类型,否则保存数据会出现报错
3、表单插件重写BeforeF7Select、BeforeSetItemValueByNumber事件,触发申请类型查询时,加入单据类型的值,进行过滤
辅助资料相关表
T_BAS_ASSISTANTDATA 辅助资料
T_BAS_ASSISTANTDATA_L 辅助资料多语言
T_BAS_ASSISTANTDATAENTRY 辅助资料分录
T_BAS_ASSISTANTDATAENTRY_L 辅助资料多语言
SELECT T2.FENTRYID, T2.FNUMBER, T3.FDATAVALUE from t_Cust_Entry100165 T1 JOIN T_BAS_ASSISTANTDATAENTRY T2 ON T1.FEntryID = T2.FENTRYID
JOIN T_BAS_ASSISTANTDATAENTRY_L T3 ON T2.FENTRYID = T3.FENTRYID
WHERE FMULASSISTANT IN ('61c138d8def61b') -- 申请类型所属上级,即:单据类型import clr
clr.AddReference("System")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.Core")
from System import *
from System import StringComparison
from Kingdee.BOS.Core.DynamicForm import *
from Kingd辅助资料扩展多选辅助资料列表使用案例
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



