如何分析生成重复编码
# 问题描述
场景1:新增单据保存时,每次都生成相同的编号
场景2:已保存的单据中存在多个重复的编号
场景3:保存单据生成的编号是已存在的编号
*附:保存/提交操作过程编码规则生成编号时机图示*
![image20221109165455857.webp](/download/0100dbf623e7425843cdaf5388250b1acca9.webp)
# 排查步骤
## 场景1
1、检查保存数据的操作,是否为标准的保存(操作类型为save)或提交(操作类型为submit)操作,查看是否有绑定编码规则操作插件(kd.bos.business.plugin.CodeRuleOp)。
2、如果是非标准的保存或提交操作,或者未绑定编码规则操作插件,在执行该操作保存数据时,编码规则不会生成编号。所以每次生成相同编号的原因,有可能是使用的新增单据时预读在界面的编号 (即下一个即将生成的编号,预读不会消耗流水号)。
![image20220930104908827.webp](/download/010031befef263e241d88b7668cc9a776c9f.webp)
3、查看单据编号是否为调用编码规则接口生成的,检查调用的接口是否正确,生成编号接口名为getNumber,预读编号接口名为readNumber,详细接口介绍可参考【编码规则接口介绍】。
4、检查单据上的表单插件和保存/提交的操作插件,查看插件是否提前将数据保存入库,如调用不执行操作插件的保存:SaveServiceHelper.save等。提前保存数据时,数据中单据编号的值为预读在界面的编号 (即下一个即将生成的编号,预读不会消耗流水号)。编码规则实际生成编号的时机是执行操作校验前(CodeRuleOp插件的onAddValidators事件),如果数据是非新增状态,编码规则不会生成编号。
## 场景2
1、尝试是否可以复现保存单据会出现重复的编号,如果可以复现,按照场景1的步骤进行排查。
2、检查保存数据的操作, 是否配置了编码字段的唯一性校验,如果配置了,在生成编码时检测到已经有这个编码,流水号会自动加1; 如果未配置,在生成编码时不会检测是否已存在该编码,直接保存入库,无法保证编码的唯一性。
![2.webp](/download/01000b215bad28b343bca50667e001a201ea.webp)
3、根据单据的重复编码+创建时间查找monitor日志,检查重复编码的数据是以何种方式进入编码规则的。如果是引入或者webapi的方式,填写了编码字段时,编码规则不会再生成编码,而且编码规则也不做编码的唯一性校验,只会根据填写的编码去匹配编码规则更新最大号。这时如果填写的是已存在的编码,有可能出现存在多个重复的编码。
![3.webp](/download/010022c6eb6a1c444ababb2213daca46864e.webp)
## 场景3
1、查看近期是否调整过编码规则最大号,将最大号调小会存在已生成过的编号再次生成的情况。可通过操作日志查看最大号表的编辑记录,搜索操作名称“最大号编辑”,查看近期是否修改过对应编码规则依据的最大号。
![image20221008162606932.webp](/download/010024101e3c8c5d4bbcad01924a57030351.webp)
2、查看编码规则是否开启参数“允许修改”。开启“允许修改”时,用户可以在界面手动修改单据编号,如手动修改的单据编号占用了编码规则未生成的编号,则有可能会导致后续生成的编号已存在。比如:当前最大号为2,新增单据即将生成的编号为3,用户手动修改为4后进行保存,下一次用户新增单据时生成编号顺序为3、4、5....。
![image20221109165852309.webp](/download/0100d785f1f5d9054de89640e34231761252.webp)
3、检查已存在编号的数据是否为未通过编码规则生成编号,如历史数据、非通过实体保存/提交的数据等。
如何分析生成重复编码
# 问题描述场景1:新增单据保存时,每次都生成相同的编号场景2:已保存的单据中存在多个重复的编号场景3:保存单据生成的编号是已存在的编...
点击下载文档
本文2024-09-23 00:37:54发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-140711.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章