自動生成單據編號程序員
做者:sagahu@163.com數據庫
日期:2014-03-18測試
1、說明編碼
業務單據的編號一般須要按照必定的規則由應用系統自動生成,少數時候也有可能由操做員手工填寫。spa
2、自動編號的分段code
常見的單據編號組成部分有如下幾種:orm
(1)固定字符串對象
(2)員工編號ci
(3)日期字符串
(4)順序號
各類組成小段都會具備本身的特色與使用約束。
組成小段 |
分類狀況 |
備註 |
固定字符串 |
無 |
|
有 |
定長,1~4位,一般用做前綴。 |
|
員工編號 |
無 |
|
有 |
定長,2~5位 |
|
日期 |
無 |
|
年:yyyy |
定長,4位 |
|
年月:yyyyMM |
定長,6位 |
|
年月日:yyyyMMdd |
定長,8位 |
|
順序號 |
無 |
|
有:本類單據內遞增 對每一個員工單獨編號 本年/本月/本日內遞增 對每一個員工,按本年/本月/本日內遞增 |
定長,1~8位,附加限制越多,長度越小 |
約束:在一個編碼規則中每種組成小段能夠沒有,若是有隻能是1個;各類小段並不能固定順序!容許用戶自定義配置。
這些組成小段也叫作編碼的組成項目。
3、軟件需求
(一)最終目標需求
描述:每種單據新建時,自動生成它的單據編號。
輸入條件:
單據類型標識(必須),
員工編號(根據狀況選用),
日期(數據庫內自動)。
輸出:新的單據編號
(二)系統配置初始需求
系統初始應該由程序員把全部須要自動生成編號的單據對象列表,並設定初始的編號規則。
這個須要編號的單據對象列表固定,由各單據功能代碼硬編碼調用,後期不容許刪除單據對象,只容許修改各對象的具體編碼規則。
(三)系統配置維護需求
系統運行初期,容許管理員自已修改各單據編號規則的初始設定,修改後在新的單據記錄開始啓用。
4、數據庫定義與實現
(一)硬編碼參數定義
編碼小段類型:1-固定字符串;2-員工編號;3-日期;4-順序號。
日期格式:yyyy/yyyyMM/yyyyMMdd。三選一
順序號限制範圍:ForEmp;Global/InYear/InMonth/InDay。兩種可疊加
(二)表定義
表一:tBillCodeRules,定義單據編號對象的列表,並對格式予以總的說明
No |
字段名稱 |
類型 |
說明 |
1 |
SortCode |
varchar(50) |
|
2 |
BillKey |
nvarchar(50) |
PK,單據編號規則標識符號。 |
3 |
BillTitle |
nvarchar(50) |
單據名稱 |
4 |
IsAuto |
int |
Default 0。標識是否自動生成此項單據編號。0-否;1-是 |
5 |
FormatDesc |
nvarchar(50) |
格式說明 |
6 |
Length |
Int |
總長度 |
7 |
TableName |
varchar(50) |
所在數據表名稱 |
8 |
CodeColumnName |
varchar(50) |
單據編號所在字段名稱 |
9 |
DateColumnName |
varchar(50) |
單據日期所在字段名稱 |
表二:tBillCodeRuleItems,對錶一的單據對象詳細定義它的每一個編碼小段(小段類型、順序、格式選項、長度等)
No |
字段名稱 |
類型 |
說明 |
1 |
Id |
Int |
PK,AI,沒有實際意義。 |
2 |
BillKey |
nvarchar(50) |
FK,單據編號規則標識符號。 |
3 |
ItemNo |
int |
1~4,規則小段的順序號。 |
4 |
ItemType |
int |
1~4,規則小段類型。1-固定字符串;2-員工編號;3-日期;4-順序號 |
5 |
Length |
int |
本小段固定長度。 |
6 |
Format1 |
varchar(50) |
Format1都是定義小段規則格式。 (1)當ItemType爲「1-固定字符串」時,表示固定字符串值,不可空。 (2)當ItemType爲「2-員工」時,字段空值。 (3)當ItemType爲「3-日期」時,表示日期字符串格式,可爲:yyyy/yyyyMM/yyyyMMdd三者之一。 (4)當ItemType爲「4-順序號」時,表示使用遞增順序號方式。可是,具體的遞增方式有如下幾種: A.若是包含ForEmp,表示順序號須要爲每一個員工單獨從頭開始遞增; B.若是包含InYear/InMonth/InDay之一,分別表示順序號以年/月/日爲週期從頭開始遞增。 C.若是既包含ForEmp,又包含InYear/InMonth/InDay之一,分別表示順序號以年/月/日爲週期,爲每一個員工從頭開始遞增。 D.空則表示順序號是本類單據自系統啓用初從1開始一直遞增。 |
7 |
Format2 |
varchar(50) |
也是定義小段規則格式,目前保留。 |
(三)模擬測試數據
表一模擬數據
SortCode |
BillKey |
BillTitle |
IsAuto |
FormatDesc |
Length |
TableName |
CodeColumnName |
DateColumnName |
01 |
Dj1 |
單據一 |
1 |
前綴+員工+日期+順序號 |
17 |
BillCodeTest |
code |
CreateDate |
02 |
BI2 |
單據二 |
1 |
前綴+日期+順序號 |
13 |
BillCodeTest |
code |
CreateDate |
表二模擬數據
Id |
BillKey |
ItemNo |
ItemType |
Length |
Format1 |
Format2 |
1 |
Dj1 |
1 |
1 |
3 |
Dj1 |
|
2 |
Dj1 |
2 |
2 |
4 |
|
|
3 |
Dj1 |
3 |
3 |
6 |
yyyyMM |
|
4 |
Dj1 |
4 |
4 |
4 |
ForEmp,InMonth |
|
5 |
BI2 |
1 |
1 |
3 |
BI2 |
|
6 |
BI2 |
2 |
3 |
6 |
yyyyMM |
|
7 |
BI2 |
3 |
4 |
4 |
InDay |
|
表三
create table BillCodeTest (
code varchar(50) primary key,
title varchar(50) ,
createDate datetime
)
(四)自動生成編碼
名稱:pBillCodeRules_NewCode
模塊類型:存儲過程
輸入:
參數名稱 |
類型 |
可選 |
缺省 |
備註 |
@BillIKey |
varchar(50) |
必須 |
|
單據類型標識 |
@EmpCode |
varchar(50) |
可選 |
空串 |
員工代碼 |
返回:新的單據編號(varchar)
(五)維護:
名稱:pBillCodeRules_UpdateRule
模塊類型:C#代碼方法
輸入:
參數名稱 |
類型 |
可選 |
缺省 |
備註 |
@BillIKey |
varchar(50) |
必須 |
|
單據類型標識 |
@ruleItems |
table |
可選 |
空串 |
若是不使用自動生成代碼,這個參數爲空。不然:按照表二來配置 |
輸出:無