齐套分析单二开下推直接调拨单 问题背景:齐套分析单的调拨业务是金蝶云星空/生产制造的一个业务场景,旨在完成生产订单齐套分析场景之后,自动对接生产订单中调拨材料的调拨流程。由于齐套分析单与直接调拨单的上游单据生产用料清单并没有直接的上下有关系,这是一个通过冗余上游数据进行代码下推指定单据的实现案例。 生产模块对接直接调拨单的相关单据上下游关系图 实现概要 获取齐套分析子项明细 齐套分析单子项明细为生产齐套分析单经过齐套分析生成的运算结果数据。由于生产齐套分析单并没有控制参与分析的订单数量,单次生成的运算结果会超出树形单据体的承载能力。为了降低生产齐套分析单的单据加载速度,以及提供更为便捷的子项明细过滤查询功能,齐套分析子项明细被设计为独立的单据类数据,通过FID与生产齐套分析单进行关联。仅在生产齐套分析单的单据插件/操作插件内获取数据包并不会包含子项明细的数据,需要通过分析单的单据头内码进行二次取数才能取到分析后的子项明细数据。 QueryBuilderParemeter qp = new QueryBuilderParemeter { FormId = "PRD_MATCHDETAIL", SelectItems = SelectorItemInfo.CreateItems( "FPPBomEntryId", "FPPBomId", "FBaseWillTransQty", "FWillTransQty"), FilterClauseWihtKey = "FID=@maid and FBaseWillTransQty > 0", }; qp.ExtJoinTables.Add(new ExtJoinTableDescription { TableName = StringUtils.GetSqlWithCardinality(moids.Count, "@moids", 1, true), TableNameAs = "ts", FieldName = "FID", ScourceKey = "FMoIdSub"}); List<SqlParam> p = new List<SqlParam>{ new SqlParam("@moids",KDDbType.udt_inttable,moids.ToArray()), new SqlParam("@maid",KDDbType.Int64,maid) }; var ret = AppServiceContext.QueryService.GetDynamicObjectCollection(ctx, qp, p); 构造用料清单单据选择集合 齐套分析单子项明细存在用料清单内码的冗余FPPBOMID,FPPBOMENTRYID,通过获取相应的齐套分析单子项明细可以关联获取到对应的用料清单子项,以及构造用料清单的选单集合(List<ListSelectedRow>)。 转换插件干预下推结果的生成 这点参考已有的文章:使用代码实现单据下推 参考案例 条件允许的话,详细实现可以通过反编译标准组件Kingdee.K3.MFG.PRD.App.Core.dll阅读源码,对应实现类:Kingdee.K3.MFG.PRD.App.Core.Preparation.Match.PushTranferDirect.TransferDirectBuilder
, G! u$ D* K# g! _# C2 i' b生产模块对接生产领料单的相关单据上下游关系图 4 o3 b+ N0 {9 T
实现概要 获取齐套分析子项明细 与下推直接调拨单实现雷同,区别于下推填充的数量为本次领料数,本文不再赘述。 $ {8 B' n/ \# N
|