编号 单号 流水号 的一个思路

楼主
我是社区第82339位番薯,欢迎点我头像关注我哦~
使用设计报表总有个开始的步骤,编号。帆软有个唯一 uuid 函数 出现的编码:d03df4c0-c238-4ebe-8bea-043f99781f4d  是这样的机器编码。但我一直使用OA设计报表出现单号一般为 字母 日期 编号 这样的组合。我查了一天没有我要的。看到 http://bbs.fanruan.com/thread-94635-1-1.html 这个帖子使用数据库做编号。引发我的一个思路。

用函数CONCATENATE(字母,日期,编号)。
字母:作为一种单据开头,我使用FHD(发货单)为开头。
日期:转位字符串使用FORMAT(now(), "yyMMddHHmmss")。
编号:这种编号为几位数字。增加使用如 001至999。或者为每日初始数据如  8月18日使用到003编号 8月19日初始为001  不增加编号为004,我个人习惯使用循环编号,计算表单使用频率。填满1千个表单需要的时间 除以1000得出使用率。至于一日出现了多少表单一般习惯统计数据库中的日期得出数据。如喜欢每日初始的同学可以再IF判断日期实现。
现在我使用sql("JDBC2", "select MAX(right(SQL列名,3)) from SQL表名",1,1)取得编号最后三位的最大值,然后加1。为防止出现空值(无数据的SQL)使用了限位函数Format,为防止999+1出现的溢出使用right截取3位字符。


最终得出语句
CONCATENATE("FHD","BJDMK", FORMAT(now(), "yyMMddHHmmss"), right(Format(sql("数据库链接名", "select MAX(right(数据库列名,3)) from 数据库表名",1,1)+1,"000"),4))

得出数据样式为:FHD170818152555001

望各位指正交流!!!


分享扩散:

沙发
发表于 2017-8-18 15:35:24
MAX(right(数据库列名))   这句是错误的应该为MAX(数据库列名)
板凳
发表于 2017-8-18 15:51:02
这种对付并发不好搞的
地板
发表于 2017-8-18 17:58:15
407545706 发表于 2017-8-18 15:35
MAX(right(数据库列名))   这句是错误的应该为MAX(数据库列名)

其实后面的000几编号没有什么意义因为是时间变化的 再加 就没有意思了 增加长度而已
5楼
发表于 2017-8-20 23:58:59
不错,学习了。
6楼
发表于 2017-8-21 09:16:43
学习
7楼
发表于 2018-2-6 15:12:04
已在用,谢谢!
8楼
发表于 2018-7-6 10:41:12
我也是差不多的,这样基可行,我测试过,如果用这个公式,如果中途有人插进去,帆软在填报的时候公式会自动在现有的数据库值上面加一,就不存在重复的问题;
9楼
发表于 2018-11-26 17:17:01
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

9回帖数 3关注人数 6537浏览人数
最后回复于:2018-11-26 17:17

返回顶部 返回列表