单据转换设置映射,手动录入的批号无法携带问题二开原创
金蝶云社区-亦木丶
亦木丶
1人赞赏了该文章 292次浏览 未经作者许可,禁止转载编辑于2022年06月23日 10:38:49

示例:计划订单单据头拓展批号字段(批号主档或者手动录入),携带到生产订单分录

实现方式:

1,可以参考https://vip.kingdee.com/article/182351?productLineId=1

2,也可以二开单据转换插件实现,代码如下:

using Kingdee.BOS.Core;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.K3.Core.MFG.EntityHelper;
using Kingdee.K3.MFG.App.ConvertPlugIn;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.K3.MFG.PLN.App.BillConvertServicePlugIn.PlanOrder;

namespace test
{
    public class Class1 : BaseBillConvertServicePlugIn
    {
        public Dictionary<string, string> dctSourceLot = new Dictionary<string, string>();//储存源单编号与其对应的批号
        /// <summary>
        /// 获取源单信息
        /// </summary>
        /// <param name="e"></param>
        public override void OnBeforeGroupBy(BOS.Core.Metadata.ConvertElement.PlugIn.Args.BeforeGroupByEventArgs e)
        {
            base.OnBeforeGroupBy(e);
            foreach (var each in e.SourceData)
            {
                string billNo = each.GetDynamicValue<string>("FBillNo");
                string lotText = each.GetDynamicValue<string>("FLot1_text");
                if (!dctSourceLot.Keys.Contains(billNo))
                {
                    dctSourceLot.Add(billNo, lotText);
                }
            }
        }
        /// <summary>
        /// 目标单赋值
        /// </summary>
        /// <param name="e"></param>
        public override void AfterConvert(BOS.Core.Metadata.ConvertElement.PlugIn.Args.AfterConvertEventArgs e)
        {
            base.AfterConvert(e);

            ExtendedDataEntity[] heads = e.Result.FindByEntityKey("FBillHead");
            foreach (var head in heads)
            {
                DynamicObject dataEntity = head.DataEntity as DynamicObject;
                DynamicObjectCollection poEntry = dataEntity["TreeEntity"] as DynamicObjectCollection;
                foreach (var each in poEntry)
                {
                    string sId = each.GetDynamicValue<string>("SrcBillNo");
                    string lotText;
                    if (dctSourceLot.TryGetValue(sId, out lotText))
                    {
                        each.SetDynamicObjectItemValue("Lot_Text", lotText);
                    }
                }
            }
        }
    }
}


赞 1