zoukankan      html  css  js  c++  java
  • 自动生成单据编号

    自动生成单据编号

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

    可选

    空串

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

    输出:无

  • 相关阅读:
    Saltstack module acl 详解
    Saltstack python client
    Saltstack简单使用
    P5488 差分与前缀和 NTT Lucas定理 多项式
    CF613D Kingdom and its Cities 虚树 树形dp 贪心
    7.1 NOI模拟赛 凸包套凸包 floyd 计算几何
    luogu P5633 最小度限制生成树 wqs二分
    7.1 NOI模拟赛 dp floyd
    springboot和springcloud
    springboot集成mybatis
  • 原文地址:https://www.cnblogs.com/sagahu/p/3620132.html
Copyright © 2011-2022 走看看