我现在在做一个导入单据的功能组织好数据(包括单据号,是通过 GetVouchNo 获取)放入 domhead 中,之后调用 sub vouchsave 保存,因为 sub vouchsave 还要进行一些判断处理,可能该 domhead 保存不上。
现在的问题是 如果导入保存失败,该次导入获取的 单据号就被占掉不能用了。
举例:当前单据号该轮到 0012 了,导入失败一次(把 0012 浪费掉了),继续导入成功后的单据号变成了 0013,而不是想要的 0012,跳号了.......想到的方法是 先预置一个单据号,之后的判断都通过 保存成功后,再更新为 通过 GetVouchNo 获取的 单据号,
但 如果自己随意指定一个预置值,可能与客户 实际应用的单据号冲突....... 单据号的长度是 nvarchar(20)该如何处理啊......
现在的问题是 如果导入保存失败,该次导入获取的 单据号就被占掉不能用了。
举例:当前单据号该轮到 0012 了,导入失败一次(把 0012 浪费掉了),继续导入成功后的单据号变成了 0013,而不是想要的 0012,跳号了.......想到的方法是 先预置一个单据号,之后的判断都通过 保存成功后,再更新为 通过 GetVouchNo 获取的 单据号,
但 如果自己随意指定一个预置值,可能与客户 实际应用的单据号冲突....... 单据号的长度是 nvarchar(20)该如何处理啊......
刚才我调试时确认事务查数据库,存的就是 'newid()'
那不就是把 字符串 'newid()' 当特殊值预置了嘛....或许我的表达还不够清楚,我想要的结果是无论 导入失败是零次 还是连续好多次,导入成功的单据 的单据号,应该是连续的 0012 0013 0014......我想的 实现逻辑就是 先把单据号预置成一个不可能于 表中用户手动设置的单据号冲突 的预置单据号,导入成功后再更新为 自动取值的 有连续性的 单据号。
就这么一个逻辑嘛~
最后还是 取了一个特殊值先保存,基本保存成功之后,在取真值update,update也在事务中,不过能走到update就基本上保存成功了....保证准确性比保持连贯性重要。
GetVouchNo 是调用别处的,没有源码,就不考虑动它了
感谢各位的回答指点,结帖了