SQL数据库的管家婆出错分析及修复方法:.zip
(20.37 KB, 下载次数: 147)
补充内容 (2012-2-22 10:29):
交流群:7083152
补充内容 (2014-2-9 11:14):
SQL简单数据的出错分析及修复方法:
简单的数据结果表:
1)基本信息表
名称 代码
职员信息表 employee
库存商品信息表 Ptype
往来单位 btype
摘要表 Abstract
地区信息表 AreaType
会计科目表 atypecw
仓库信息表 Stock
部门信息表 Department
2)表格单据清单
名称 代码
订单索引表 DlyndxOrder
订单明细表 BakDlyOrder
单据索引表 Dlyndx
进货单明细表 Dlybuy
销售单明细表 BakDlyOrder
零售单索引表 Dlyndxretail
零售单明细表 Dlyretail
其他单据明细表(比如调拨单,收.付款等) Dlyother
凭证明细表 Dlya
3)其他常用表:
名称 代码
操作员表 Loginuser
系统初始值表 Sysdata
系统配置表 Syscon
单据配置表 vchcon
单据类型表 Vchtype
自动盘赢盘亏表 CheckedCount
列配置表 ColConfig
商品库存分布表 GoodsStocks
期初商品库存分布表 IniGoodsStocks
库存上下限报警设置表 GoodsWar
客户跟踪价格表 Price
期初发货、委托、受托商品库存表 IniCommission
发货、委托、受托商品库存表 Commission
发货结算单明细表 Sendjsdly
固定资产基本信息表(包括固定资产类别、增减方式、使用状况) Fixbasic
固定资产减少 Fixdel
固定资产折旧明细 FixDepDetail
固定资产明细表 FixDetail
会计期间表 MonthProc
期初借进借出商品表 Lendborrow00
借进借出商品表 Lendborrow
门店登记信息表 Posinfo
常用表中的主要字段介绍
1.商品信息库(ptype)
名称 字段 注释 数据类型
商品ID typeId 唯一,系统自动累加 varchar(25)
父ID ParId 父类的记录号 varchar(25)
级数 leveal Smallint
现有儿子数 sonnum 一般来说soncount大于,等于sonnum数 Int
曾有儿子数 soncount Int
商品编码 UserCode varchar(26)
全名 FullName varchar(66)
简名 Name varchar(30)
规格 Standard varchar(20)
型号 Type varchar(20)
地区 Area varchar(30)
备注 Comment varchar(250)
最新进价 recPrice numeric(18,4)
是否删除 deleted bit
成本算法 costmode int
记录号 Rec 系统自动生成,唯一 int
父记录号 ParRec int
条码 barcode varchar(50)
注:销售退货取的入库商品的成本首先取最近加价值(recprice),如果没有的话才取当前库存成本值.
2.往来单位信息库(btype)
与商品信息库相同的字段这里就不介绍了
名称 字段 注释 数据类型
应收发生额 Artotal Numeric(9)
应付发生额 Aptotal Numeric(9)
期初应收 Arttl00 Numeric(9)
期初应付 Apttl00 Numeric(9)
是否客户(还是供应商) Isclient Int
应收超额 Arlimit varchar(66)
应付超额 Aplimit varchar(30)
3.职员信息表,仓库信息表,地区,部门的信息表的结构都跟商品信息表的差不多.
4.会计科目表(atypecw,atype)
名称 代码 注释 数据类型
借贷方向 direction char(1)
借方全年累计发生额 debit 用于查询利润表中的本年累计 numeric(18,2)
借方期初发生额 Debit00 numeric(18,2)
借方发生额01…12 debit01 每个会计期间的借方发生额 numeric(18,2)
当前借方余额 DebitTTL numeric(18,2)
期初借方余额 DebitTTL00 numeric(18,2)
期末借方余额01…12 DebitTTL01 每个会计期间的借方余额 numeric(18,2)
贷方全年累计发生额 lend 用于查询利润表中的本年累计 numeric(18,2)
贷方期初发生额 Lend00 即期初帐务数据中的本年累计发生贷方 numeric(18,2)
贷方发生额01…12 lend01 每个会计期间的贷方发生额 numeric(18,2)
当前贷方余额 LendTTL numeric(18,2)
期初贷方余额 LendTTL00 numeric(18,2)
期末贷方余额01…12 LendTTL01 每个会计期间的贷方期末余额 numeric(18,2)
期初本年损益累计发生 debitlend numeric(18,2)
注:这个表中的科目余额发生额的值,都是通过发生的相关业务单据计算出来的值,我们一般不做直接修改。
5. 单据索引表(dlyndx)
名称 代码 注释 数据类型
单据号 Vchcode 系统生成,唯一,与明细表是通过vchcode相关连的. numeric(10)
制单日期 Date varchar(10)
物流单据编号 Number varchar(60)
单据类型 VchType 在VchType表中可以查询到 numeric(4)
物流单据摘要 summary varchar(256)
凭证编号 Comment int
往来单位ID btypeid 往来单位(btype)中的typeid varchar(25)
职员ID etypeid 职员(employee)中的typeid varchar(25)
仓库ID ktypeid 仓库(stock)中的typeid varchar(25)
仓库ID2 ktypeid2 调拨单等需要两个仓库的单据时用 varchar(25)
物流科目 ifcheck 物流单有的要输入的科目 varchar(25)
审核人ID checke varchar(25)
会计期间 period smallint
红冲标记 RedWord 为’T’时表示这张单据是红冲或被红冲单据 char(1)
被红冲标记 RedOld 为’T’时表示这张单据是被红冲单据 char(1)
登帐人ID accounte 空的话是未登帐 varchar(25)
制单人ID InputNo varchar(25)
草稿标记 draft 1 草稿单据
2 已过账单据
3 临时单据 int
单据合计金额 Total numeric(18,2)
单据的票据类型 BillType int
部门ID projectid varchar(25)
Dlya,dlysale,dlybuy等明细表中记录的是所有单据发生的明细,这里不作详细介绍比如说要修改某张销售单据中某个商品销售价格或者销售成本,在dlysale里面我们就可以修改的字段是price,total或者costprice,costtotal字段值,还要将dlya中对应的科目值重新写一下.
6.系统初始值表(sysdata)
名称 代码 注释 数据类型
系统编号 SubNo int
项目名称 SubName varchar(30)
项目值 SubValue varchar(100)
备注 SubComment varchar(30)
注:表中subname=period是会计其间;
startdate:做帐开始日期;
niover :是否已经开帐,0为未开帐,1为已开帐;
enddate:做帐开始日期;
versionno:软件的版本序列号
7.商品库存分布表(goodsstocks),期初库存(inigoodsstocks)
名称 代码 注释 数据类型
商品ID PtypeId varchar(25)
仓库ID KtypeId varchar(25)
批号 JobNumber varchar(20)
生产日期 OutFactoryDate varchar(13)
库存数量 Qty numeric(18,4)
成本单价 Price numeric(18,4)
库存金额 Total numeric(18,2)
批次 GoodsOrder 系统值 int
注:商品的库存分布和批次详情都是写在这个库中的,如果商品在某个仓库中的数量和金额都为0的时候,在这个表中是不应该显示出来的.
期初库存(inigoodsstocks)是同样的,我们这里也就不单独介绍了.
8.客户跟踪价格表(price),跟踪的都是折前价格
9. 固定资产明细表(Fixdetail)
名称 代码 注释 数据类型
vchcode vchcode numeric(18)
usercode usercode char(25)
date date datetime
Fullname Fullname char(50)
DepartmentID DepartmentID 这个是部门id,不可缺少 int
Hisdep Hisdep 折旧金额 numeric(18,2)
depatypeid depatypeid 折旧对应科目 varchar(25)
简单数据的修复方法:
1.清除超级用户密码:
update loginuser
set password=’’
where etypeid=’00000’
2.进入账套时提示:‘invalid variant type conversion’
(1)drop procedure z_checkpassword
(2)CREATE PROCEDURE z_checkpassword
AS
select l.* , e.fullname as efullname from loginuser l, employee e where l .etypeid=e.typeid
return 0
(3)delete from loginuser
where etypeid not in (select typeid from employee)
3.期初库存商品数量为0,但是不能删除基本信息。
Delete from inigoodsstocks
Where qty=0 and total=0
4.辉煌版中由于以前版本的问题造成的期初收入类、费用类科目有余额,利润没有清0, 以致资产负债表不平,将收入支出类科目清零
UPDATE atype
SET TTL00 = 0
WHERE (typeId LIKE '00003%') OR
(typeId LIKE '00004%') OR
(typeId='0000500002')
5.辉煌版中点击库存状况时出现提示: invalid variant type conversion
检查一下ptype表中是否有字段长度过大的情况,比如prepreice4的值是否异常大,如是在查询分析器中执行:
Update ptype
set preprice4=0
where prepreice4>1000000
6.辉煌版中“用户口令及权限设置”中增加一新用户总是排在“超级用户”前而且不允许删除,“超级用户”却可以删除
Loginuser中记录的顺序错了,在查询分析器中运行:
begin tran
select * into #t from loginuser order by etypeid
truncate table loginuser
insert into loginuser select * from #t
commit
7.如何将数据库物理文件恢复到SQL SERVER中,
情况一:有*.mdf和*.ldf文件,
sp_attach_db @dbname = N'test',
@filename1 = N'd:\mssql7\data\Test.mdf',
@filename2 = N'd:\mssql7\data\Test.ldf'
注:@filename1 = N'd:\mssql7\data\Test.mdf':
物理数据库数据文件名称(包括路径,主文件名,扩展文件名);
@filename2 = N'd:\mssql7\data\Test.ldf'
物理数据库日志文件名称(包括路径,主文件名,扩展文件名);
情况二:只有一个*.mdf文件:
EXEC sp_attach_db @dbname = N'guest',
@filename1 = N'c:\medserver\data\abc.mdf'
注:c:\medserver\data\abc.mdf为*.mdf文件的路径
以上两种情况,将文件恢复后,还要在master数据库中的graspcwzt中添加数据库名与帐套名
8.如在管家婆中做年结存时,提“超时已过期”,可在数据库中手工做年结存。
辉煌版:
exec z_yearclose
标准版:
a. exec CW_F_YearClose 1
b. exec CW_F_YearClose 2
先执行a,再执行b
9.日期录入错误的处理方法
步骤一:
首先在查询分析器中查找日期>当前日期的单据,执行语句如下:
select * from dlyndx where date>’yyyy-mm-dd’
(注:yyyy-mm-dd为当前日期格式yyyy为年,mm为月,dd为日)
步骤二:
修改日期:
1)、如只有年份录入错误,如把2002-12-31录成2003-12-31,则执行:
updata dlyndx set date=’2002’+right(date,6) where date>’yyyy-mm-dd’
updata dlya set date=’2002’+right(date,6) where date>’yyyy-mm-dd’
然后根据dlyndx中的vchtype确定单据的类型,然后修改对应的表。
如果是销售单:
updata dlysale set date=’2002’+right(date,6) where date>’yyyy-mm-dd’
进货单:
updata dlybuy set date=’2002’+right(date,6) where date>’yyyy-mm-dd’
其它的单据:
updata dlyother set date=’2002’+right(date,6) where date>’yyyy-mm-dd’
2)、如日期全部需要修改,则执行:
update dlyndx set date=’YYYY-MM-DD’ where date>’yyyy-mm-dd’
(YYYY-MM-DD为输入的正确日期的格式)
然后依次把dlyndx改为dlya 执行。然后确定单据的类型,修改其它的单据。
步骤三:
修改sydata表中的当月的结束日期。
Update sysdata set subvalue=’yyyy-mm-dd’ where subname=’enddate’ (yyyy-mm-dd为过账单据的最大的日期,可由下列语句查出:
Select max(date) from dlyndx where draft=2
步骤四:
修改月结存信息表monthproc.
10.辉煌版中自动盘盈盘亏不能使用,每次使用时把盘点数量输入保存后再打开,同一商品就会变为几个乃至几十个。
解决方法:是把CheckedCount库清空。
在查询分析器中执行:delete from CheckedCount
11、标准版中在应收款查询和应付款查询中,选择同一时间段时往来对账的此前余额与明细账本中的此前余额不一致。
原因:查询一下在明细账本中有收、付款单,但在往来对账中是否有收、付款单,如往来对账中没有,则是由于在dlyndx中btypeid有记录,而dlya中btypeid为空造成的。
解决方法: 在查询分析器中执行:
update dlya
set btypeid = b .btypeid
from dlya a inner join dlyndx b
on a.vchcode = b.vchcode
where a.vchtype in(4,66)
12.在登账时提示“科目已经删除或者分类”,不能登账
原因:有些会计科目已经分类或删除,而凭证指向的会计科目却仍然指向它。
解决方法:查找已分类或删除的科目,执行:
SELECT *
FROM atypecw a INNER JOIN
DlyA d ON a.typeId = d.atypeid
WHERE a.deleted = 1 OR a.sonnum <> 0
找出这些科目后,让客户修改dlya中的atypeid,使其指向子类。
13. 标准版登帐时提示科目被删除或者分类的情况:
查找被删除或者分类的科目的执行语句:
SELECT *
FROM DlyA
WHERE (atypeid IN
(SELECT typeid
FROM atypecw
WHERE sonnum <> 0 or deleted=1))
找到之后,重新将科目选择一次.
数据修复组
|