电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

二开实现单据录入携带序列号主档备注信息

来源:金蝶云社区作者:金蝶2024-09-166

二开实现单据录入携带序列号主档备注信息

之前一篇文章说到,将入库单上输入序列号、备注,实现单据保存序列号备注写入序列号主档【二开实现单据保存序列号备注写入序列号主档】


这里继续实现另外一部分需求:在出库单据录入序列号时,自动携带主档备注信息到序列号子单据体备注字段。

【客户需求】非库存更新单据如何增加序列号子单据体 


【实现】

大体思路为:表单插件重写DataChanged事件,监听序列号数量字段FSNQTY, 值变化NewValue > OldValue时表示新添加序列号,根据当前序列号和组织物料数据,读取对应的序列号主档信息回填。


二开实现序列号单据备注保存写入序列号主档(Python实现)


1、序列号添加"备注"字段引用属性

image.webp


2、表单插件逻辑


using Kingdee.BOS.Core;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using Kingdee.K3.BD.ServiceHelper;
using Kingdee.K3.SCM.Stock.Business.PlugIn;
using Kingdee.K3.Core.SCM.STK;
using System;
using System.Collections.Generic;
using System.Linq;

public override void DataChanged(BOS.Core.DynamicForm.PlugIn.Args.DataChangedEventArgs e)
{
    if (e.Field.Key.ToUpper() == "FSNQTY")
    {
        // 删除行不触发
        if(Convert.ToInt64(e.NewValue) > Convert.ToInt64(e.OldValue))
        {
            DoSerialNoDataChanged(e);
        }
    }
}

internal void DoSerialNoDataChanged(DataChangedEventArgs e)
{
    foreach (Entity entity in this.Model.BusinessInfo.Entrys)
    {
        if (entity is SNSubEntryEntity)
        {
            SNSubEntryEntity snEntity = (SNSubEntryEntity)entity;
            int parRowIndex = this.View.Model.GetEntryCurrentRowIndex(snEntity.ParentEntity.Key);
            DynamicObject entityDataObject = this.View.Model.GetEntityDataObject(snEntity.ParentEntity, parRowIndex);
            if (entityDataObject != null)
            {
                DynamicObjectCollection dataEntrys = snEntity.DynamicProperty.GetValue(entityDataObject) as DynamicObjectCollection;
                Field field = this.View.BusinessInfo.GetField("FMaterialId");
                DynamicObject dyObj = field.DynamicProperty.GetValue<DynamicObject>(entityDataObject);
                long materialId = 0;
                if (dyObj != null)
                {
                    materialId = Convert.ToInt64(dyObj[FormConst.MASTER_ID]);
                }
                field = this.View.BusinessInfo.MainOrgField; // this.View.BusinessInfo.GetField("FStockOrgId");
                dyObj = field.DynamicProperty.GetValue<DynamicObject>((DynamicObject)(entityDataObject.Parent));
                long orgId = 0;
                if (dyObj != null)
                {
                    orgId = Convert.ToInt64(dyObj["Id"]);
                }
                if (materialId <= 0 || orgId <= 0)
                {
                    return;
                }
                
                //初始化基础资料控制类型
                var _baseDataOrgCtl = Common.GetInvBaseDataCtrolType(this.View.Context);
                if (dataEntrys != null && dataEntrys.Count > 0)
                {
                    foreach(DynamicObject item in dataEntrys)
                    {
                        string strSerialNO = item["SerialNo"].ToString();
                        if (item["SerialNote"] != null && !string.IsNullOrEmpty(item["SerialNote"].ToString()))  // 备注信息不为空就不再获取了
                        {
                            continue;
                        }
                        List<SimpleSerialSnap> rets = SerialServiceHelper.GetSerialByNumber(this.View.Context, _baseDataOrgCtl, strSerialNO, orgId, orgId, materialId, false, false).ToList();

二开实现单据录入携带序列号主档备注信息

之前一篇文章说到,将入库单上输入序列号、备注,实现单据保存序列号备注写入序列号主档【二开实现单据保存序列号备注写入序列号主档】这里...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信