自動生成單據編號

自動生成單據編號程序員

 

做者: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

可選

空串

若是不使用自動生成代碼,這個參數爲空。不然:按照表二來配置

 

 

輸出:無

相關文章
相關標籤/搜索