关于多个人同时使用发票系统时怎样处理发票号码的问题(100分)

  • 主题发起人 主题发起人 Ironhero
  • 开始时间 开始时间
I

Ironhero

Unregistered / Unconfirmed
GUEST, unregistred user!
我打算编写一个发票系统(用ADO+SQL Server),在进行规划时,发现发票号码不
知道如何处理,因为有几个人在开发票,每个人在开票时有可能一次开几张发票(同时
有几个收费项目),自动生成几张发票后,有可能还删除其中一张发票,这就存在一个
问题:发票号码怎么办?因为发票号码只能是唯一的,只能按顺序递增。
必须解决的问题是:1、当删除发票其中一张发票时,发票号码要自动维护。
2、几个人同时开票,发票号码要求能够连上。
 
事务提交,可以保证一致性
 
在最后保存时才真正生成发票号,这样可保证不会重复。
 
在保存的时候生成发票号码。
号码是存取max(原有发票号)后计算。
将发票号设置为主键,以备出错。
一定在事务里面进行。
 
1、发票有印刷好的发票号(没有税务局也不让),程序必须打印出发票号,二者必须一致。
参见机制增值税发票样式。
2、发票不可以删除,只能在没有打印前修改,如果已经打印则只能作废!
3、几个人同时开票时,每人认领一本发票(如50张)<领用登记>,用完后再申请。
如此分段,大家互不干扰。
具体做法:1、将发票分本(事实上也是分本的),每本发票一条记录,记录有起止号码,
已开张数等内容。
2、每一个操作员要开发票之前,先必须选定一本发票。计算机实现是调出可用
的所有发票记录(未开完的、靠起止号和已开张数判断),显示每本的起止号,
供用户选择,由于发票上事先印有发票号,用户知道选那一本发票。
3、操作员选定发票后,对该本发票所在的记录加锁(Lock),这样其他用户就不能
对该本发票做任何操作!
4、进入开票程序,就可以显示要开的发票号,此时用户应对照一下是否与事先
印刷好的发票号一致,若一致,就开,开完一张后,本本发票已开发票数+1,
同时当前发票号递进1,直到本本发票开完为止。操作员再选择另一本发票。
所以, 不存在A开#0000125 马上B就开#0000126的情况。
 
1、如Qingzhong所说发票是印刷好的发票,已经编号了,不是一本一本的,是连续纸,不好
意思,忘记了说。另外在开票时,要求同时开几张发票(是收费部门),如果开的票中已在
其它地方交费了,该张发票要删除(凭在其它地方交费收据)。
2、发票号码还要求能够修改,因为有时发票可能作废。
3、不能在最后保存时生成发票号码, 因为打印时也要把电脑生成的号码打印到发票上去,
如果最后生成的话,就有可能不一致。
4、读上次所开最后一张发票号码时从哪里读出来,是从发票主表里面呢还是把上次号码保
存到本地电脑上,INI文件或注册表里面。

 
用SQL中的IDENTITY定义发票号码.
 
发票的前十位是发票代码,后八位为流水号,
你可以将后面的流水编号的前两位进行拆分放到
ini文件中,
如流水编号为19******
在INI文件中就可以拆分为
11******
12******
13******
14******
15******
16******
17******
18******
19******
这样就可已保证有9台机器进行同时开票,而且每开一张票就将INI文件中的相应流水号头
的流水号加一,然后进行更新,这样就可以保证开出的不重复的发票号了。不能采用查询
数据库中最大发票号然后加一的方法,因为这样做,该表会被锁住,其他人在同时开票时
就会出错。
 
据我所知,发票只能作废而不能删除,而且每一张发票都事先有税务机关编号
 
这个问题这么久了请斑竹强制结贴
 
后退
顶部