CREATETABLE [invoice] (
[id] integer identity(1,1) notnullCONSTRAINT [invoice_pkid] PRIMARYKEY, --流水号,自动增加
[btype] varchar(2) null, --单据名称(类型),如销售单为XK
[period] varchar(6) notnull, --会计区间, 和accperiod表关联
[bno] intnotNULL, --单据编号
[idate] datetime notnull, --单据日期
[itype] intnotNULL, --发票类型
[taxrate] floatNOTNULL, --税率
[discount] floatNOTNULL, --折扣
[FCur] varchar(30) NOTnull, --外币币别,本币填空字符串
[ExRate] floatnull, --汇率,本币填1
[GoodsID] varchar(50) notnull, --核算成品的货品代码, 默认填空串
[CompanyID] varchar(50) notnull, --核算往来单位的往来单位代码, 默认填空串
[DeptStaffID] varchar(50) notnull, --核算部门的部门员工代码, 默认填空串
[PrjID] varchar(50) notnull, --核算项目的项目代码, 默认填空串
[StorageID] varchar(50) notnull, --核算仓库的仓库代码, 默认填空串
[poid] varchar(50) notnull, --核算订单的订单代码, 默认填空串
[maker] varchar(30) null, --制单人
[assessor] varchar(30) null, --审批人
[tallier] varchar(30) null, --登帐人
[lastupdatetime] datetime null, --最后更新时间
[lastupdateby] varchar(30) null, --最后更新人
[ino] varchar(250) null, --发票号码
[cno] varchar(50) null, --(支)票号
[imemo] varchar(250) null, --备注
[ACID] varchar(50) NOTNULL, --会计科目代码(实收/实付时的科目)
[acmoney] money NOTNULL, --实收/实付金额
[acmoneyb] money NOTNULL, --实收/实付金额(本币)
[CreditDays] intnull, --信用天数
[payDate] intnull, --支付日期
[Address] varchar(200) null, --地址 $s (pos业务单)已经使用
[Contact] varchar(20) null, --联系人 $s (pos业务单)已经使用
[Mobile] varchar(50) null, --手机 $s (pos业务单)已经使用
[Phone] varchar(50) null, --电话
[transportType] varchar(20) NULL, --运输方式
[transportNo] varchar(20) null, --运输单号
[transportFee] money NOTNULL, --运费
[relaapp] varchar(20) null, --关联程序
[relaid] varchar(20) null, --关联ID
[Foot] varchar(50) notnull, --结算方式
[tocompanyid] varchar(50) notnull, --"调拨到"往来单位的代码
[todeptstaffid] varchar(50) notnull, --"调拨到"部门员工的代码
[toprjid] varchar(50) notnull, --"调拨到"项目的代码
[topoid] varchar(50) notnull, --"调拨到"订单的代码
[togoodsid] varchar(50) notnull, --"调拨到"成品的货品代码
[tostorageid] varchar(50) notnull, --"调拨到"仓库的代码
[toaddress] varchar(200) null, --"调拨到"地址
[tocontact] varchar(20) null, --"调拨到"联系人
[tomobile] varchar(50) null, --"调拨到"手机
[tophone] varchar(50) null,--"调拨到"电话
[ID_Ref] intnull, --引用单编号,一般不要填
[ID_Red] intnull, --冲红单编号,一般不要填
[bomtype] intnotnulldefault 0, --BOM构成模式,一般不要填
[s1] varchar(50) null, --留给客户自定义 程序员不应该使用S1至6,留给客户自定义使用
[s2] varchar(50) null, --留给客户自定义
[s3] varchar(50) null, --留给客户自定义
[s4] varchar(20) null, --留给客户自定义
[s5] varchar(100) null,--留给客户自定义
[s6] varchar(200) null,--审批不通过的时候,输入的理由/原因
[d1] datetime NULL, --保留字段(已使用 用于审批时间)
[d2] datetime NULL, --保留字段(已使用 用于仓库确认时间)
[L1] intnull,--保留字段(已使用,是否短款)
[L2] intnull,--保留字段(已经使用, 用于记录单据的打印次数)
[L3] intnull,--保留字段(已经使用,用于按业务单据顺序记录, 成本核算需要)
[i1] intnull,--保留字段(已使用,是否作废的,如果为-1表示作废,因为不知道该字段是否还有其它用,故使用-1这个值)
[i2] intnull,--保留字段 (已使用,用于组装拆分单据的成本模式)
[i3] intnull,--保留字段 (已使用,直拨销售的时候作为toItype用,即第二步骤的发票类型)
[c1] money NULL,--保留字段
[c2] money NULL,--保留字段
[c3] money NULL--保留字段
);
说明:
btype : 单据名称(类型、代码),格式两位英文字母或者数字, 可以通过 进销存-->单据-->(选择你的单据)-->设置-->单据名称 里面看到,如销售单为XK。和btype表关联
period : 会计区间(月份), 和 accperiod表关联,因为很多时候会计所说的“月份”并非自然月,在accperiod里面定义了会计说的“月份”,例如2009年一月(200901)是"2008-12-26"到"2009-1-25".
你要先根据你自己销售单的日期(idate字段) 查询accperiod表,看看你的日期是在那个period范围里面从而取得period的值,填入到本字段
D_="'"
select period from accperiod where startdate<=" & D_ & iDate & D_ & " and enddate>=" & iDate & H(1) & D_
如果找不到记录,说明你的数据不能填入本数据库,可能是因为数据结转到下一年的数据库了,你应该更换你要写入的数据库。详细请看这里:【数据的分库存放】章节
bno : 单据编号,即单号, btype 、period、bno 三个字段一起构成一个唯一的“键”, 也就是说同一种单据类型同一个月份,单号必须唯一。
要增加新单据到表里,必须先得到相同btype和period条件下的bno的最大值,参考以下SQL:
"select max(bno) from " & "invoice" & " where period='" & "200901" & "' and btype='" & "XK" & "'"
获得最大值后,把这个最大值加一,作为新的单号
itype 发票类型 有以下枚举值 1: 收据 2:普通发票 3:增值税发票 4:收购发票
基础数据关联表
[GoodsID] varchar(50) notnull, --核算成品的货品代码, 默认填空串,关联goods表
[CompanyID] varchar(50) notnull, --核算往来单位的往来单位代码, 默认填空串 ,关联company表,如果是销售单,这里就是客户代码,如果是采购单,就是供应商代码,统称往来单位代码
[DeptStaffID] varchar(50) notnull, --核算部门的部门员工代码, 默认填空串 ,关联deptstaff表
[PrjID] varchar(50) notnull, --核算项目的项目代码, 默认填空串 ,关联prj表
[StorageID] varchar(50) notnull, --核算仓库的仓库代码, 默认填空串 ,关联storage表
[poid] varchar(50) notnull, --核算订单的订单代码, 默认填空串 ,关联po表
同样地:toGoodsid等"to"开头的字段也是这样相应的关联表
Add By RobertWang:2013-08-27
另外:因$S单据使用的需要,该单据会在invoice表和bill中分别增加一个字段:
posmemo nvarchar(max)
实现逻辑将会在程序的前台完成。