17.1 自动编号
在第5章,我们初次接触了自动编号的概念。本节对自动编号数据规范再做一下详细的说明。按图17-1建立《发文登记》模板。

图 17‑1
在模板上定义数据项如下:
表名 |
发文登记表 |
所在工作表 |
Sheet1 | ||
样式 |
单一数据项 |
是否创建 |
是 | ||
主键 |
区域 |
字段名 |
数据类型 |
必填 |
填写规范 |
|
B2 |
密级 |
文字 (20 字以内 ) |
√ |
固定取值的下拉,三个选项:绝密、机密、普通 |
√ |
E2 |
文件号 |
文字 (20 字以内 ) |
√ |
|
|
C3:E3 |
文件标题 |
文字 (100 字以内 ) |
√ |
|
|
C4:E4 |
文件内容 |
文字 (2000 字以内 ) |
|
|
|
C5 |
录入人 |
文字 (20 字以内 ) |
|
当前用户姓名 |
|
E5 |
录入日期 |
日期 |
|
当前日期 |
17.1.1 自动编号的组成
自动编号由若干“段”组成,每段可能是如下无类信息之一:
段类别 |
说明 |
系统变量 |
为与当前用户有关的内容,包括:前用户部门编号,当前用户所在部门,当前用户所在机构,当前用户姓名,当前用户登录帐号。 |
固定文字 |
顾名思义,就是定义自动编号时规定好的固定文字内容 |
日期变量 |
表示时间相关的信息,有 YYMM , YYYYMM , YYYYMMDD , YYMMDD , YY , YYYY , MMDD 等格式,在产生编号的时刻,根据当前日期决定 |
表单变量 |
对应模板上的字段,在填报的时候,根据这个字段中用户填写的内容构造编号的这一段。 表单变量具体对应模板上的什么字段,在把自动编号绑定到模板数据项的时候再指定,定义自动编号的时候不需要指定 |
顺序号 |
从 1 开始的顺序号,需要规定位数 |
假设《发文登记》用于登记所有下发的文件,每份下发的文件,有一个系统自动产生的文件号。
我们希望在文件号中能体现出来:此文件的密级是什么,是哪个部门下发的,是该部门在当年第几次下发的。例如,财务部2008年第3次下发的绝密文件,编号为“绝密-财务部发(2008)第003号”,总经办2007年第6次发普通文件,编号为“普通-总经办发(2008)第006号”。分析这个问题我们会看出,文件的编号中必须包含如下信息:
- 文件的密级,密级是发文登记表中的一个字段,所以它是一个“表单变量”
- 发文部门的信息,操作人所在的部门,它是一个“系统变量”
- 发文时间(年份)的信息,和操作时间有关,它是一个“日期变量”
- 顺序号,以上信息都相同的情况下,从 1 开始顺序编号,留 3 位
由此定义如下的文件编号:

图 17‑2
如上图所示,文件编号由8段组成。
开头是一个表单变量,表示这将是模板上的一个字段,填报时,根据这个字段的值决定这段的内容。当我们把此自动编号关联到具体的发文登记表模板上的时候,将指定这个表单变量具体对应模板上的“密级”字段;
接下来是一个固定文字“-”;
然后是“系统变量—当前用户所在部门”,即,谁来填报“发文登记表”,这里就是谁所在的部门名称。
接下来又是固定文字“发(”;
下面一段,是一个日期变量,这个选择格式为“YYYY”,即填报时刻的年份;
然后又是一段固定文字“)第”;
接下来为顺序号,即,同一密级、同一部门、同一年,下发的文件,从1开始编号,顺序递增,这里我们规定顺序号为3位,这意味着,同一密级、同一部门、同一年之内,发文的数量最多为999份。
最后,还是一段固定文字“号”。
17.1.2 将编号中的表单变量绑定到数据项
在上一节,我们定义了一个自动编号数据规范“发文号”,下面把这个自动编号关联到《发文登记表》模板的“文件号”字段上。
在设计栏目中,选中《发文登记表》模板,打开其“管理数据表”窗口。选中“发文号”字段,选择其数据规范为自动编号“发文号”,弹出“字段数据规范设置”窗口,如下图所示。

图 17‑3
设置表单变量的绑定字段为“发文登记表.密级”。
生成时机
当一个自动编号中带有表单变量时,编号需要根据表单变量的绑定字段的内容来构造,在填报的过程中,绑定字段的内容可能被多次输入,比如在这个例子中,绑定字段是“密级”,用户可能一开始选择了密级为“机密”,然后发现不对,又改成了“绝密”,那么是不是每次改变都要重新产生一个文件号呢,这里提供了两种选择,一种是“保存时”,也就是不管填报过程中绑定字段被反复修改了多少次,直等到保存时才去生成编号,因为那个时候绑定字段的内容已经定了,不会再变了;另一种选择是“绑定字段改变时”,也就是说只要绑定字段的内容改变,编号都会重新生成。
在本例中,我们选择生成时机为“保存时”。
修改表单时,编号否要重新生成
关于带表单变量的编号生成,还有一个问题需要注意,就是已经存在的表单,如果打开修改,而且修改时又改变了绑定字段的内容,这种情况下编号怎么办?要根据新的绑定字段内容重新生成吗?还是保持不变?
在“字段数据规范设置”窗口上有一个选项“编号一旦生成并存入数据库,绑定字段改变编号不变”,可通过这个选项,来控制表单修改时,是否要根据改变后的绑定字段内容重新生成编号。
17.1.3 编号重用
某些情况下,我们可能会要求单据的编号必须连续,中间不能有断号。
产生断号的原因有以下两种情况:一是我们选择填报一份单据,则产生了新编号,但是最终并没有保存着张单据,而是直接关闭了,则已产生的编号成了废号。二是我们删除了一张单据,则被删除的单据上用到的编号也成为了废号。
我们可以选择通过自动编号的重用方式,使得废号可以被再利用。如下图所示。

图 17‑4设置自动编号的重用方式