企业业务中经常有这样要求, 要求单据编号必须是什么格式,
比如我们现在的规则 前缀+年月+流水号 , 流水号按照年月重置.
我在做其他的项目时 也遇到很多特的需求( 财务凭证肯定是需要的)
比如 前缀+年月日+ 表中的其他字段+ 流水号(四位) , 流水号按照年月重置.
基本上,处理此问题的模式( 哈哈, 就是模式):
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 )  ) 
 
                    
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号