一、问题描述:
如下图,标准系统如果检验单有不合格产品时,生产订单下推生产入库单会拆单成两行,一行为合格品一行为不合格品
二、解决方法:如果想实现只下推合格产品可通过单据转换插件进行处理
2.1、插件代码如下:
using Kingdee.BOS.Core;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.K3.MFG.App.ConvertPlugIn;
using Kingdee.K3.Core.MFG.EntityHelper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.K3.Core.MFG.EnumConst;
using System.ComponentModel;
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args;
namespace Dave.ConvertDemo.ServicePlugIn
{
/// <summary>
/// 按顺序输出单据转换-下推过程的插件事件
/// </summary>
[Kingdee.BOS.Util.HotUpdate]
[Description("生产入库单只下推合格的数据行插件")]
public class Mo2InstockConvert : BaseBillConvertServicePlugIn
{
public override void AfterConvert(AfterConvertEventArgs e)
{
base.AfterConvert(e);
ExtendedDataEntity[] objs = e.Result.FindByEntityKey("FBillHead"); //获取单据数据包 FBillHead是单据头标知
foreach (ExtendedDataEntity obj in objs)
{
//找到生产入库单的表体数据
DynamicObjectCollection entryDatas = obj.DataEntity.GetDynamicValue<DynamicObjectCollection>(CONST_PRD_INSTOCK.CONST_FEntity.ENTITY_ORM_Entity);
List<DynamicObject> wEntryDatas = entryDatas.Where(w => w.GetDynamicValue<string>(CONST_PRD_INSTOCK.CONST_FEntity.ORM_InStockType) != "1").ToList();//找到入库单表体分录入库类型不是合格品入库数据
foreach (DynamicObject entryData in wEntryDatas)
{
//循环移除掉
entryDatas.Remove(entryData);
}
}
}
}
}
2.2、将插件注册到单据转换中:
2.3、启用单据转换规则:
2.4、实现效果:
发布于 金蝶云星空BOS开发交流圈 社群
推荐阅读