二开案例.执行计划定时更新最大流水号原创
4人赞赏了该文章
28次浏览
编辑于2024年09月30日 10:02:58
1、设置编码规则,常量+流水号
2、录入3个单据,自动生成3个流水号,此时流水号最大值为3。再手工录入一个单据编号ZZ100,后续生成的流水号还是从4开始。
需要用管理员账号登录,更新最大流水号,后续流水号才能从101开始。
3、管理员更新流水号比较麻烦,可以二开一个执行计划,定时更新。
using Kingdee.BOS; using Kingdee.BOS.Contracts; using Kingdee.BOS.Core; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Log; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using System.Collections.Generic; namespace Jac.XkDemo.BOS.WebApi { public class 更新最大流水号 : IScheduleService { public void Run(Context ctx, Schedule schedule) { var formId = "UNW_test20240930"; //单据标识 var ruleId = "66fa016a309950"; //编码规则Id,可通过下面的SQL查询 /* SELECT a.FRULEID FROM T_BAS_BILLCODERULE a LEFT JOIN T_BAS_BILLCODERULE_L b ON a.FRULEID = b.FRULEID AND b.FLOCALEID = 2052 WHERE a.FBILLFORMID = '单据标识' AND b.FNAME = '编码规则名称' */ SaveFlowMaxNum(ctx, formId, ruleId); } /// <summary> /// 更新最大流水号 /// </summary> private void SaveFlowMaxNum(Context ctx, string billFormId, string ruleId) { //调用更新最大流水号接口 FormMetadata formMetadata = MetaDataServiceHelper.Load(ctx, billFormId) as FormMetadata; if (formMetadata == null) return; //至少有一个单据编号字段 List<string> codeRuleFieldList = BusinessDataServiceHelper.GetCodeRuleFieldList(ctx, formMetadata.BusinessInfo, ruleId); //至少有一个单据编号字段 List<SelectorItemInfo> selectedInfos = SelectorItemInfo.CreateItems(codeRuleFieldList.ToArray()); var subBusinInfo = formMetadata.BusinessInfo.GetSubBusinessInfo(codeRuleFieldList); DynamicObject[] objs = BusinessDataServiceHelper.Load(ctx, subBusinInfo, selectedInfos, null); BusinessDataServiceHelper.UpdateMaxSerialNO(ctx, subBusinInfo, objs, ruleId); BusinessDataServiceHelper.ClearRepairNoPool(ctx, ruleId); Logger.Info("执行计划", "最大流水号更新成功."); } } }
4、执行计划运行之后,流水号自动更新到101。
推荐阅读