企业业务中经常有这样要求, 要求单据编号必须是什么格式,
比如我们现在的规则 前缀+年月+流水号 , 流水号按照年月重置.
我在做其他的项目时 也遇到很多特的需求( 财务凭证肯定是需要的)
比如 前缀+年月日+ 表中的其他字段+ 流水号(四位) , 流水号按照年月重置.
基本上,处理此问题的模式( 哈哈, 就是模式):
1: 定义编号的规则:
根据table 定以 和数据库字段的数据来定义
共多少位 , n~m 位时什么信息( 年/月/日/固定字符/其他数据库内容/流水号) , 如果是流水号必须制定重置的规则.
2: 实现此规则
可以在sql 方式实现, 在数据插入时放入此信息.
.net 实现, 实现分布式的运算, 在 business layer 中制定规则, data layer 中插入数据.
下面我来介绍我的具体做法:
1: 制定table 结构, 用来存储 编号规则.
预先生成规则的sql storeprocedure .
create table F_IDGEN (
IDGEN_NAME char(20) not null , --主键
IDGEN_TABLE char(80) null , -- 表名
IDGEN_COLUMN char(80) null , -- 字段名称
IDGEN_LEN int null , --长度
IDGEN_FOMULAR varchar(255) null ,
IDGEN_DESC varchar(255) null , --表述
IDGEN_HI varchar(255) null ,
IDGEN_WHO char(6) null ,
IDGEN_SP varchar(255) null , --自动生成的过程名
CONSTRAINT PK_F_IDGEN PRIMARY KEY CLUSTERED ( IDGEN_NAME )
)
create table F_IDGENDT (
IDGEN_NAME char(20) not null ,
IDGENDT_ID int not null , --显示顺序
IDGENDT_CALCSEQ int null , -- 计算顺序
IDGENDT_NAME char(40) null , --名称
IDGENDT_DIGIT int null , --长度
IDGENDT_SORC char(12) null , --来源类别 ( 用户编号/当前年/当前月/当前日/当前分/当前秒/其他字段/用户输入)
IDGENDT_FROM char(80) null , --如果是用户输入, 此为输入制;如果其他字段,为字段名称
IDGENDT_DATATYPE char(10) null , --数据类型
IDGENDT_DEFAULT char(40) null , --默认制
IDGENDT_PATTERN char(80) null ,
IDGENDT_SNCATNO int null , --流水号分类标号( 对应calcseq)
IDGENDT_SNRSTNO int null , -- 流水号重置序号( 对应calcseq)
IDGENDT_HI char(40) null ,
CONSTRAINT PK_F_IDGENDT PRIMARY KEY CLUSTERED ( IDGEN_NAME, IDGENDT_ID ) )
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步