如何实现按序列号检验时下推生成的检验单按序列号拆单即一张单据一个序列号
需求描述:按序列号检验时,下推生成检验单时一张单据上一个序列号;
解决方案:(此处以产品检验为例,当生产汇报单上存在序列号时,二开方案如下)
1、首先产品检验单单据类型勾选按序列号拆分行,如下图所示:
2、生产汇报单到检验单的单据转换规则的分组策略中的分单依据中增加序列号字段,如下图所示:
3、二开单据转换插件继承AbstractConvertPlugIn,重写AfterConvert事件,在事件中将下推生成的多个检验单每个单据仅保留一行数据(详细逻辑为:录入一共3个单据,第1个单保留第1行,第2个单保留第2行,第三个单保留第3行,这样可以确保单据彼此之间的序列号不会重复),详细二开示例代码如下:
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn;
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.K3.Core.MFG.EnumConst;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.BOS.Util;
using Kingdee.K3.Core.MFG.EntityHelper;
namespace Test.K3.MFG.QM.App.BillConvertServicePlugIn.ToInspect
{
public class test : AbstractConvertPlugIn
{
public override void AfterConvert(AfterConvertEventArgs e)
{
base.AfterConvert(e);
ExtendedDataEntity[] entryDataes = e.Result.FindByEntityKey("FBillHead");
int i=1;
foreach (ExtendedDataEntity headData in entryDataes)
{
DynamicObjectCollection ibEntrys =
headData.DataEntity.GetDynamicValue<DynamicObjectCollection>("Entity");
List<DynamicObject> allDeleteEntrys = ibEntrys.Where(o => o.GetDynamicValue<int>("Seq") != i).ToList();
allDeleteEntrys.ForEach(item => ibEntrys.Remove(item));
i++;
int seq = 1;
foreach (DynamicObject ibEntry in ibEntrys)
{
ibEntry.SetDynamicObjectItemValue("Seq", seq++);
}
}
}
}
}
4、二开的的单据转换插件挂在生产汇报单到检验单单据转换规则的插件策略处标准产品插件之后即可(注意:标准产品插件仍需启用);
如何实现按序列号检验时下推生成的检验单按序列号拆单即一张单据一个序列号
本文2024-09-23 03:27:40发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-159003.html