• 自动生成单据编号


    自动生成单据编号

    作者:sagahu@163.com

    日期:2014-03-18

    一、说明

        业务单据的编号通常需要按照一定的规则由应用系统自动生成,少数时候也有可能由操作员手工填写。

    二、自动编号的分段

        常见的单据编号组成部分有以下几种:

           (1)固定字符串

           (2)员工编号

           (3)日期

           (4)顺序号

        各种组成小段都会具有自己的特点与使用约束。

    组成小段

    分类情况

    备注

    固定字符串

    定长,1~4位,通常用作前缀。

    员工编号

    定长,2~5位

    日期

    年:yyyy

    定长,4位

    年月:yyyyMM

    定长,6位

    年月日:yyyyMMdd

    定长,8位

    顺序号

    有:本类单据内递增

          对每个员工单独编号

    本年/本月/本日内递增

    对每个员工,按本年/本月/本日内递增

    定长,1~8位,附加限制越多,长度越小

    约束:在一个编码规则中每种组成小段可以没有,如果有只能是1个;各种小段并不能固定顺序!允许用户自定义配置。

    这些组成小段也叫做编码的组成项目。

    三、软件需求

    (一)最终目标需求

    描述:每种单据新建时,自动生成它的单据编号。

    输入条件:

    单据类型标识(必须),

    员工编号(根据情况选用),

    日期(数据库内自动)。

    输出:新的单据编号

    (二)系统配置初始需求

       

    系统初始应该由程序员把所有需要自动生成编号的单据对象列表,并设定初始的编号规则。

    这个需要编号的单据对象列表固定,由各单据功能代码硬编码调用,后期不允许删除单据对象,只允许修改各对象的具体编码规则。

    (三)系统配置维护需求

    系统运行初期,允许管理员自已修改各单据编号规则的初始设定,修改后在新的单据记录开始启用。

    四、数据库定义与实现

    (一)硬编码参数定义

    编码小段类型: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

    可选

    空串

    如果不使用自动生成代码,这个参数为空。否则:按照表二来配置

    输出:无

  • 相关阅读:
    团队作业3--需求改进&系统设计
    需求分析&原型设计
    团队项目作业1-团队展示
    结对编程
    APP案例分析之华为浏览器
    四则运算生成器做法思路
    关于PHP使用GD库生成的验证码无法在别处显示
    第二次课程心得
    两个程序代码
    5.8下午
  • 原文地址:https://www.cnblogs.com/sagahu/p/3620132.html
Copyright © 2020-2023  润新知