BOS运行时-编码规则-更新最大流水号原创
金蝶云社区-Howhy
Howhy
85人赞赏了该文章 873次浏览 未经作者许可,禁止转载编辑于2023年08月31日 11:18:58

如果通过系统生成单据编号,不需要更新流水号,星空会按照最大流水号+步长依次生成。


某些场景下,客户手动录入一个编号,比如当前流水号最大值100,下一个生成的流水号101,客户手动录入编号的流水号为101,这种情况下。当有人自动生成编号为101时,因为编码唯一校验器的存在,会提示编号唯一。


星空因为考虑性能,手动录入编号时,不会自动更新流水号,如果客户想要实时更新,可以参考以下示例,注意,调用更新流水号会影响保存或其他操作的性能,请根据实际情况谨慎选择。


以物料为例子,当前流水号最大值为2035

image.png


手动录入物料编号为2050后,调用更新最大流水号

image.png

检查流水号最大值

image.png


参考代码如下:

using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.Bill.PlugIn.Args;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Cloud.BOS.Support.Bill
{

    [HotUpdate]
    [Description("测试更新最大流水号")]
    public class UpdateMaxNoPlugin:AbstractBillPlugIn
    {

        public override void BeforeSave(BeforeSaveEventArgs e)
        {
            var billNoField = this.View.BillBusinessInfo.GetBillNoField();
            if(billNoField != null )
            {
                var billNo = this.Model.GetValue(billNoField);
                if (!billNo.IsNullOrEmptyOrWhiteSpace())
                {
                    //当单据编号值不为空时,说明手动指定了编号,可以更新最大流水号

                    BusinessDataServiceHelper.UpdateMaxSerialNO(this.Context, this.View.BillBusinessInfo,
                        new Kingdee.BOS.Orm.DataEntity.DynamicObject[] { this.Model.DataObject }, null);

                }
            }
        }
    }
}




赞 85