编号规则(自动编号)配置

SmartERP系统的每一个实体都会有一个数字编号,存储在 id 字段中。在云平台环境下,彼此隔离的机构会共享这个编号,会导致在某一个结构下看到的数字编号不连续,不利于需要编号连续管理的情况。所以,系统有一个单独的字段 cid,我们称之为分配编号,通过菜单“机构和用户”、“机构设置” 、“编号规则”,来配置该机构特有的自动编号规则:

界面字段含义如下:

  • 机构:该编号规则适应的机构,下级机构会自动继承上级机构的编号规则,但排序规则比所在机构低。
  • 模块:编号规则适应的实体范围。
  • 过滤条件:默认的 @filter 值。
  • 计算公式:计算编号的SQL语句,提供的参数包括:@cid - 生成的编号,@current_id - 当前顺序号,@date - 当前日期,@filter - 过滤条件,@filter_add - 补充过滤条件,@id - 当前实体对象编号,@month - 当前月份字符串(1月是01),@year - 当前整数年份。示例会产生如 CN2016000100 式样的用户分配编号。
  • 计算公式 (f):过滤条件(@filter)和补充过滤条件(@filter_add)计算SQL语句,支持@id - 对象编号,@add - 附加条件(由系统定义传递,比如入库传递I,出库传递D)另外两个计算参数,上图示例计算的@filter值是用户所在国家,过滤条件如果和上一次计算的结果不一样,都会重置顺序编号为1。
  • 重复:编号按照何种周期(比如每年或者每月)自动重新开始从1开始编号,如果过滤条件含月份,不要选择“每月(相同周)”
  • 日期:设定的开始日期,示例从每年的1月1日开始。
  • 状态:是否可用。

对于出入库,定义的模块是仓库,通过@add参数区分,所以:

  • 计算公式(f):SELECT @filter = @add + CAST(@year AS char(4)) + @month,生成“201610”这样的前置字符串。
  • 计算公式:SELECT @cid = @filter + ISNULL(REPLICATE('0', 4 - LEN(@current_id)), '') + CAST(@current_id AS varchar(6)),生成“2016100001”这样的编号。
  • 重复:每月

入库生成发票号格式:201607I0001,发货生成发票号格式:201607D0001,如果某月入库或出库笔数超过9999,则会出现更长的编号比如:201607D10001 ,这是系统默认的出入库发票(分配编号)编号方式。