Office中国论坛/Access中国论坛

标题: 可以制作日期流水号吗? [打印本页]

作者: eio    时间: 2002-8-23 19:54
标题: 可以制作日期流水号吗?
诸如领料单,希望以“200208240001”“200208240002”……的格式自动填写单号,其中20020824是今天的日子,0001是序号,当然,如果明天输入,就是200208250001啦
作者: HG    时间: 2002-8-23 19:58
可以呀。cstr(format('ddddmmyy',date)+cstr(identity()))
identity()借用的,在這里代表你的序號,也許是自動編號。
作者: eio    时间: 2002-8-23 20:02
在什么事件下触发?
作者: cattjiu    时间: 2002-8-23 20:12
beforeUpdate
作者: eio    时间: 2002-8-23 20:24
标题: 真的不明白!
在领料单处修改吧!
文件下载[em27][em27]
作者: HG    时间: 2002-8-23 21:03
天呀,您可以貼自憶的代碼上來,讓網友們看嗎?您總是打包放在哪里,其實真正DOWN下您的數據庫的人,我覺得不多,即是有部份,他她們,也想看您的代碼,有沒有更值得學習的地方。
如果您貼上自己的代碼,我想回貼率更高。
作者: cattjiu    时间: 2002-8-23 22:00
我试了一下,只做到“200208241”“200208242",而不是“200208240001”“200208240002",忘记了一个可以补0的方法了,比方= 补字函数(要补的字符,要补的数量),我原来用过的,请大侠指点.


Private Sub 经手人_AfterUpdate()
Dim No11
Dim datea
datea = Format(Me.领料日期, "yyyy-mm-dd")
No11 = DCount("[单号]", "领料表", "[领料日期]=#" & datea & "#")
Me.单号 = Format([领料日期], "yyyymmdd") & No11
End Sub


[此贴子已经被cattjiu于2002-8-23 14:00:19编辑过]


作者: eio    时间: 2002-8-23 22:29
标题: 您使我明白了,程序已经修正了
(1):领料缺乏“经手人”和“领料人”可能不同。
(2):格式已经修正为200208240001
(3):第一张单为200208240001而非200208240。


Private Sub 员工ID_AfterUpdate()
Dim No11
Dim datea
datea = Format(Me.领料日期, "yyyy-mm-dd")
No11 = DCount("[单号]", "领料表", "[领料日期]=#" & datea & "#") + 1
Me.单号 = Format([领料日期], "yyyymmdd") & Format(No11, "0000")

End Sub
作者: HG    时间: 2002-8-24 00:07
哈哈...
作者: Roadbeg    时间: 2003-2-15 01:40
哈哈!
eio 的单号设计与我设计的颇有共通之处:
你的单号是:年(4位)+月(2位)+日(2位)+4位流水号
而我的是 :单据类别(3位)+年(2位)+月(2位)+5位流水号

作者: Roadbeg    时间: 2003-2-15 01:46
其实我当初没使用日期是因为:
如果,MDB文件不只一台机子使用.而两台机子的日期不一致,而日期又是以 Now() 或 Date()函数的返回值为准的话.
岂不是产生的单号有可能重复,而单号重复显然是不允许的
我想的话:
如果写太多代码去检查有无重复有点不切实际吧.
请教 Eio 如何处理
作者: eio    时间: 2003-2-15 02:06
日期+读取ID最大值+流水号,一定不重复!
作者: Roadbeg    时间: 2003-2-15 03:21
这是当然,但有一点.
如:A机为1月5日,B机为1月4日
A机今日产生了 200301050001
但随后B机产生的却是 200301040002(200301040001已由A机于昨日产生)
200301040002 却在 200301050001 之后,岂非荒唐!!!
还有就是这种方式产生的单号有一个不连续的问题,对人工(有时需要人工作为补充)判断单据短少,单据出现顺序等带来一定困扰.

作者: marco2    时间: 2003-2-15 04:17
TO: Roadbeg
這樣的需求也是可以理解的,成熟的立品做流水號都會有几种方案讓用戶自行選擇的.
故現在只是討論技術問題,如何實現罷了,是否合适并不在討論之列吧.
我以前是用SQL的 LIKE將當天最大的單號選出來,然后+1即可.
作者: Roadbeg    时间: 2003-2-15 04:33
技术当然服务于现实.
其实我把日期省了,只留月份的方法也只是偷懒的方法且也不见得能避免这个问题.
真正的解决之道是:以 SQL SERVER 所在机子的日期为准.
我之所以把这个话题提出来,只不过是想提醒大家在设计时,不仅要注意程序的准确有效,还得多增加一些人性化的东西,毕竟,程序还是人在用!!

Re Marco2

作者: eio    时间: 2003-2-15 19:17
to:Roadbeg
    如果部门人员手工输入200301040002,那不是一样可以吗,如果限制日期的话,那么全部机器只能根据服务器的时间啦。
    其实最大ID是解决了时间误差问题,试想一下:
2003011510010001(1001是ID)
2003011410020001
2003011510030002
谁大,如果想排顺序,只要将ID放在前面:
XS+ID+流水号就可以啦。
反正觉得,流水号只是没有单号的单号,并不重要,最小还有单据的日期和内容啊,如果输入的人员执意要乱来的话,数据库根本无法限制。




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