生产订单下推调拨申请单二开配置内码不存在,选单条件: FID IN (100020)
客户需求生产任务单下推调拨申请单,将仓库物料先调拨到车间仓前走申请,在bos配置了生产用料清单和生产订单下推调拨申请单转换规则
但是在实际下推时,使用生产用料清单下推可以正常下推调拨申请单,用生产订单下推调拨申请单会报错提示选单条件: FID IN (100020)
在论坛找了下是需要第三方下推,如何理解:
如生产用料清单可以直接下推调拨申请单,现在要使用生产订单下推调拨申请单,其实就是下推关系的替换,通过生产订单找到生产用料清单的内码,做到生产用料清单下推调拨申请单,这样的下推称为第三方,官方文档说明生产订单第三方下推 (kingdee.com)
按照文档自己写了下列表和表单的下推插件
表单里面下推:ProductionOrderPushProduction.dll
using System.Collections.Generic; using System.Linq; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.List; using Kingdee.BOS.Core.List.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.K3.MFG.SUB.Business.PlugIn; using Kingdee.K3.MFG.ServiceHelper.PRD; using System.ComponentModel; using Kingdee.K3.Core.MFG.EntityHelper; using Kingdee.BOS.Util; namespace ProductionOrderPushProductionBaseControlList { [Description("生产订单列表下推调拨申请单")] [HotUpdate] public class Class1 : BaseControlEdit /* * * BaseControlEdit 表单 * BaseControlList列表 */ { /// <summary> /// 采用第三方下推,需要把源单内码调整为PPBom的内码 /// </summary> /// <param name="e"></param> public override void OnTargetBillChanged(TargetBillChangedEventArgs e) { base.OnTargetBillChanged(e); if (e.ConvertOperation == FormOperationEnum.Push && (e.TargetFormId==("STK_TRANSFERAPPLY"))) /*&& (e.TargetFormId.EqualsIgnoreCase("STK_TRANSFERAPPLY"))) */ /*STK_TRANSFERAPPLY是调拨申请单的formid*/ { List<long> moEntryIds = null; bool isEnityKey = GetSelectRowsKeyList(e.SelectedRows, out moEntryIds); List<long> ppBomEntrykeys = PPBOMServiceHelper.GetPPBOMEntryIdesByMOEntryID(this.Context, moEntryIds, isEnityKey); if (ppBomEntrykeys.Count <= 0) return; DynamicObjectCollection ppBomDatas = PPBOMServiceHelper.GetPPBomEntityForSort(this.Context, ppBomEntrykeys); var sortDatas = ppBomDatas.OrderBy(o => o.GetDynamicValue<string>("FMOID")).ThenBy(o => o.GetDynamicValue<string>("FMOENTRYID")).ThenBy(o => o.GetDynamicValue<int>("FSEQ")).ToList(); List<ListSelectedRow> PPBomRows = new List<ListSelectedRow>(); foreach (DynamicObject ppBomDat in sortDatas) { PPBomRows.Add(new ListSelectedRow(ppBomDat.GetDynamicValue<string>("FID"), ppBomDat.GetDynamicValue<string>("FENTRYID"), 0, "PRD_PPBOM") { EntryEntityKey = "FEntity" }); } // 把源单内码替换为PPBom的内码 e.SelectedRows = PPBomRows.ToArray(); } } } }
列表下推:ProductionOrderPushProductionBaseControlList.dll
using System.Collections.Generic; using System.Linq; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.List; using Kingdee.BOS.Core.List.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.K3.MFG.SUB.Business.PlugIn; using Kingdee.K3.MFG.ServiceHelper.PRD; using System.ComponentModel; using Kingdee.K3.Core.MFG.EntityHelper; using Kingdee.BOS.Util; namespace ProductionOrderPushProductionBaseControlList { [Description("生产订单列表下推调拨申请单")] [HotUpdate] public class Class1 : BaseControlList /* * * BaseControlEdit 表单 * BaseControlList列表 */ { /// <summary> /// 采用第三方下推,需要把源单内码调整为PPBom的内码 /// </summary> /// <param name="e"></param> public override void OnTargetBillChanged(TargetBillChangedEventArgs e) { base.OnTargetBillChanged(e); if (e.ConvertOperation == FormOperationEnum.Push && (e.TargetFormId==("STK_TRANSFERAPPLY"))) /*&& (e.TargetFormId.EqualsIgnoreCase("STK_TRANSFERAPPLY"))) */ /*STK_TRANSFERAPPLY是调拨申请单的formid*/ { List<long> moEntryIds = null; bool isEnityKey = GetSelectRowsKeyList(e.SelectedRows, out moEntryIds); List<long> ppBomEntrykeys = PPBOMServiceHelper.GetPPBOMEntryIdesByMOEntryID(this.Context, moEntryIds, isEnityKey); if (ppBomEntrykeys.Count <= 0) return; DynamicObjectCollection ppBomDatas = PPBOMServiceHelper.GetPPBomEntityForSort(this.Context, ppBomEntrykeys); var sortDatas = ppBomDatas.OrderBy(o => o.GetDynamicValue<string>("FMOID")).ThenBy(o => o.GetDynamicValue<string>("FMOENTRYID")).ThenBy(o => o.GetDynamicValue<int>("FSEQ")).ToList(); List<ListSelectedRow> PPBomRows = new List<ListSelectedRow>(); foreach (DynamicObject ppBomDat in sortDatas) { PPBomRows.Add(new ListSelectedRow(ppBomDat.GetDynamicValue<string>("FID"), ppBomDat.GetDynamicValue<string>("FENTRYID"), 0, "PRD_PPBOM") { EntryEntityKey = "FEntity" }); } // 把源单内码替换为PPBom的内码 e.SelectedRows = PPBomRows.ToArray(); } } } }
将这两个插件文件放到服务器星空安装路径下的C:\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin目录下
如果服务器默认没有启用热部署,需要将插件放完后重启下iis,如果启用了热部署,直接放然后去bos注册就可以(代码里添加了热部署)
代码引入完成后,在bos打开生产订单,分别在表单插件和列表插件注册对应的插件就可以,重新打开生产订单列表下推就正常下推了。
插件放在附件
用这个方法处理完有个BUG。 再下查的时候左侧单据列表会重复显示。同时选择 工艺路线的时候也会报错,关掉插件就没问题了。还有执行开工操作时,会重复弹出来开工的时间窗口,需要多次点击才能彻底关闭,这些问题有遇到吗?
感谢分享,试了,好使
生产订单下推调拨申请单二开配置内码不存在,选单条件: FID IN (100020)
客户需求生产任务单下推调拨申请单,将仓库物料先调拨到车间仓前走申请,在bos配置了生产用料清单和生产订单下推调拨申请单转换规则但是在...
点击下载文档
本文2024-09-16 17:13:28发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-14329.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章