【二开】生产订单生成下级订单时,单据编号修改为引用成品的订单编号加后缀(-1)

1、解决方案:
在成品订单上记录生成下级订单的次数,生成下级订单时,引用成品订单编号+“_”+ (记录的生成次数+1),下级订单生成成功后,更新成品订单上的生成次数+1。例如成品订单为MO001718,如果第一行分录生成下级新订单的次数为3,则成品订单上记录的生成次数为3,再次生成任意一个下级订单时,订单编号则是:MO001718_1_4,成品订单上的生成次数更新为4,第二行分录生成下级订单,则为MO001718_2_1。
2、具体步骤:
2.1、在生产订单的分录上增加字段:生成下级订单次数

2.2、在生产订单的保存操作上增加插件

2.3、保存插件具体二开实现:
(1)二开插件继承AbstractMfgOperationPlugIn
(2)重写BeforeDoSaveExecute:根据源单类型为“PRD_MO”,确定生成的是下级订单,根据源单分录内码获取成品订单的生成下级订单次数,成功拼接出下级订单的单据编号,并且记录源单分录内码和新的生成下级订单次数,之所以写在方法BeforeDoSaveExecute里面原因是因为部分客户环境操作异常,导致生成了重复的生产订单编号,从而引发后续一系列成本归集数据异常,同时也需要考虑生产订单多行分录的场景
(3)重写AfterExecuteOperationTransaction:更新成品订单的生成下级订单的次数。
2.4、具体代码可见(供参考):
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using Kingdee.BOS;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using Kingdee.K3.Core.MFG.EntityHelper;
using Kingdee.K3.MFG.App;
namespace ITIBB.App.ServicePlugIn.App.ServicePlugIn
{
[Description("二开-生产订单保存插件-生成下级订单编号")]
public class Ext_MoSaveTwo : AbstractOperationServicePlugIn
{
Dictionary<long, int> updateTimeDic = new Dictionary<long, int>();
public override void BeforeDoSaveExecute(BeforeDoSaveExecuteEventArgs e)
{
base.BeforeDoSaveExecute(e);
if (e.DataEntities.IsEmpty()) return;
List<long> srcBillEntryIds = new List<long>();
DynamicObject[] dataEntitys = e.DataEntities;
foreach (var dataEntity in dataEntitys)
{
DynamicObjectCollection entrys = dataEntity.GetDynamicValue<DynamicObjectCollection>("TreeEntity");
string documentStatus = dataEntity.GetDynamicValue<string>("DocumentStatus");
if (documentStatus.Equals("Z"))
{
foreach (var entry in entrys)
{
long srcBillEntryId = entry.GetDynamicValue<long>("SrcBillEntryId");
string srcBillType = entry.GetDynamicValue<string>("SrcBillType");
if (srcBillType.Equals("PRD_MO"))
{
srcBillEntryIds.Add(srcBillEntryId);
}
}
}
}
if (srcBillEntryIds.IsEmpty()) return;
//根据源单分录Id,从数据库获取源单分录上生成下级订单的次数(认为生成下级订单的分录,都是来源于同一个生产订单)
var times = this.GetNextMoTimeByEntryIds(this.Context, srcBillEntryIds);
foreach (var dataEntity in dataEntitys)
{
DynamicObjectCollection entrys = dataEntity.GetDynamicValue<DynamicObjectCollection>("TreeEntity");
long srcBillEntryId = entrys[0].GetDynamicValue<long>("SrcBillEntryId");
int nextMoTime = times.Where(f => f.GetDynamicValue<long>("FENTRYID") == srcBillEntryId).FirstOrDefault().GetDynamicValue<int>("FNEXTMOTIME");
string srcBillNo = entrys[0].GetDynamicValue<string>("SrcBillNo");
int srcSeq = entrys[0].GetDynamicValue<int>("Seq");
string billNo = string.Format("{0}{1}{2}{3}{4}", srcBillNo,'_', srcSeq, '_', nextMoTime + 1);
int tmp = 0;
if (updateTimeDic.TryGetValue(srcBillEntryId, out tmp))
{
if (tmp >= nextMoTime + 1) continue;
updateTimeDic.Remove(srcBillEntryId);
updateTimeDic.Add(srcBillEntryId, nextMoTime + 1);
}
else
{
updateTimeDic.【二开】生产订单生成下级订单时,单据编号修改为引用成品的订单编号加后缀(-1)
1、解决方案:在成品订单上记录生成下级订单的次数,生成下级订单时,引用成品订单编号+“_”+ (记录的生成次数+1),下级订单生成成功后...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



