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

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

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

【业务背景】出库申请单有研发、制造、管理等单据类型,申请类型有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:页面字段


image.webp

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 Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *

def BeforeF7Select(e):
    if e.FieldKey.Equals("FASSISTANT_S", StringComparison.OrdinalIgnoreCase):  # 单选辅助资料列表
        assistant_D = this.View.Model.GetValue("FAssistant_D")
        if assistant_D is not None:  # 通过"单据类型"过滤"申请类型"
            e.ListFilterParameter.Filter = " FENTRYID IN (SELECT FENTRYID FROM t_Cust_Entry100165 WHERE FMULASSISTANT = '" + assistant_D["Id"] + "')"       
            
def BeforeSetItemValueByNumber(e):
    if e.BaseDataFieldKey.Equals("FASSISTANT_S", StringComparison.OrdinalIgnoreCase):
        assistant_D = this.View.Model.GetValue("FAssistant_D")
        if assistant_D is not None: # 通过"单据类型"过滤"申请类型"
            e.Filter = " FENTRYID IN (SELECT FENTRYID FROM t_Cust_Entry100165 WHERE FMULASSISTANT = '" + assistant_D["Id"] + "')"


image.webp


image.webp

image.webp


image.webp



这个表单插件代码是放到单据上还是辅助资料里

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

【业务背景】出库申请单有研发、制造、管理等单据类型,申请类型有A、B、C、D、E这些类型,当单据类型=研发时,需要控制申请类型只能选择A...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息