企业业务中经常有这样要求, 要求单据编号必须是什么格式,

比如我们现在的规则 前缀+年月+流水号 , 流水号按照年月重置.

我在做其他的项目时 也遇到很多特的需求( 财务凭证肯定是需要的)

比如 前缀+年月日+ 表中的其他字段+ 流水号(四位) , 流水号按照年月重置.

 

基本上,处理此问题的模式( 哈哈, 就是模式):

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 )  )

posted on 2006-09-29 13:39  杨发达  阅读(1956)  评论(1编辑  收藏  举报