Office中国论坛/Access中国论坛

标题: 自动编号问题 [打印本页]

作者: hannanrenjie    时间: 2014-9-7 11:50
标题: 自动编号问题
源起:由于结帐日期为20号,为了便于分月,增加一个“月份”字段。
要求:点击“单号”文本框时,按“月份”+流水号填入
大概意思:
先判断窗体中的“年月”与表中“年月”字段最后一行是否相同。
如果相同,则单号+1
如果不同,则判断为新的月份,按新月份+0001,开始新月份编号。
如果表中没有数据,则按新月份+0001,开始新编号(初始时)。

作者: hannanrenjie    时间: 2014-9-7 11:52
注意:不是从日期中提取月份。
作者: todaynew    时间: 2014-9-10 16:41
用Dmax提取编号字段处理一下不就完事了
作者: hannanrenjie    时间: 2014-9-10 20:49
todaynew 发表于 2014-9-10 16:41
用Dmax提取编号字段处理一下不就完事了

试了的,可是不会。应该还要加IIF判断吧?

作者: todaynew    时间: 2014-9-11 11:41
本帖最后由 todaynew 于 2014-9-11 11:42 编辑
hannanrenjie 发表于 2014-9-10 20:49
试了的,可是不会。应该还要加IIF判断吧?


1、假设你的表名为:tbname,该表中需要自动编号的字段名为:num,该表中的年度为四位字符串,月度为两位字符串,则在标准模块中写自定义函数:
Public Function GetNewNum(byval year as string,byval month as string) as string
    '功能:返回新编号
    dim newNum as string
    newNum=Dmax("num","tbname","年度='" & year & "' and 月度="' & month & "'") '获取当前最大编号
    newNum=nz(newNum,year & month & "0000") '最大编号为空值时,转换为0000
    newNum=val(right(newNum,4))+1 '右取4位,加1
    newNum=year & month & format(newNum,"0000") '拼接新编号
    GetNewNum=newNum   '返回新编号
End Function

2、调用时,假设窗体上有名为年度控件、名为月度的控件和名为编号的控件:
在编号控件的控件来源中写:=GetNewNum([年度],[月度])

作者: hannanrenjie    时间: 2014-9-14 10:43
本帖最后由 hannanrenjie 于 2014-9-14 11:57 编辑

谢谢老师!我试试。
没有“年度”和“月度”字段,用“年月”字段来表示“帐务年月”的。
我们公司的“帐务年月”区间,如:
201408指2014年7月21日到2014年8月20日;那么在7月21日时,编号应为2014080001
201409指2014年8月21日到2014年9月20日;
201410指2014年9月21日到2014年10月20日;
所以,按“帐务年月+3位流水”的单号,一般从上月21号开始下个月新编号,
这样就需要从“年月”文本框中取数,并且结合表中的已有编号加1;
不是从日期字段或系统日期中取年月的问题,很有些麻烦。


作者: todaynew    时间: 2014-9-14 20:10
hannanrenjie 发表于 2014-9-14 10:43
谢谢老师!我试试。
没有“年度”和“月度”字段,用“年月”字段来表示“帐务年月”的。
我们公司的“帐 ...

加个年度和月度字段,这些问题不都解决了嘛。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3