找回密码
 注册成为天翎用户
查看: 3011|回复: 12

合同编号重号问题

[复制链接]
qw3er888 发表于 2014-9-5 15:05:59 | 显示全部楼层 |阅读模式
本帖最后由 nice 于 2014-9-10 18:43 编辑

我有一张合同起草单,在提交按钮的动作执行后脚本中加入提交后自动生成合同编号的代码,
这个功能绝大部分时间都好用,可以生成连续不重复的编号,
但是偶尔会发生重复编号的现象,找不到什么原因,我把脚本复制到了下边,请帮忙看看是不是脚本问题?还是其他问题?
var value1=getItemValueAsString("number"); //合同编号字段
if(value1.trim().length()<=0){
var prx="";  //前缀
var user = getWebUser();
var depts = user.getDepartments();
for (var iter = depts.iterator(); iter.hasNext();) {
var dept = iter.next();
}
  if(dept.getName()=="市场部"){ //根据部门名称不同加不同的前缀
   prx = "GJ-S-";
  }
  if(dept.getName()=="技术支持"){  //根据部门名称不同加不同的前缀
   prx = "GJ-J-";
  }
var year =getCurDate("yy");//当前年

var digit=4;  //指定增长序列号位数
var rtn=prx+year+"-";
var sql="select * from tlk_合同起草单 where item_number like '%"+rtn+"%' order by created desc";
var doc=findBySQL(sql);
var val="";
if(doc==null){
    value1=prx+year+"-"+"0001";
}else{
       var test1=doc.getItemValueAsString("number");
       var test2=parseInt(test1.substr(rtn.length));
       var test3=test2+1;
       if (test3< 9) {
                   for (var temp = 1; temp <= digit - test3.toString().length; temp++) {
                         val += "0";
                   }
                   val =val+test3;
            } else if (test3 < 99) {
                    for (var temp = 1; temp <= digit - test3.toString().length; temp++) {
                          val += "0";
                    }
                  val =val+test3;
           } else if (test3 < 999) {
                    for (var temp = 1; temp <= digit - test3.toString().length; temp++) {
                           val += "0";
                   }
                  val =val+test3;
      } else if (test3 < 9999) {
                     for (var temp = 1; temp <= digit - test3.toString().length; temp++) {
                           val += "0";
                     }
                    val =val+test3;
           } else if (test3 < 99999) {
                     for (var temp = 1; temp <= digit - test3.toString().length; temp++) {
                             val += "0";
                     }
                    val =val+test3;
            } else if (test3 < 999999) {
                      for (var temp = 1; temp <= digit - test3.toString().length; temp++) {
                            val += "0";
                      }
                     val =val+test3;
            } else if (test3< 9999999) {
                     for (var temp = 1; temp <= digit - test3.toString().length; temp++) {
                           val += "0";
                    }
                    val =val+test3;
            } else
                val =val+test3;
      rtn=prx+year+"-"+val;
      value1=rtn;
  }
}
var doc = getCurrentDocument();
doc.findItem("number").setValue(value1);
var process = getDocProcess(getApplication());   //Document操作类
process.doUpdate(doc);
截图如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册成为天翎用户

×
dan 发表于 2014-9-5 15:24:44 | 显示全部楼层
这个流水号的实现方法在数据流超过10000条时就会重复,建议使用平台的方法。
回复

使用道具 举报

 楼主| qw3er888 发表于 2014-9-5 15:28:43 | 显示全部楼层
回复 2# dan
您没看我上传的图片么,现在也没到10000条呢,怎么就重复了???
回复

使用道具 举报

dan 发表于 2014-9-5 16:06:05 | 显示全部楼层
你的流水号是根据最新的流水号来操作的,当你的数据操作了10000次就会重复,在此过程有可能会删除部分数据,数据库的数据未必是10000条也可以重复的,最好修改流水号的实现方法,楼主的方法不严谨。
回复

使用道具 举报

 楼主| qw3er888 发表于 2014-9-5 16:12:11 | 显示全部楼层
回复 4# dan
这个10000次是在哪定义判断的,能否增大呢?目前数据库已经实时运行,改脚本方法不太现实吧,能否给一个合适的方法呢?
回复

使用道具 举报

dan 发表于 2014-9-5 16:23:36 | 显示全部楼层
如果将合同号在保存前做个校验,让重复的合同号不能保存。
回复

使用道具 举报

 楼主| qw3er888 发表于 2014-9-5 16:26:14 | 显示全部楼层
回复 6# dan
重复的号不能保存我怎么继续呢?我的合同号是提交后自动生成的!
回复

使用道具 举报

dan 发表于 2014-9-5 16:34:15 | 显示全部楼层
当发现重复时,重新生成一个流水号,一直到不重复为止。
回复

使用道具 举报

 楼主| qw3er888 发表于 2014-9-9 08:32:32 | 显示全部楼层
回复 8# dan
怎么重新生成流水号呢?求具体脚本
回复

使用道具 举报

dan 发表于 2014-9-9 09:39:58 | 显示全部楼层
你的脚本不是有生成流水号的方法?将这个方法封装成一个函数,直接调用。
回复

使用道具 举报

本版积分规则

手机版|天翎MyApps技术社区 ( 粤ICP备11093750号 )

GMT+8, 2026-8-13 17:34

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表