导航

用友软件维护日志

用友软件的安装,使用,实时错误,数据维护等问题

« 用友通标准业务管理解决方案(进销存管理)商贸通标准版10.2发版说明 »

U8软件维护精要(内部交流)

前  言

    用友U8产品系列问世已近四年,因U8系列产品结构复杂,模块间联系紧密,产品组合方式多样,业务流程难以严格规范化,各营销服务单位在实施和维护工作上遇到不少难题,迫切需要相关的技术维护文档。为更好地服务于全国各地的培训、维护、实施、销售人员,北京用友软件股份有限公司U8服务支持部全体同仁根据三年多的技术积累,并吸收部分分支服务机构的维护经验,总结整理此维护资料,旨在使维护人员在从事现场维护工作时手头有便于查阅的书面技术资料。
    全书以维护问答和专题文章为主,为便于读者分类查询,维护问答按各版本产品自成章节,同时最新产品U8.21又细分为业务、财务、系统三个模块进行详细介绍。专题文章也是各有特色,篇篇精彩。
    由于时间仓促、水平有限,本手册在编写过程中难免有不足和错漏之处,诚待各位读者来信来电大力斧正。同时,为了更好地为大家服务,请将您对本书的建议和您更好的技术解决方案告诉我们。我们将根据您的意见改进我们的工作,以便形成信息流传递的良性循环,使全国服务体系的工作水平迈上一个更高的台阶。
    由于本书中收录的维护问答,均是根据维护个案整理而成,故少量维护问答缺少普遍性。但考虑到这些问题可能在小范围内还可能发生,而且我们希望这些问题的解决方案可以启发维护人员的思路,所以,凡我们遇到过的问题均写成维护问答,收于本书中。在实施维护的过程中,需牢记:“为用户调数据前一定要先做数据备份。”
    最后,我们衷心希望此书能成为您的好帮手。

 

                                                      北京用友软件股份有限公司
                                      U8服务支持部
                                                                               2002年10月


目    录

一.U8 8.21业务篇 1
1.采购管理 1
2.销售管理 7
3.库存管理 19
4.存货核算 30
二.U8 8.21财务篇 41
1.总帐系统 41
2.应收应付 45
3.固定资产 50
4.工资系统 56
5.行业报表 61
6.UFO报表 61
7.合并报表 66
8.现金流量表 67
9.财务分析 68
10.资金管理 69
11.成本管理 69
12.决策支持 70
三.U8 8.21系统篇 72
1.系统管理 72
2.WEB功能 79
3.环境问题 81
四.U8 8.20版 83
五.8.13版 90
六.8.12版 97
1.8.12 SQL版 97
2.8.12ACCESS版 98
七.财务通 116
1.财务通8.20 116
2.财务通8.21 116
八.专题文章 122
1.U8 8.21 122
2.其他 182
附录:U8二次开发成果简介 222

一.U8 8.21业务篇
1.采购管理
2.销售管理
3.库存管理

4.存货核算

二.U8 8.21财务篇
 

U8 8.21系统篇


四.U8 8.20版
1、问题描述:U8 8.20版总帐,在使用总帐系统的帐簿中“明细帐打印”功能(正式帐簿)进入预览界面退出时死机。不同的环境不同的帐套为什么均出现预览死机的现象,如果不预览直接打印又可以。请问为什么?
 解决办法:请检查那几台机器的操作系统,如是win98请安装第二版,或升级操作系统。由于打印控件和预览控件不一样,就会出现预览退出死机,换个操作系统试试看。另外请进演示帐套看是否死机,如也是这样,请更换打印机的驱动,或重装用友软件,换个环境测试。如演示帐套没有这现象,判断环境没有问题,可替换数据库的打印表gl_mybooktype,gl_myoutput,如数据量比较大,出现溢出错误,可以使用补丁

2、问题描述:U8 8.20版总帐,工作报告说由于本月工资未结帐,导致总帐也不能够结帐。我的工资模块没有买,是在订货时试用了一下,目前正式到货仅仅安装了zw 和ufo模块,请问怎么办?
 解决办法:在数据库中将该帐套的数据库(ufdata_帐套号_年度)的表accinformation中的工资的启用日期清除,以及ufsystem数据库中的表ua_account_sub中的该帐套的csub_id=WA的两条记录删除。

3、问题描述:U8 8.20版应收帐款,在发票列表中查询发票,发现有发票号及发票内容一模一样的发票,打开表salbillvouch,却没有重复记录。(使用模块:总帐、应收。)发票为普通发票。为什么?
 解决办法:该套数据的Ap_SalBill视图中有重复记录,造成的原因是gl_accvouch表中的凭证线索号(与其它向总账传递凭证的关联字段)不对,即一张期初的凭证的线索号与该发票所生成的凭证的线索号一致。所以针对该数据,执行如下语句,修改错误的凭证线索号: UPDATE GL_accvouch SET coutno_id = NULL WHERE (iperiod = 0) OR (iperiod = 21)。

4、问题描述:U8 8.20版应付帐款,想在应收应付中实现远程录入结算单,不知应采用哪种方式实现?
 解决办法:根据需求,可以使用C/S结构,用客户端去访问服务器,可以用点对点的方式(这种方式费用最省),也可以用专线接入,跟服务器连接上后,就可以像局域网里一样去运行用友软件。

5、问题描述:U8 8.20版固定资产,从2001年9月从8.11升级到U8.20后,固定资产从2001年9月开始,固定资产的累计折旧都等于当月,十月份累计折旧又等于两个月的折旧额,以后直到今年所月累计折旧都是这样,单月累计折旧等于一个月的折旧,双月等于两个月的本月折旧,不进行累加,另建一套帐,把卡片,折旧表,汇总表,资产类别表导入后,提折旧,依然累计折旧等于本月折旧。什么原因?
 解决办法:由于升级过程造成数据库中折旧表的已计提月份和累计折旧额数据丢失,导致每月计提折旧后累计折旧额不正确。重新添加丢失的数据即可。

6、问题描述:U8 8.20版固定资产,在查询卡片样式和固定资产卡片时,系统提示错误:1)由于win2000 server身份认证问题,导致无法读取样式文件;2)样式文件损失或不存在。经查样式文件应该不坏,且磁带中还原能使用前文件(3月8日备份带,且当时能使用样式文件)。
 解决办法:请检查帐套所在文件夹的共享设置,要求是everyone的完全共享。或升级到8。21版本。

7、问题描述:U8 8.20版存货核算,存货档案已使用:有的居然可以删除,导致存货收发记录和账簿中有的存货而存货档案中没有。为什么?
 解决办法:数据表的许多关系及主索引被破坏,修复数据关系及索引即可。

8、问题描述:U8 8.20版存货核算,查询收发存汇总表时,其中有一存货期初是10个,但在存货核算系统收发存汇总表查询时期初数为1个,在库存管理收发存存汇总表又是正确的,不知何原因?
 解决办法:将结存数量大于0、小于0和等于0,以及查看未发生业务 几个选项都打上对勾。例:期初为2,发出为3,结存为-1,如小于0未打对勾,则该条在存货的收发存表不显示。

9、问题描述:U8 8.20版存货核算,材料出库单上只录数量,在存货核算中对此材料出库单进行记帐后,在收发存汇总表中查此材料只有数量而没有金额.恢复记帐再记还是没金额。请问什么原因?
 解决办法:全月平均计价方式的仓库需进行期末处理后,才有金额。

10、问题描述:U8 8.20版库存管理,数据问题:U8调拨单保存时提示“保存单据失败”。为什么?
 解决办法:经查transvouchs中的autoid有非法字符,重建新表,在设计中将表和索引的属性、字段的属性多加上,然后将原来除autoid的数据导入新建表中即可。

11、问题描述:U8 8.20版销售管理,销售发票列表打开后,无法查询货物名称,数量金额等重要数据,但联查发票则没有问题,无法进行货物、数量、金额的查询的筛选,发票列表中的项目设置也无此项目,而表体中该表体已经设置。
 解决办法:到设置\选项\高级选项下有一开关“单据列表只显示表头项目”,设为显示表体项目即可。

12、问题描述:U8 8.20版销售管理,作单据时,U8怎么实现一条纪录的仓库信息自动复制到下一条纪录?
 解决办法:U8可通过点击“增行”会自动带出上一行仓库名称。

13、问题描述:U8 8.20版销售管理,现存量与实际结存不相等。
 解决办法:1)现存量计算涉及的表有:st_totalaccount、rdrecords、dispatchlists、endispatchs、salebillvouchs等,请查看以上各表,重点查看st_totalaccount表。2)可能是ufsystem数据库中的ua_account_sub中缺少库存的启用日期记录。请根据数据具体情况查找原因。

14、问题描述:U8 8.20版销售管理,客户档案中有批发价,在发货单中如何选择录入其批发价?
 解决办法:先在选择菜单中选择价格管理,在客户档案中选择批发价,在业务菜单下的价格管理-存货价格/客户价格中录入。

15、问题描述:U8 8.20版销售管理,同时按客户名,部门,产品名称,业务员的分类汇总应该用什么方法能实现?
 解决办法:U8.20已经解决此问题。 可以从[分组条件]中选择要汇总的字段名称,在其后的分组栏中双击打勾,表明按该分类进行汇总. 用鼠标点击字段名称(即按住鼠标左键),将其拖动至您想放置的位置,然后松开鼠标。或者在分组条件中调整分组的顺序(即[]中的数字)。请注意“客户[1]+部门[2]”与“部门[1]+客户[2]”是不同的。“客户+部门”表示各个客户的业务是由哪些部门做的;“部门+客户”表示各个部门做了哪些客户的业务。再选择要进行小计的字段名称,在其后的[小计]栏中,双击打勾。如果您所要汇总的字段名称不在列表中,可以进入报表界面,点击[格式]按纽。在[格式]按扭中,可以定义数值型的字段是‘汇总’或是‘不汇总’,‘显示’或是‘不显示’只有定义为‘汇总’的数值型字段,按[小计]和[合计]按扭才汇总,否则并不汇总;一般而言,应将数值型的字段设置为“显示”,不设置为“分组”;非数值型的字段设置为“显示”后,还应设置为“分组”,否则显示的内容只取该记录的第一条。

16、问题描述:U8 8.20版销售管理,1)无论是套打还是直接打印发票,都不能打出大写金额,有没有解决办法?2)请问发票上的“记帐人”是如何使用的?
 解决办法:1)在单据设计中添加表头项目‘价税合计(大写)’。2)存货核算选项\销售成本核算方式为‘销售发票’时,存货核算记帐后填写销售发票的记帐人标志。

17、问题描述:U8 8.20版系统管理,网点系统是win98se(第二版),MS SQL SERVER7.0(服务器是windows2000,ms SQL server7.0),如何关闭网点老是弹岀“请输入SA口令”窗口,或如何关闭正在运行的server95程序?1)我的网点系统正在运行Sqlserver和Sqlmangr两个程序,有必要吗?如何关闭?
 解决办法:弹岀“请输入SA口令”窗口是因为系统MSADO15.DLL出错,点了取消还会出来,要重新注册,在《专题文章》里有篇章专门解决这个问题。server95是用友服务文件,不用用友软件时可以用结束任务来关闭它。2)Sqlserver和Sqlmangr两个程序是有用的,当你退出SQL,他们就会自动消失。


五.8.13版
1、问题描述:8.13 SQL版总帐,在总帐辅助帐薄的客户科目明细表中,有些客户的期初余额与本期发生额分离显示。请问该如何解决?
 解决办法:客户编码为03c41中c为全角状态下输入的字母,改正为英文输入下的大字字母。 1.将customer、gl_accass、gl_accvouch的客户编码关系删除 2. 执行以下语句: update customer set ccuscode='03C41' where ccuscode='03C41' update gl_accass set ccus_id='03C41' where ccus_id='03C41' update gl_accvouch set ccus_id='03C41' where ccus_id='03C41' 3.重新增加已删除的关系。

2、问题描述:8.13 SQL版固定资产,固定资产卡片减少,明细帐查询不到,为什么?
 解决办法:输入已减少的资产编号,这样可以查到(月份选1-12).否则的话,软件不允许查看已减少资产的数据。或者在卡片管理中查询。

3、问题描述:8.13 SQL版固定资产,当执行打印操作时提示,打印错误:(-101),预览也没法。8.13网络版/winnt 4.0。请问是什么原因造成的?
 原因分析:在8.x版本的固定资产管理软件的使用过程中,我们会发现帐套目录下多出几个比较另类的文件。而如果没有的使用固定资产软件的用户则不会出现这几个文件。这些文件只有当固定资产正常初始化后才会出现,现在作一下详细说明。这类文件可以分成二类。一类是*.vts文件,这是卡片样式模板文件;一类是*.rep文件,这是报表模板文件。对于第一类*.vts文件,刚启用固定资产系统后,会默认出现一个标准通用样式模板文件1.vts。如果用户在有自定义卡片样式,则还会存在其他*.vts文件,例如9.vts等(肯定是“数字.vts”)。对于第二类*.rep文件,无论任何时候都只存在二个文件,分别是Fatail.rep和Fatitle.rep。不会出现其他文件。以上文件标准大小为14K。因此,当使用固定资产软件时,至少必须存在3个模板文件,即1.vts,Fatail.rep和Fatitle.rep。 *.vts既然是卡片样式模板文件,则如果丢失了需要的文件会出现什么结果呢?您可以正常的打开卡片管理,但是要双击某张卡片却提示“卡片样式文件不存在”。同时如果在卡片管理下点“文件”菜单下的打印并选择打印卡片,则也不能正常打印,会同样也会提示“卡片样式文件不存在”,不能进行正常打印。可是如果用户发来的数据仅仅是UFDATA.MDB,而它又存在自定义卡片样式,这时候怎么办呢?很简单,我们可以修改数据库不让他的自定义样式起作用,首先我们打开这套ufdata.mdb,打开Fa_AssetTypes表(资产类别),找到sModelID字段,使用一个SQL查询语句,将该字段全部更新为1。当然,原来这个字段的数据可能不是1。因为我们知道,卡片样式是定义在资产类别上的。这样改过之后我们就可以使用标准通用样式,来查看卡片了。最后给用户发回数据时不要忘了将该字段改回原来的样子。同时如果该文件丢失,在月末结帐时回给出提示“找到下列错误:此集合找不到此项目”,并指出月末结帐前状态备份失败可能无法恢复月末结帐。此时一定不要继续下去,一定要找到他需要的卡片模板文件放到帐套目录下,否则以后不能恢复月末结帐就得不偿失了。另外,如果月末结帐正常,则在相应帐套的年度目录下,会出现*.vt1、.vt2、.vt3…….vt12等文件。其中1、2、3、4……12表明是哪个月份备份的。这些文件是压缩文件,除非您在一年内对同一个样式作过改动,否则所有这些文件解压缩后都是一样的。 Fa*.rep文件相对而言简单一些。他们永远只有2个,丢失或者损坏这二个文件,可能造成报表无法预览和打印,打印报“打印错误-101”,但不影响报表显示。除此之外,丢失或损坏该文件不会有其他方面的影响。

4、问题描述:8.13 SQL版应收应付,在以应收票据抵应收款这一会计实务中,不能完成凭证的制证,如何在应收系统中操作这一实务?(因为这二个科目都是客户受控科目)
 解决办法:票据填完后会自动生成一张收款单,该收款单核销即可形成上述凭证。

5、问题描述:8.13 SQL版应收应付,在使用应付系统时希望把其他货币资金作供应商核算,但是在作一笔借 预付 贷 其他货币资金时在应付系统由核销单生成凭证时提示其他货币资金为受控科目,请问如何处理?
 解决办法:这样的凭证目前只能通过应付系统的转帐处理中的功能来实现。

6、问题描述:8.13 SQL版系统管理,8.11A的产品如果升级到8.13要不要更换加密盒?
  解决办法:需要更换加密盒。

7、问题描述:8.13 SQL版销售管理,在单据设计里头的打印格式和单据录入格式为什么不能设成是不同的格式,发货单的打印格式和发货单的录入格式不同。请问应如何实现此功能?
 解决办法:如果用套打的话,能够实现,可以设置套打格式,打印用套打即可,设置的非套打时的格式,即可用于单据录入

8、问题描述:8.13 SQL版存货核算,库房间互相调拨,适用科目不一样,正常记账和特殊单据记账均没问题,生成凭证正确,但保存凭证时,系统提示“受控科目不能增删改分录”,请问该怎么办?
 解决办法:将数据库code表中的cother字段中带有ia值的,将ia值删除即可。

9、问题描述:8.13 SQL版存货核算,此数据启用的模块是总账、存货、销售,在存货中设置了存货科目和对方科目后,生成凭证时死机,不设置对方科目生成凭证可以,请问该如何处理?
 解决办法:这套数据中accinformation表中存货分类的编码级次的设置与gradedef(编码级次表)设置的不符。将accinformation中的csysid='aa',cid='01'的记录的cvalue字段改为 11211 即可

10、问题描述:8.13 SQL版库存管理,进入收发存汇总表时提示:"Column names in each table must be unique,Column name'其它入库_入库数量' in 'Tblresult_plj_Temp' is specifified more than once."为什么?
 解决办法:收发类别设置中名称为其他入库的有重复,修改其中一个名称避免重复即可。

11、问题描述:8.13 SQL版库存管理,当填采购入库单时就会提示“下标越界”或“无效的过程调用或参数”,并不能填入各类项目,怎么解决?
    解决办法:先建一新帐套,删除原帐套的invoiceitema,从新建帐套中导入此表,注意表的关系也带过来,即可,有关查询zpurkdhend,zpurkdtail也导。

12、问题描述:8.13 SQL版库存管理,存货档案有部份产品已停用了,为何停用的产品还在库存管理的收发存汇总表显示?
    解决办法:存货档案停用表示以后不再使用,即在做各种业务时不能使用,但因以前发生的记录数据还是存在的,所以帐表查询中可以显示,否则将造成统计数据不正确。

13、问题描述:8.13 SQL版库存管理,在进行远程引入时,提示是,正在引入数据,本次应导入50张,实际导入50张,是否保存本次操作,点了是以后.然后就又出现一个提示.本次已引入O张,实际应引入50张,然后系统就自动生成一个记事本的文件在KCGL下,到KCGL的文件下去看,上面就有单据号是多少,在库存管理下查找该单据号,而实际上根本没有。请问为什么?
    解决办法:库存管理远程应用导入时,检查导出的数据与将要导入数据的单据号、rdrecord的id号、rdrecords的autoid号是否有重复,如果有将不允许导入。从上述描述看,应该是导出的数据与要导入数据库有以上任意一种情况的重复。请注意,使用远程应用时,双方的远程标识号应不同。


六.8.12版
1.8.12 SQL版
1、问题描述:8.12 SQL版总帐,用户在使用往来帐总账核算时,帐龄分析后,应付帐款可以看到帐龄,而预付款不能显示。不能显示的原因预收、预付科目设成供应商、客户往来在总账中核算,查询帐零分析,对于供应商往来只分析贷方余额,客户往来只分析借方余额。
 解决办法:1)将预付科目借方发生额用贷方红字表示;2)改成在应收应付系统中核算往来业务。

2、问题描述:8.12 SQL版总帐,带辅助核算科目明细帐显示不正确,怎么办?
 解决办法:8.12Sql总帐带辅助核算,期初有余额,本期无发生,明细帐显示平的修改语句。update gl_accass set me=mb where md=0 and mc=0。

3、问题描述:8.12 SQL版UFO报表,报表审核错误,请问怎么解决?
 解决办法:需将报表文件夹放在ufo目录下才可。
 
2.8.12Access版
1、问题描述:8.12access版总帐 ,凭证不能审核及记账,请问该如何解决?
 解决办法:凭证及明细账表gl_accvouch已经损坏,重建凭证及明细账表。

2、问题描述:8.12 Access版总帐,进入Execl里面打印一些文档之后,再进入总帐系统打印时,它就会弹出一个三角形里面有一个感叹号的符号,然后要你确定之后就不能打印了;如果真的要打印必须重新启动电脑进入总帐才可以,不知道是什么问题呢?
 解决办法:系统的资源不够(可能是硬盘空间不足),WINDOWS的虚拟内存不能正常使用,建议清除不用的文件,把硬盘空间加大。也可以查一下病毒。

3、问题描述:8.12 Access版总帐,进入填制凭证时提示“实时错误19,下标越界”,凭证有些有借无贷,有贷无借,无摘要等奇怪,制凭证时提示,ACTIVEX 部件不能创建对象转到7月份首页时发现“实时错误19,下标越界”,不知为何进入控制台时提示:AA -IXCHGRATESTL    AA-ICTLSTLPROVID?
 解决办法:数据库损坏较严重,关系丢失,ACCINFORMATION表错乱.无法修复。最好恢复以前的备份。 如无法恢复,可以新建个空的数据库,用以前正常的UFDATA.mdb中的ACCINFORMATION的表导入,并把原来的UFDATA.mdb中的其他表导入,把正常的库中的查询导入,并修复数据库。经测试,用新建的帐套中的ACCINFORMANTION表导入,再导入原库的其他表,最后进行修复后,问题不再存在。

4、问题描述:8.12 Access版总帐,从一月份开始“客户业务员余额表”合计数,不等于,“科目余额表”合计数。怎么处理?
 解决办法:有的凭证上没有填写业务员,所以造成客户业务余额表的余额和总帐的余额不一致,即只统计填写了业务员的凭证的金额。

5、问题描述:8.12 Access版总帐,凭证打印时,一张凭证要打印出10条分录。应如何实现此功能?
 解决办法:用UFO简版,具体方法如下: 1.首先,必须在您的系统中安装用友公司的UFO电子表,建立调整工具的运行环境。有了运行环境后,可用调整工具——UFO简版。这是一个可执行文件。运行此执行文件,屏幕将显示UFO的执行界面,用该工具打开凭证打印模板文件,就可以进行调整了。 2.凭证打印模板存文件放在Windows的system目录下,一共有四个文件,分别是: glpzje.rep(金额式凭证非套打打印模板)、glpzwb.rep(外币数量式凭证非套打打印模板)6.0套打纸调整glpzjetd.rep、7.0连续套打纸调整ufpzjetd.rep(金额式凭证套打打印模板)、ufpzwbtd.rep(外币数量式凭证套打打印模板) 3.使用UFO简版工具对打印模板可进行如下调整: 1] 选择要打印的内容:即可以取消或加入一些要打印的内容,如:经办人等。 2] 改变现有打印内容的位置:如将“附单据数”移到凭证右边打印等。 3] 调整凭证各部分的打印字体:如将金额的字号加大,将标题的字形改为楷体等。 4] 调整行高、列宽。注意,此工具的使用方法与UFO的基本使用方法一致,因此,最好由会使用UFO的人进行操作。 4.模板文件符号说明: 1]非套打模板: > 直接在模板文件中显示的文字,如:“摘要”、“会计科目”、“借方金额”、“贷方金额”等文字将在打印时直接打印出来。 > “@1”、“@2”等为打印内容,数字编号与实际打印内容有对应关系,如:“@4”为凭证标题,“@21”为附单据数,“@25”为制单人。 > “*”表示此处打印大写金额。 > “/1”、“/2”表示第一行的数据、第二行的数据。 > “#15”、“#16”表示合计金额 2]套打模板: > 直接在模板文件中显示的文字,如:“摘要”、“会计科目”、“借方金额”、“贷方金额” 等文字为套打纸的套打表样,由套打纸印制,打印时不被打印出来。 > “@s”后加一段文字,如“@s核算单位”表示这段文字不是套打纸的套打表样,需要打印出来,即在打印时,这样的文字将被直接打印出来。 > “@1”、“@2”等为打印内容,数字编号与实际打印内容有对应关系,如:“@4”为凭证标题,“@21”为附单据数,“@25”为制单人。 > “*”为大写金额。 > “/1”、“/2”表示第一行的数据、第二行的数据。 > “#15”、“#16”表示合计金额。
 
6、问题描述:8.12 Access版总帐,在凭证套打时,用针式LQ1600K2的打印机,有一个帐套打印时有记帐凭证这四个字,可就是没有年\月\日这个日期显示,他们其它帐套都好的,而且设置也都是一样的?请问这是什么原因呢?
 解决办法:察看设置套打时选择的纸型是否相同,所描述的情况是6.0和7.0套打纸的区别。

7、问题描述:8.12 Access版总帐,在建帐套时,启用时间为6月份,为什么在录入期初余额时没有借方和贷方累计数啊?只有一个期初余额,与一月份启用是一样的啊?
 解决办法:将控制面板中区域设置-短日期格式改成yyyy--mm—dd。

8、问题描述:8.12 Access版总帐,由于我公司是五月份刚刚成立,故在录入期初余额时,四月份余额均为零,进行试算平衡及记帐后,录入五月份凭证若干,经审核后记帐时,因屏幕显示2001年1月份未结帐,不能对以后月份记帐而无法继续进行。是否必须录入期初余额数后才能录入凭证。也就是说我公司应录入五月份的余额数后,从六月份才能开始录入凭证?
 解决办法:在建帐套时的启用月份选择有误,应为2001年5月,再记帐即可。由于没有期初余额,所以建议重新建一套帐,将基础设置及已录入若干张五月份的凭证通过“总帐工具”功能引入即可。
 
9、问题描述:8.12 Access版总帐,1)把一月份账结完了,在明细账查询时发现:有些科目,如资产类会计科目的借方数据有些正数,有些为负数,而联查凭证时明明在贷方。(即凭证贷方有发生,账中贷方却无发生,而记在借方以负数表示)现在已经把“借贷控制方向”取消了,但账中还是原来的样子。2)现金流量表取数的问题,公式按一级总账科目+项目目录编码(参照999账套)设置,例子:LET C5=FS("101",月,"借",,,"010101",,)+FS("102",月,"借",,,"010101",,)+FS("109",月,"借",,,"010101",,)但取出的数字为一级科目的所有项目的借方合计。(项目统计表中各项目的合计数,而非010101项目的合计数。)上述问题应如何解决?
 解决办法:1)原因分析:此现象为客户在会计科目设置中进行了“借贷方向控制”修改方法如下:备份数据;反结账(CTRL+SHIFT+F6)或改结账状态gl-mend表;恢复记账前(月初)状态或者用以下A、B、C、D步骤:A、修改GL_accsum表中所有记录金额(每一科目对应12条记录)B、修改GL_accass表中所有记录金额(每一辅助核算科目+项目对应12条记录)C、清空GL_accvouch表1月份cbook(记账人)的值,ibook的值由1改为0(未记账)D、修改GL_mpostcond记录;改CODE表中cclassany_engl的值清空(即不进行借贷方向控制);在GL_accvouch表中过滤出coutsysver的值为false的值,改金额、数量借贷方数据为正确方向。而后清空true(科目的控制方)或false(为科目的控制方的反向);再记账、结账即可。2)方案一:全部采用末级科目取数;方案二:恢复记账前(月初)状态,将进行项目核算的科目的所有父项科目打上项目核算标记,而后记账。

10、问题描述:8.12 Access版固定资产,初始化时出现错误,其提示如下:“由于您和其他用户试图同时改变同一数据,导致Microsft Jet数据库引擎停止进程,不能打开记录集fa-q-yxkp-by,是否重试”。多次重试不能操作。请问什么原因?
 解决办法:删除fa-q开头的所有查询,从模板中重新导入即可。

11、问题描述:8.12 Access版固定资产中,双倍余额递减法在演示账套中的定义是:月折旧率=2/使用年限,月折旧额=月折旧率*期初帐面余额。那么请问一个固定资产是采用双倍余额递减法计提折旧的,它的残值是如何处理?它最后两年的计提折旧也是按照以上的公式去计算吗?
 解决办法:在剩余计提年限为12的倍数时判断: A=月折旧率*该折旧年限期初账面净值 B=[该折旧年限期初账面净值-该折旧年限期初净残值]/剩余计提月份若A=B时由双倍余额递减法转为平均年限法计提折旧。每月折旧=B 。

12、问题描述:8.12 Access版固定资产,打印固定资产明细帐时,前几张打印正常,忽然提示打印错误“67”,检查打印出错卡片明细账为已减少资产。请问该如何解决?
  解决办法:把打印机删除重新安装即可。

13、问题描述:8.12 Access版工资,工资年度结转后,想增加工资类别,出现提示“3421,类型不匹配”。
 解决办法:检查wa_account表是否有问题。这个表是工资类别表。

14、问题描述:8.12 Access版工资,由于误操作,多结了两个月的帐,能否反结帐?
        解决办法:修改wa_account表倒数的第二字段为上月。

15、问题描述:8.12 Access版工资,计提分摊时不能制单。
        解决办法:删除wa_gzft表iyear为2001的记录。

16、问题描述:8.12 Access版工资,某客户使用工资模块有已两个会计年度,在第二个会计年度将帐套名称进行修改,但修改帐套名称之前忘了备份,修改帐套名称之后,无法进入第二个会计年度的帐,请问如何解决?
 解决办法:修改ufsystem数据库中的ua_period表。

17、问题描述:8.12 Access版应付:供应商明细账翻倍。请问应如何解决?
  解决办法:ap_detail中的线索号重复,修改即可。

18、问题描述:8.12 Access版应收应付,应收账款:在应收账款模块中,凭证摘要已输入增值税发票号码,但单位往来科目明细账中的摘要不能显示其增值税发票号码。请问该怎么办?
 解决办法:812在应收系统明细帐的摘要为:科目名称+发票号,生成凭证时修改的内容只在总帐中的明细帐中可以显示:调整后的摘要+客户名称+业务员。 U8.21的应收系统的科目明细帐,可以按录入凭证时的摘要查询,总帐的明细帐中的摘要为原来的修改过的摘要+客户名称+业务员。

19、问题描述:8.12 Access版应收应付,应收系统查询业务帐提示:‘实时错误94’,应收的某些业务帐与科目帐对不上。什么原因?
 解决办法:在ap_detail表中存在的某个客户档案在customer表中找不到,在customer表中添加该档案即可。应收的某些客户的业务帐与科目帐对不上,是由于在ap_detail表中的相关记录的isignsel字段与ccode字段为空,将其添入正确数值即可。

20、问题描述:8.12 Access版UFO报表,在往来款项情况表中一张表所列的项目不够列,需再增加一张表列出,这样后审核公式应怎么设?一张表的公式是这样设的如:b4=ptotal(b5:b26)+ptotal(d4:d26)+ptotal(f4:f26)
二张表应怎么设审核公式使当前表的B4的值等于两张表中所有项的子细目的合计?
 解决办法:可以用表名单元的方法。如用PTOTAL(),则可以用变量在批命令中取合计值,再用IF 语句判断,可以用DISPLAY 显示信息。

21、问题描述:8.12 Access版UFO报表,资产负债表中公式:c6=qc("101",全年,,,年,001), d6=qm("101",月,,,年,,001),有时如果可以取数就没有问题,如果不能就再也取不出数,为什么?
 解决办法:公式应为 QM("101",全年,,"001",年,,,),其中001为帐套号。

22、问题描述:8.12 Access版UFO报表,有个客户建了一套帐,每个科目都按部门核算,部门有20个,当出报表时,客户想按每个部门做一张报表,请问有没有简单的解决方案?如何设置取数公式?或如何使用二次开发?
 解决办法:可以考虑用二次开发的批命令,如:LET &A=GETSTR("请输入部门编号:"),let d2=qm("1301",月,"借","001",2001,&A,,),即部门编码处写上&A的变量。

23、问题描述:8.12 Access版UFO报表,请问有什么办法能将公式列表中的公式导出吗?
 解决办法:在公式列表中用保存按钮,可以输出公式到指定的文件。

24、问题描述:8.12 Access版UFO报表,8.11升级8.12后,在资产负债表中,用"SELECT..."他表取数公式时,提示该公式指定区域无效。怎么办?
 解决办法:他表取数应用RELA,如:C5="A"->B5 RELA 月 with "A"->月,SELECT为本表他页取数。

25、问题描述:8.12 Access版UFO报表中把报表设了文件口令后,取消时却变成了灰白的不能取消,有什么办法解除吗?
 解决办法:先在口令中输入你原来的口令即可取消文件口令。

26、问题描述:8.12 Access版合并报表,新做的现金流量表,在定义各栏目属性时,现金流量表的各项目该定义为哪种属性?属性的设置对编制抵消分录时有无影响?抵消分录该怎样做?请以抵消实收资本、长期投资的分录为例,已经设置投资比例。
 解决办法:设置成抵消项目的项目会自动合并和抵消。如想合并单元,要把该单元设置到抵消项目的期末单元,期初单元不能合并。

27、问题描述:8.12 Access版现金流量表,在自动计算现金流量表时,出现“查询过于复杂”。为什么?
 解决办法:一般情况下,现金流量表的现金对应企业会计账户中的现金、银行存款、其他货币资金等科目。而用户的现金科目设了所有的科目.用户数据有问题。导致不能正常计算出现金流量表。请在初始化中的基本科目设置中把现金科目减少,并在项目来源设置处进行设置。

28、问题描述:8.12 Access版现金流量表,在现金流量表编制时,执行“自动计算”时出现 “Query is too complex.?
 解决办法:可以简化一下项目的来源。

29、问题描述:8.12 Access版采购管理,采购入库单的表单设计增加“单价”、“金额”,但采购入库单不能相应增加——提示保存成功(显示和套打格式都是),为什么?
 解决办法:在系统管理中增加“业务参数”的权限,这样在业务处理时即可显示成本。
 
30、问题描述:8.12 Access版采购计划,在生成任一期间的采购计划都提示网上有人正在生成,请问该如何处理?
    解决办法:删除临时表tecgh 和tecg即可。
 
31、问题描述:8.12 Access版销售管理,实时错误3052错误,请问怎么解决?
 解决办法:在注册表里将hkey_local_machine\software \miscrosoft\jet \3.5 \engines \jet3.5的maxlocksperfile的键值放大。

32、问题描述:8.12 Access版销售管理,从3月份起,有很多零售日报审核生成的发货单只有表头,而表体却没有数据。发货单。零售日报审核无法弃核。导至销售分析表中的“未开票金额栏”数据错误、销售发货明细表错误。几乎涉及有关发货的表都是错误的。为什么?
 解决办法:将最大单号表maxvouch中的dispatch(s)的最大单号改变,弃审错误的单据,然后将dispatchlist中有记录dispatchlists中无记录的删除,最后重新审核。

33、问题描述:数据问题:8.12 Access版销售管理,该账套为2001.07.01同时启用销售、库存、存货、应收、总账,其中销售启用了委托代销,账以做到8月,发现7月的委托代销结算后在库存或存货中看不到该发货单,但做8月的审核及结算就可以看到,请问什么原因?
 解决办法:经检查用户7月建立帐套后,先启用的销售模块(当时并没有启用库存和存货系统)做了委托代销发货单并且做了委托代销结算单,由于没有启用库存和存货系统,因此无法产生相应的销售出库单。

34、问题描述:8.12 Access版销售管理,由发货单生成发票后,修改发票号但不回写发货单上的原发票号,请问该如何解决?
 解决办法:在ufdata.mdb数据库中新建一个查询,运行该语句即可解决(请作好数据备份) update dispatchlist inner join salebillvouch on dispatchlist.sbvid= salebillvouch.sbvid set dispatchlist.csbvcode=salebillvouch.csbvcode。

35、问题描述:8.12 Access版库存管理,1)二月份的盘点单中的账面金额和盘点金额丢失(原来有)。2)三月份的与收发存汇总表的金额对不上。3)四月收发存汇总表的结存单价数量不等于金额。
 解决办法:1)经查看数据,2月份checksvouchs的字段icost为空,根据ia_summary,imonth=2的结存单价填写icost即可。2)盘点单金额=单价×数量,单价取自存货核算盘点时的结存单价。而存货核算的单价=结存金额/数量,由于四舍五入的原因,两个金额不一致。3)收发存汇总表的单价=金额/数量,单价取两位,四舍五入后,再用数量×单价,就会不等于金额。

36、问题描述:8.12 Access版库存管理,1)003仓库(备品配件库)无法盘点,出现13号错误,提示类型不匹配.如果按类别盘点,实际单价和金额又没数据。2)在运行各模块时,总是先弹出一个对话框。
 解决办法:1)该问题是由于003仓库中‘01030105213’存货存在特定情况,在存货系统中查询该存货总帐或在数据库中查ia_summary表即可看出该存货2月份先发出了1个,发出金额¥6,043.59,结存数量为-1,结存金额为¥-6,043.59,系统会自动计算单价为6043.59,4月份收入数量为31个,收入金额为¥6,043.61,结存数量为30个,但结存金额却为¥0.02,因此系统无法根据结存金额除以结存数量自动计算单价所造成的。(结存数量为30个,但结存金额却为¥0.02,这种情况在实际业务中是十分罕见的,因此系统无法判断。) 可在数据库的ia_summary表中将4月份及以后月份记录的结存金额做调整(或调整结存数量),使结存金额除以结存数量不致过小即可,如整除。另:该问题升级到8.2后自动解决。2)在accinformation表中缺少一条总帐系统启用日期的记录,(虽然该用户没有使用总帐系统,但在accinformation表中必须有该条记录),从999演示数据中将该记录复制并粘贴过来,然后将总帐系统启用日期设置值清空即可。

37、问题描述:8.12 Access版库存管理,库存存货出库单列表中查询单据明细时首张、上张、下张、末张按键屏蔽为灰色,不能激活,无法翻查。
 解决办法:把单据定义表VOUCHERS字段CARDNUMBER值为0412的CCARDNAME字段改为‘材料出库单’即可。

38、问题描述:8.12 Access版库存管理,存货不能分类,35601未发现元素。
 解决办法:在编码规则表(gradedef)中,把纪录“存货分类编码”中最后一个字段的值2改为2223,就可以进行存货分类操作了。 另外单据不能记账,上到U8.21就可以了。单据不能记账的原因:在存货目录表(Inventory)里最后两个字段顺序倒了,与演示帐套对比修改,在帐套参数表(AccInformation)里修改纪录'存货分类编码级次'的设置值2改为2223,就可以记账了。

39、问题描述:8.12Access版存货核算,在进行存货核算模块中,利用红字暂估回冲单生成凭证时,红字回冲单显示材料数量及金额均为红字,但在生成的凭证中只有材料金额为红字,辅助项材料数量为蓝字。辅助项中数量不能修改,请问该问题如何解决?
 解决办法:请在生成凭证时直接修改辅助项中数量即可,既鼠标移动到凭证下方的数量处,此时鼠标箭头变为笔头样时双击弹出辅助项对话框,将光标移到数量的最前方按下负号确认即可。

40、问题描述:8.12 Access版系统管理,8.12:无法将2001年进销存的数据结转过来,提示是无法结转销售系统,为什么?
 解决办法:打开该帐套的2001年的数据库ufdata.mdb,在设计状态下将表EnDispatchs中的字段‘字段1’、‘字段2’删除即可。

41、问题描述:8.12 Access版系统管理,请问系统管理的上机日志上的操作员asuser上机记录(主要是公用目录设置)是哪里的?我单位的所有帐套中没有asuser这一操作员,是不是上网的原因造成的?如何解决?
    解决办法:asuser是一个系统操作员安装完软件后这个操作员就会自动产生,它类似于admin 这个用户在系统数据库(ufsystem)里的表ua_user中。

42、问题描述:8.12 Access版系统管理,在建立年度帐的时候提示:字段太小而不能接受所需添加的数据的数量,试着插入或粘贴较少的数据。提示框的标题是:拷贝基本设置。请问该如何解决?
    解决办法:用数据库检测工具检查您的数据库和模版数据库之间数据结构有什么差异。应该是有些数据字段位长和标准库不一致造成的。

43、问题描述:8.12 Access版系统管理,会计结帐日在2001年为每月25日,转到2002年初系统为每月30日,欲修改为每月25日,但系统不接受,请问,怎么修改?
    解决办法:修改ufsystem数据库中UA_period表,过滤帐套号,过滤2002年度,然后修盖个会计期间的开始和结束日期。

44、问题描述:8.12 Access版系统管理,从1999年到2001年,在备份时有四张软盘,但在最后操作时,忘了放入第一张软盘,现在系统已经重装了,还能不能恢复过来?应怎么办?
 解决办法:分2种情况 1)单年度帐。将4个盘上的ufdata.md1……ufdata.md4拷贝到一个目录下,用copy +命令合并 2)多年度帐。第一张的md1和第2张的md2是一年,第2张上的md1和第3张上的.uf2文件是一年,如果第3张上除了uf2无其他容量大的文件,则再加上第4张盘即可。

45、问题描述:8.12 Access版系统管理,将8.11单机升级为8.12三站点时,服务器为WIN2000,客户机为WIN98,服务器运行用友正常,客户机远程配置正确,但进入帐务时,提示“系统无法登陆,请稍后”。网上邻居看的到,一台机器双击总是弹出拨号网络。网络邻居是否看得到服务器,并可以正常访问呢?
 解决办法:请重新安装dcom98二版后再安装软件.看这样是否可以。 如果点击程序首先出现拨号连接的话,请先删除拨号,然后卸载软件后再安装拨号,再安装软件。


七.财务通
1.财务通8.20
1、问题描述:财务通8.20版系统管理,财务通在win me环境中运行是否有冲突。在win xp 环境中运行?
 解决办法:win me环境不支持,财务通在win xp 环境中没有发现问题。
  
2.财务通8.21
1、问题描述:总账,在日常操作中进入时提示“实时错误‘404’:automation错误“确认后提示”运行时错误‘-2147220991(80040201)’:invalid object name 'tempdb..temp-accvouch70554a123';确认后,进入填制凭证提示“运行时错误‘429’autirex部件不能创建对象“确认后退出总帐,再进去又可以操作。为什么?
 解决办法:出现此问题的主要原因由于软件安装不正确引起一些控件安装不正确。请彻底卸载软件之后重新安装。可以使用安装盘上的卸载工具,把以前版本的用友软件卸载。注意不要同时安装不同版本软件。

2、问题描述:应收应付,在应付模块月末结帐时,“截止到本月单据全部记帐”系统提示是“否”。请问“截止到本月单据全部记帐”的含义是什么?即1)单据记帐指的是什么?2)截止到本月指的是从年初到本月还是只指本月?
 解决办法:应付模块单据记帐指的是单据审核,截止到本月指的是从年初到本月。

3、问题描述:固定资产,如果折旧方法中包含减值准备,在计算月折旧额时,减值准备金额不参与计算。录入原始卡片,如果原始固定资产已经计提了减值准备,该项减值准备不参与当前月的折旧计算,从第二个月才开始计算。为什么?
 解决办法:本月做了减值准备,下月才开始有效。

4、问题描述:固定资产,一月份处理正常,在做2月份固定资产处理是出现问题,做折旧处理正常,显示完折旧分配表之后出现两个错误提示,1)已经生成的凭证不能直接删除,2)不能删除临时凭证分录。请问应如何解决?
 解决办法:检查数据库中gl_accvouch,删除掉iperiod字段为0或21的,且coutsyname=FA的记录。

5、问题描述:UFO报表,1)财务通V8.21中QM()取数不正确。2)U8的销售管理中,发货单列表中没有数量和金额栏。3)财务通在P4机器上死机。请问上述问题应如何解决?
 解决办法:1)QM()函数是正确的,但是利用其取出的数在总帐系统中看不到. 在UFO系统中,若科目是带辅助核算的,QM()函数中有借贷方向时取数是从辅助帐中取数的,您可以到数据库中直接去看。2)设置选项;系统参数去掉:单据列表只显示表头项目。3)方法(1):禁用所有网卡(包括虚拟网卡)。方法(2):设置一个任意的固定ip地址。方法(3):将操作系统由98升级到2000。方法(4):将设备中的网卡(或modem)只保留一个,其余的均从设备管理中删除。(注,不能同时保留一个网卡和modem)。

6、问题描述:UFO报表,我公司使用的六站网络版(8.12A),其中有两台机器以前都正常,最近进UFO时总提示“MFC42.DLL中导致无效页错误"就关闭退出.我将用友软件全部卸载并从注册表中删除后,重新安装用友后还是不能进入.从使用正常的机器上将MFC42.DLL拷过来注册后仍然不能进入。到底该怎么处理呢?
 解决办法:删除UFOW.INI文件即可。

7、问题描述:财务分析,预算类别为粗放预算,粗放项目预算中设置好科目、项目、及科目方向及预算金额后,在填制凭证时,项目预算总金额超过预算设置金额时,保存凭证没有任何提示,另外在财务分析……预算管理……项目预算……粗放项目预算分析表中也统计不出实际完成数。
 解决办法:在追加一栏里,添加上数据,在填置凭证的时候,超过预算金额就会报警了。

8、问题描述:系统管理,使用财务通安装,在NT40及WIN2000PRO/SER上接连装了十余架电脑,都出现OLEAUT32.DLL文件出错.出错之后,在NT40机器上导致机器启动不了,检测完硬件后,提示OLEAUT32.DLL有问题,电脑蓝屏死机。而在WIN2000上,有上述提示后电脑要求重新启动,之后再安装,还是这样的提示,一直要求重新启动。请问,如何解决?
 解决办法:从安装正常的机器上拷贝OLEAUT32.DLL文件,并重新注册即可。

9、问题描述:系统管理,新购的用友财务通8.21,检测不到加密盒。
 解决办法:对于加密盒检测不到的用户,常用方法有: 1. 在COMS中把并口打开,设置CMOS的并口地址(parrall port)为:278或378。 2. 方式(parrall port mode)为:NORMAL或STANDARD.或其他的兼容方式。 3 .把MSMGV.DLL删除或改名,再重新安装用友软件。或把正常测到加密盒的机器上的 MSMGV.DLL 拷贝到此机器上。 换其他机型的机器试一下,如果其他机器都测不到,说明加密盒坏了,请寄回公司更换。对于上述方法仍不能解决,可参考以下方法: 1. 如为dos版软件,或windows版的工作站,发生连通打印机检测不到加密盒的现象,可以写明现象和加密盒号寄往公司更换。更换方法:dos版更换为特卡,工作站上的加密盒如主站类型连上打印机的可以正常检测的话,更换为主站win卡,否则更换为特卡。 2. 如为品牌机,且不能调整coms的方式,检测不到,并口正常的话,可更换特卡。 3. NT下如在8.0上提示:ufkey 与keypro 的驱动发生了冲突,不能进入,可已在设备管理中把keypro的使用关闭。

10、问题描述:存货核算,存货核算中产成品入库中对入库单修改时,出现“此单据正在被其他用户锁定,不能删除,请稍侯再试!”,而我购买的是单用户版本,无其他人使用,不知如何处理?
 解决办法:进入系统管理,清除异常任务和单据锁定。

11、问题描述:存货核算,1)用友财务通的存货核算中暂估功能是隐含的,应如何在存货核算中处理采购入库中有入库,无发票的情况?2)另外,在销售出库中有出库,没开票的,应如何不计算其销售成本?
 解决办法:1)因为暂估处理功能必须使用采购系统才能进行,而财务通只有存货核算系统,所以无法执行。2)无法处理,因为没有销售系统,所以没有开票业务。

12、问题描述:现金流量表,财务通如何做现金流量表?
 解决办法:可以通过总帐和UFO的xjll( )函数在报表中完成现金流量表。
 
13、问题描述:现金流量表,同借同贷的凭证,既:借:财务费用 -2000,借:银行存款 2000,借:财务费用 -2000,借:银行存款 2000。不允许合并请问如何拆分。(我在关闭时提示有剩余分录,组合时提示不可组合多正多负的凭证。)
 解决办法:用下移分录,并组合子凭证的方法手工拆分即可。

八.专题文章
1.U8 8.21
采购计划
1、文章标题:821采购计划当产品结构大于12级时采购需求就无法生成相关需求的解决办法。
  解决办法:
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[PP_SCJH_LC]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
  drop procedure [dbo].[PP_SCJH_LC]
  GO
  
  SET QUOTED_IDENTIFIER OFF
  GO
  SET ANSI_NULLS ON
  GO
  
  CREATE PROCEDURE [PP_SCJH_LC] @MPID varchar(20),@nDay int=1,@nWhich int=1,@InvCode varchar(20)='',@Date varchar(10)='',@DepCode varchar(20)='' AS
  --           @nWhich 1流程2相关需求      
   Create table #AAA (cInvCode varchar(20),nLevel varchar(2000),nBoots int,nStep int,iMQTY float,
     iInvAdvance float,dStartDate datetime,dPlanFinishDate datetime,cDepName varchar(30),bPurchase bit) --建立临时表#AAA
  
  SET NOCOUNT ON
         -----开始------
   IF @InvCode<>''  --@InvCode<>''选择数据
    if @nDay=0 --开工日期为需求日期
        begin 
     Insert #AAA (cInvCode,nLevel,nBoots,nStep,iMQTY,iInvAdvance,dStartDate,dPlanFinishDate,cDepName,bPurchase)
     SELECT PP_MPSdetails.cInvCode,cProjectCode+PP_MPSdetails.cInvCode as nLevel,1 as nBoots,1 as nStep,
      PP_MPSdetails.iMQTY,isnull(Inventory.iInvAdvance,0),PP_MPSdetails.dStartDate,
      PP_MPSdetails.dPlanFinishDate,'' as cDepName,Inventory.bPurchase
     FROM Inventory,PP_MPSdetails
     Where Inventory.cInvCode = PP_MPSdetails.cInvCode and cMPID=@MPID and  PP_MPSdetails.cInvCode=@InvCode
        end
    else  ----按提前期计算需求日期    计算提前期:dateadd(day,-iInvAdvance,PP_MPSdetails.dPlanFinishDate)
     begin 
      Insert #AAA (cInvCode,nLevel,nBoots,nStep,iMQTY,iInvAdvance,dStartDate,dPlanFinishDate,cDepName,bPurchase)
       SELECT PP_MPSdetails.cInvCode,cProjectCode+PP_MPSdetails.cInvCode as nLevel,1 as nBoots,1 as nStep,
       PP_MPSdetails.iMQTY,isnull(Inventory.iInvAdvance,0),PP_MPSdetails.dStartDate,
       dateadd(day,-isnull(iInvAdvance,0),PP_MPSdetails.dPlanFinishDate) as dPlanFinishDate,
       '' as cDepName,Inventory.bPurchase
      FROM Inventory,PP_MPSdetails
      Where Inventory.cInvCode = PP_MPSdetails.cInvCode and cMPID=@MPID and  PP_MPSdetails.cInvCode=@InvCode
     end
   Else   --@InvCode=''全部数据
    if @nDay=0  --开工日期为需求日期
     begin
      Insert #AAA (cInvCode,nLevel,nBoots,nStep,iMQTY,iInvAdvance,dStartDate,dPlanFinishDate,cDepName,bPurchase)
       SELECT PP_MPSdetails.cInvCode,cProjectCode+PP_MPSdetails.cInvCode as nLevel,1 as nBoots,1 as nStep,
       PP_MPSdetails.iMQTY,isnull(Inventory.iInvAdvance,0),PP_MPSdetails.dStartDate,
       PP_MPSdetails.dPlanFinishDate,'' as cDepName,Inventory.bPurchase
      FROM Inventory,PP_MPSdetails
      Where Inventory.cInvCode = PP_MPSdetails.cInvCode and cMPID=@MPID
     end
    else
     begin
      Insert #AAA (cInvCode,nLevel,nBoots,nStep,iMQTY,iInvAdvance,dStartDate,dPlanFinishDate,cDepName,bPurchase)
       SELECT PP_MPSdetails.cInvCode,cProjectCode+PP_MPSdetails.cInvCode as nLevel,1 as nBoots,1 as nStep,
        PP_MPSdetails.iMQTY,isnull(Inventory.iInvAdvance,0),PP_MPSdetails.dStartDate,
        dateadd(day,-isnull(iInvAdvance,0),PP_MPSdetails.dPlanFinishDate) as dPlanFinishDate,
        '' as cDepName,Inventory.bPurchase
       FROM Inventory,PP_MPSdetails
       Where Inventory.cInvCode = PP_MPSdetails.cInvCode and cMPID=@MPID
     end
  
         --声明变量--
  
   Declare BBB scroll Cursor for Select * from #AAA Order by nLevel   --建立一个Cursor
   Declare @S1 varchar(20),@S2 varchar(2000),@S3 int,@S4 int,@S5 float(10),
    @S6 float(10),@S7 datetime,@S8 datetime,@S9 varchar(30),@S10 bit,
    @istate as int,@Dep varchar(20),@Day varchar(10),
    @cCheckPerson as varchar(20),@dCheckDate varchar (10)
         ------------ 
   OPEN BBB          --打开Cursor BBB
  
   FETCH NEXT FROM BBB INTO @S1, @S2,@S3,@S4,@S5, @S6,@S7,@S8,@S9,@S10   --到第一条
  
   WHILE @@FETCH_STATUS = 0        --循环
       BEGIN
        if @S10=0
    IF @S3=1      --@S3= nBoots=0,9为已经判断产品
        BEGIN
     IF (SELECT Count(*) From ProductStructures Where cPSPCode=@S1) >0 --如果有子产品,取出到#AAA
         BEGIN
      if @nDay=0
          begin
       Insert #AAA (cInvCode,nLevel,nBoots,nStep,iMQTY,iInvAdvance,dStartDate,dPlanFinishDate,cDepName,bPurchase)
        SELECT ProductStructures.cPSCode as cInvCode,@S2 + cPSCode as nLevel,
         1 as nBoots,@S4 +1 as nStep,ProductStructures.iPSQuantity * @S5 as iMQTY,
         Inventory.iInvAdvance,@S7 as dStartDate,@S8 as dPlanFinishDate,
         Department.cDepName,Inventory.bPurchase
                             FROM (Inventory INNER JOIN ProductStructures ON
                              Inventory.cInvCode = ProductStructures.cPSCode)
                              LEFT JOIN Department ON ProductStructures.cDepCode = Department.cDepCode
        Where cPSPCode=@S1
          end
      else
          begin
       Insert #AAA (cInvCode,nLevel,nBoots,nStep,iMQTY,iInvAdvance,dStartDate,dPlanFinishDate,cDepName,bPurchase)
        SELECT ProductStructures.cPSCode as cInvCode,@S2 + cPSCode as nLevel,
         1 as nBoots,@S4 +1 as nStep,
                              ProductStructures.iPSQuantity * @S5 as iMQTY,Inventory.iInvAdvance,
         @S7 as dStartDate,dateadd(day,-isnull(iInvAdvance,0),@S8) as dPlanFinishDate,
         Department.cDepName,Inventory.bPurchase
                            FROM (Inventory INNER JOIN ProductStructures ON
                            Inventory.cInvCode = ProductStructures.cPSCode)
                            LEFT JOIN Department ON ProductStructures.cDepCode = Department.cDepCode
       Where cPSPCode=@S1
          end
      Update #AAA Set nBoots=9 Where nLevel=@S2   --把此级的nBoots=9有下级不再检查
      CLOSE BBB      
      OPEN BBB       --关上重新打开
      FETCH  NEXT FROM BBB  INTO @S1, @S2,@S3,@S4,@S5, @S6,@S7,@S8,@S9,@S10   --到下一条
         END
     ELSE
         BEGIN
      Update #AAA set nBoots=0 Where nLevel=@S2   --没下级,把此级的nBoots=0不再检查
      FETCH  NEXT FROM BBB  INTO @S1, @S2,@S3,@S4,@S5, @S6,@S7,@S8,@S9,@S10  --到下一条
             END
        END
    ELSE       FETCH  NEXT FROM BBB  INTO @S1, @S2,@S3,@S4,@S5, @S6,@S7,@S8,@S9,@S10   --检查过,到下一条
        else
    begin
      Update #AAA set nBoots=0 Where nLevel=@S2   --没下级,把此级的nBoots=0不再检查
      FETCH  NEXT FROM BBB  INTO @S1, @S2,@S3,@S4,@S5, @S6,@S7,@S8,@S9,@S10  --到下一条
    end  
       END
  
   CLOSE BBB        
   DEALLOCATE BBB          --关上BBB
  
  SET NOCOUNT OFF
   If @nWhich=1
    begin
     SELECT #AAA.*,Inventory.cInvName,Inventory.cInvStd,Inventory.cInvM_Unit as cUnit,Inventory.iInvSPrice as Price
     FROM #AAA,Inventory WHERE Inventory.cInvCode=#AAA.cInvCode order by nlevel
    end
   if @nWhich=2
    begin
     BEGIN TRANSACTION
     if (select count(*) from PP_RMRPmain where cMPID=@MPID) >0
      begin
       set @istate=(select istate from PP_RMRPmain where cMPID=@MPID)
       set @Dep=(select cDepCode from PP_RMRPmain where cMPID=@MPID)
       set @day=(select convert(varchar,dCreatDate,120) from PP_RMRPmain where cMPID=@MPID)
       set @cCheckPerson=(select cCheckPerson from PP_RMRPmain where cMPID=@MPID)
       set @dCheckDate =(select convert(varchar,dCheckDate,120) from PP_RMRPmain where cMPID=@MPID)
      end
     else 
      begin
       set @istate=1
       set @Dep=@DepCode
       set @day=@date
       set @cCheckPerson=''
       set @dCheckDate=''
      end
            delete from PP_RMRPdetails where cMPID=@MPID
      IF @@ERROR <> 0
       begin
        Rollback transaction
        Return
       end
     delete from PP_RMRPmain where cMPID=@MPID
      IF @@ERROR <> 0
       begin
        Rollback transaction
        Return
       end
            Insert into PP_RMRPmain (cMPID,dCreatDate,cDepCode,cCheckPerson,dCheckDate,iState)
     Values (@MPID,@Date,@DepCode,@cCheckPerson,@dCheckDate,@istate)
      IF @@ERROR <> 0
       begin
        Rollback transaction
        Return
       end
     insert PP_RMRPdetails (cMPID,cInvCode,cProjectCode,cUnit,iMQTY,dRequireDate)
     SELECT @MPID as cMPID,#AAA.cInvCode,''as cProjectCode,Inventory.cInvM_Unit as cUnit,sum(iMQTY) as iMQTY,
      #AAA.dPlanfinishDate
     FROM #AAA,Inventory WHERE Inventory.cInvCode=#AAA.cInvCode and nBoots=0
     group by #AAA.cInvCode,Inventory.cInvM_Unit,#AAA.dPlanfinishDate       
     -------修改相关计划状态---------------
            Update PP_MPSmain set iState=3 Where cMPID=@MPID
      IF @@ERROR <> 0
       begin
        Rollback transaction
        Return
       end
            COMMIT TRANSACTION
    end
   if @nWhich=3
    begin
     SELECT #AAA.cInvCode,Inventory.cInvName,Inventory.cInvStd,Inventory.cInvM_Unit as cUnit,sum(iMQTY) as iMQTY,
      #AAA.dPlanfinishDate
     FROM #AAA,Inventory WHERE Inventory.cInvCode=#AAA.cInvCode and nBoots=0
     group by #AAA.cInvCode,Inventory.cInvName,Inventory.cInvStd,Inventory.cInvM_Unit,#AAA.dPlanfinishDate       
    end
   DROP TABLE #AAA
  GO
  SET QUOTED_IDENTIFIER OFF
  GO
  SET ANSI_NULLS ON
  GO

2、文章标题:U8网络版产品《采购计划》中独立需求只能由一个人做,不可多个人同时做的问题 。
   解决办法:
  将ufsystem中表ua_control中cAuth_Id='PP020300' and cRepellent='PP020300' 的记录删掉即可。
 
销售管理
1、文章标题:一个选项的不同U8销售模块的发货单列表就大不一样了。
  用过用友财务软件的朋友们都知道在销售模块中有一个发货单列表是一个很实用的工具。可是你们知道吗?用友的U8版本销信模块中有一个新的选项:是否只显示发货单列表的首条记录。别小看这个选项哦,选与不选它可有很大的区别:
  (1)若你选择了这个选项,查找发货情况时就会显得很简洁了,前提是你不需要按照货物查找。若你需要按货物查找时请不要选择这个选项,因为你若选中它,你会发现在发货单列表的条件生成器中缺少了几个常用的选项:货物名称、货物编号、含税单价及价税合计等。(2) 还有这个选项的选中与否还会在销售统计表中有所不同,当你选中这个选项时,销售统计表中只会显示已经审核的销售出库单所列的发货情况,相反你若不选中这个选项,在销售统计表中就会显示所有的发货单所发货的情况只是此时未审核的发货单上所列示的发货情况没有数据但有记录。
  
库存管理
1、文章标题:U821现存量错误的几种调整方法:
 解决办法:1)使用整理现存量功能。2)整理现存量后,现存量依然不对,可到ufsystem数据库的ua_account_sub表中查看该帐套库存的启用日期是否正确。以999帐套为例,可执行语句select * from ua_account_sub where cacc_id=999 and csub_id='st' and iyear=9999,如果没有此条记录,应手工添加。或者该记录上的dsubsysused(启用日期)不正确应改为正确。然后重新整理现存量即可。3)现存量错误不属于以上两种情况时,应重点查看st_totalaccount 本年期初数量,因为整理现存量时是根据st_totoalaccount的本年度期初加减rdrecord/s累计收入发出计算的。rdrecord/s属于原始单据的记录,一般不会有错,所以应重点检查st_totalaccount本年度期初数量是否正确。4)如果只启用存货核算没有整理现存量功能,无法整理现存量。但是,我们可以利用系统管理的升级sqlserver数据功能,将帐套重新升级一遍,升级程序会进行现存量整理。

2、文章标题:8.21材料出库单最大单号。
   8.21中的材料出库单等的自动编号有的不再取最大单号表中的单号,而是在程序中直接用下面的语句取最大单号
  出库语句:
select top 1 ('00' + right('000000000'+ccode,8)) as ccode from rdrecord where

left(ccode,1)<>'-' and brdflag=1 and left(right('000000000'+ccode,10),2)='00'

order by ccode desc
入库语句:
select top 1 ('00' + right('000000000'+ccode,8)) as ccode from rdrecord where

 left(ccode,1)<>'-' and brdflag=1 and

left(right('000000000'+ccode,10),2)='00'  order by ccode  desc

如果启用远程,远程标志号为01,则
出库语句:
select top 1 ('01' + right('000000000'+ccode,8)) as ccode from rdrecord where

left(ccode,1)<>'-' and brdflag=1 and left(right('000000000'+ccode,10),2)='01'

order by ccode desc
入库语句:
select top 1 ('01' + right('000000000'+ccode,8)) as ccode from rdrecord where

 left(ccode,1)<>'-' and brdflag=1 and

left(right('000000000'+ccode,10),2)='01'  order by ccode  desc

3、文章标题:整理现存量脚本。
   整理现存量:
Delete From CurrentStock
if exists(select * from sysobjects where name='tempcurrentstock')
drop table TempCurrentStock
SELECT cWhCode,cInvCode,(CASE WHEN cFree1=''THEN NULL ELSE cFree1 END) AS cFree1 ,(CASE WHEN cFree2=''THEN NULL ELSE cFree2 END) AS cFree2 ,iainquantity  AS iQuantity, CAST(0 AS FLOAT) AS fOutQuantity,CAST(0 AS FLOAT) AS fInQuantity
INTO TempCurrentStock
From ia_subsidiary
Where cvoutype='34'
group by ia_subsidiary.cWhCode,ia_subsidiary.cInvCode,ia_subsidiary.cFree1,ia_subsidiary.cFree2,ia_subsidiary.iainquantity

INSERT INTO TempCurrentStock(cWhCode,cInvCode,cFree1,cFree2,iQuantity)   SELECT  cWhCode, cInvCode,(CASE WHEN cFree1=''THEN NULL ELSE cFree1 END) AS cFree1 ,(CASE WHEN cFree2=''THEN NULL ELSE cFree2 END) AS cFree2 , (CASE WHEN bRdFlag<>0 THEN iQuantity ELSE -iQuantity END) AS iQuantity
FROM RdRecord INNER JOIN RdRecords ON RdRecord.ID = RdRecords.ID  
WHERE  cVouchType<>'33'AND cVouchType<>'34'  AND RdRecord.dDate>='2001-1-01' (该日期为模块启用日期)

INSERT INTO TempCurrentStock(cWhCode,cInvCode,cFree1,cFree2,fOutQuantity)  
SELECT  EnDispatchs.cWhCode, EnDispatchs.cInvCode,(CASE WHEN EnDispatchs.cFree1='' THEN NULL ELSE EnDispatchs.cFree1 END) AS cFree1 ,(CASE WHEN EnDispatchs.cFree2='' THEN NULL ELSE EnDispatchs.cFree2 END) AS cFree2 , (ISNULL(iQuantity,0)-ISNULL(fOutQuantity,0)) AS fOutQuantity
FROM EnDispatch INNER JOIN  EnDispatchs ON EnDispatch.EDID = EnDispatchs.EDID  WHERE  ISNULL(EnDispatchs.cWhCode,'')<>''  AND ISNULL(EnDispatch.cSTCode,'')<>'' AND EnDispatchs.iQuantity>0 AND bReturnFlag=0

INSERT INTO TempCurrentStock(cWhCode,cInvCode,cFree1,cFree2,fOutQuantity)  
SELECT  DispatchLists.cWhCode as cWhCode, DispatchLists.cInvCode as cInvCode,(CASE WHEN DispatchLists.cFree1='' THEN NULL ELSE DispatchLists.cFree1 END) AS cFree1 , (CASE WHEN DispatchLists.cFree2='' THEN NULL ELSE DispatchLists.cFree2 END) AS cFree2 , (ISNULL(iQuantity,0)-ISNULL(fOutQuantity,0)) AS fOutQuantity
FROM DispatchLists INNER JOIN  DispatchList ON DispatchLists.DLID = DispatchList.DLID     
WHERE  DispatchList.cVouchType='05' AND ISNULL(DispatchLists.cWhCode,'')<>'' AND ISNULL(DispatchList.cSTCode,'')<>''  AND  (DispatchList.iSale=0 or DispatchList.iSale IS NULL)  AND DispatchLists.iQuantity>0

INSERT INTO TempCurrentStock(cWhCode,cInvCode,cFree1,cFree2,fOutQuantity)   
SELECT  cWhCode, cInvCode,(CASE WHEN cFree1=''THEN NULL ELSE cFree1 END) AS cFree1 , (CASE WHEN cFree2=''THEN NULL ELSE cFree2 END) AS cFree2 , (ISNULL(iQuantity,0)-ISNULL(fOutQuantity,0)) AS fOutQuantity
FROM SaleBillVouchs INNER JOIN SaleBillVouch ON SaleBillVouch.SBVID=SaleBillVouchs.SBVID 
WHERE ISNULL(SaleBillVouchs.cWhCode,'')<>'' AND (SaleBillVouch.iDisp=0 OR SaleBillVouch.iDisp IS NULL)    AND ISNULL(cBusType,'')<>'委托'   AND ISNULL(cSTCode,'')<>'' AND ISNULL(cInvalider,'')='' AND  SaleBillVouchs.iQuantity>0

INSERT INTO CurrentStock(cWhCode,cInvCode,cFree1,cFree2,iQuantity,fOutQuantity,fInQuantity)  
SELECT  cWhCode, cInvCode,cFree1,cFree2 , sum(iQuantity) AS iQuantity,sum(ISNULL(fOutQuantity,0)) AS fOutQuantity, sum(ISNULL(fInQuantity,0)) AS fInQuantity
FROM TempCurrentStock
GROUP BY cWhCode,cInvCode,cFree1,cFree2

Delete From CurrentStock
where iquantity is null  and foutquantity=0 and finquantity=0

4、文章标题:盘点应注意的事项
 盘点中需注意的几点事项:1)盘点单价是怎样产生的,盘点的单价是在盘点中点击盘库后自动产生的,移动平均法是按盘点时结存单价产生,全月平均法是取上月价,所以如果移动平均法,盘点是一定要存货系统所有单据记帐后才可进行,否则单价不准,另外如果盘出一个以前月份从未发生过,期初有数量,但是单价为0,则盘点单价为0,这样就要在存货系统的的其他出入库单中修改单价,否则会造成以后价格的偏离(可能是十分严重),当然,这种现象也是因为期初数据的原因。2)盘点单所取帐面数是是当时的现存量,如果需要盘点,则下月业务不能开展,否则会造成虚假的盘盈和盘亏,有零出库的单位,帐面数会为负数,但是实盘数是不能为负数的,这种情况下实盘数自动为零,这样就会造成盘盈,所以在这种情况下,应在盘点单未审核时,删除这条记录。3)另外,盘点审核后,单据是不能修改的,审核所产生的单据也是不能删除的,盘点所产生的其他出入库单在库存系统中不能修改,在存货系统中可能修改单价。

存货核算
1、文章标题:存货核算使用注意事项。
  存货核算使用注意事项:
1)出入库调整只对本月出入库单的进行调整,即被调整单据号只能是本月单据。
  采购系统的采购入库单没有进行结算并暂估处理,不能生成入库调整单
  出入库调整单保存即记账,已保存的单据不能修改删除。只有通过恢复单据记账时删除
  不可对指定出库单据进行调整金额
2)移动平均、先进先出、后进先出、计划价(包括价格调整单时)不能按单据类型恢复单据记账
  全月平均、个别计价、计划价(无价格调整单时): 恢复采购入库单时,同时应恢复对应的入库调整单,否则不允许恢复记帐。
3)月初回冲、单到回冲方式下,采购入库单记录部分结算,应不能进行暂估处理
4)单到补差方式下,采购入库单记录部分结算,结算多少就可以暂估处理多少,同受托代销入库单
5)全月平均法,调拨出库(特殊单据记帐)按上次全月平均单价取单价,如果是没有上月或期初的结存单价,取选项的零成本出库选择的选项成本。(很多用户对存货记帐之后的莫名其妙成本,其实取的是选项成本)
全月平均法,调拨出库(正常单据记帐)不按上月全月平均单价取单价
全月平均法,零出库时按期末处理的单价计算出库成本
计划法,调拨出库(特殊单据记帐)按上月差异率算差异额,如果是没有上月或期初的结存差异率,取选项的零成本出库选择的选项成本。
计划法,调拨出库(正常单据记帐)不按上月差异率算差异额
售价法,调拨出库(特殊单据记帐)按上月差异率算差异额,如果是没有上月或期初的结存差异率,取选项的零成本出库选择的选项成本。
售价法,调拨出库(正常单据记帐)不按上月差异率算差异额
6)个别计价法,每笔出库都有对应的入库
个别计价法,结存数量、金额不能为负
期末处理后,计算出的全月平均法的出库成本记入明细账中
期末处理后,计算出的计划法的出库成本差异记入明细账中
  
总帐
1、文章标题:解决总帐查询明细帐、总帐提示实时错误91,null无效。
   在U8总帐中,有时会发生查询明细帐、总帐提示“实时错误91,null无效”,检查用户数据,1、发现用户辅助总帐、总帐表单中金额、数量、外币字段属性被设置为容许为空,(导致数据行中有许多null值)2、默认绑定不存在。针对问题,我们创建以下脚本解决如下:在查询分析器执行更新总帐错误记录(把null值替换为0),建立绑定默认值,修改总帐、辅助总帐表单结构(取消容许为空设置)脚本。
  脚本如下:--更新总帐、辅助总帐NULL值记录
  UPDATE GL_accsum
  SET mb = 0, md = 0, mc = 0, me = 0, mb_f = 0, md_f = 0, mc_f = 0,me_f = 0, nb_s = 0, nd_s = 0,
        nc_s = 0, ne_s = 0
  WHERE (mb IS NULL) OR
        (md IS NULL) OR
        (mc IS NULL) OR
        (me IS NULL) OR
        (mb_f IS NULL) OR
        (md_f IS NULL) OR
        (mc_f IS NULL) OR
        (me_f IS NULL) OR
        (nb_s IS NULL) OR
        (nd_s IS NULL) OR
        (nc_s IS NULL) OR
        (ne_s IS NULL)
  UPDATE GL_accass
  SET mb = 0, md = 0, mc = 0, me = 0, mb_f = 0, md_f = 0, mc_f = 0,me_f = 0, nb_s = 0, nd_s = 0,
        nc_s = 0, ne_s = 0
  WHERE (mb IS NULL) OR
        (md IS NULL) OR
        (mc IS NULL) OR
        (me IS NULL) OR
        (mb_f IS NULL) OR
        (md_f IS NULL) OR
        (mc_f IS NULL) OR
        (me_f IS NULL) OR
        (nb_s IS NULL) OR
        (nd_s IS NULL) OR
        (nc_s IS NULL) OR
        (ne_s IS NULL)
  --删除、建立、绑定默认值
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accass_mb_f_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accass_mb_f_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accass_mc_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accass_mc_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accass_mc_f_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accass_mc_f_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accass_md_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accass_md_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accass_md_f_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accass_md_f_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accass_me_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accass_me_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accass_me_f_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accass_me_f_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accass_nb_s_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accass_nb_s_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accass_nc_s_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accass_nc_s_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accass_nd_s_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accass_nd_s_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accass_ne_s_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accass_ne_s_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accass_mb_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accass_mb_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accsum_mb_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accsum_mb_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accsum_mb_f_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accsum_mb_f_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accsum_mc_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accsum_mc_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accsum_mc_f_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accsum_mc_f_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accsum_md_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accsum_md_D]
  GO
  
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accsum_md_f_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accsum_md_f_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accsum_me_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accsum_me_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accsum_me_f_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accsum_me_f_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accsum_nb_s_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accsum_nb_s_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accsum_nc_s_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accsum_nc_s_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accsum_nd_s_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accsum_nd_s_D]
  GO
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GL_accsum_ne_s_D]') and OBJECTPROPERTY(id, N'IsDefault') = 1)
  drop default [dbo].[GL_accsum_ne_s_D]
  GO
  CREATE DEFAULT dbo.GL_accass_mb_f_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accass_mc_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accass_mc_f_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accass_md_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accass_md_f_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accass_me_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accass_me_f_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accass_nb_s_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accass_nc_s_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accass_nd_s_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accass_ne_s_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accass_mb_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accsum_mb_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accsum_mb_f_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accsum_mc_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accsum_mc_f_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accsum_md_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accsum_md_f_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accsum_me_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accsum_me_f_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accsum_nb_s_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accsum_nc_s_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accsum_nd_s_D AS 0
  GO
  CREATE DEFAULT dbo.GL_accsum_ne_s_D AS 0
  GO
  EXEC sp_bindefault N'[dbo].[GL_accass_mb_D]', N'[GL_accass].[mb]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accass_mb_f_D]', N'[GL_accass].[mb_f]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accass_mc_D]', N'[GL_accass].[mc]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accass_mc_f_D]', N'[GL_accass].[mc_f]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accass_md_D]', N'[GL_accass].[md]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accass_md_f_D]', N'[GL_accass].[md_f]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accass_me_D]', N'[GL_accass].[me]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accass_me_f_D]', N'[GL_accass].[me_f]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accass_nb_s_D]', N'[GL_accass].[nb_s]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accass_nc_s_D]', N'[GL_accass].[nc_s]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accass_nd_s_D]', N'[GL_accass].[nd_s]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accass_ne_s_D]', N'[GL_accass].[ne_s]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accsum_mb_D]', N'[GL_accsum].[mb]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accsum_mb_f_D]', N'[GL_accsum].[mb_f]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accsum_mc_D]', N'[GL_accsum].[mc]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accsum_mc_f_D]', N'[GL_accsum].[mc_f]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accsum_md_D]', N'[GL_accsum].[md]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accsum_md_f_D]', N'[GL_accsum].[md_f]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accsum_me_D]', N'[GL_accsum].[me]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accsum_me_f_D]', N'[GL_accsum].[me_f]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accsum_nb_s_D]', N'[GL_accsum].[nb_s]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accsum_nc_s_D]', N'[GL_accsum].[nc_s]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accsum_nd_s_D]', N'[GL_accsum].[nd_s]'
  GO
  EXEC sp_bindefault N'[dbo].[GL_accsum_ne_s_D]', N'[GL_accsum].[ne_s]'
  GO
  --更新总帐、辅助总帐表单结构
  ALTER TABLE GL_accsum ALTER COLUMN  cbegind_c varchar(2) not NULL
  ALTER TABLE GL_accsum ALTER COLUMN  cbegind_c_engl varchar(2) not NULL
  ALTER TABLE GL_accsum ALTER COLUMN  mb money not NULL
  ALTER TABLE GL_accsum ALTER COLUMN  md money not NULL
  ALTER TABLE GL_accsum ALTER COLUMN  mc money not NULL
  ALTER TABLE GL_accsum ALTER COLUMN  cendd_c varchar(2) not NULL
  ALTER TABLE GL_accsum ALTER COLUMN  cendd_c_engl varchar(2) not NULL
  ALTER TABLE GL_accsum ALTER COLUMN  me money not NULL
  ALTER TABLE GL_accsum ALTER COLUMN  mb_f money not NULL
  ALTER TABLE GL_accsum ALTER COLUMN  md_f money not NULL
  ALTER TABLE GL_accsum ALTER COLUMN  mc_f money not NULL
  ALTER TABLE GL_accsum ALTER COLUMN  me_f money not NULL
  ALTER TABLE GL_accsum ALTER COLUMN  nb_s float not NULL
  ALTER TABLE GL_accsum ALTER COLUMN  nd_s float not NULL
  ALTER TABLE GL_accsum ALTER COLUMN  nc_s float not NULL
  ALTER TABLE GL_accsum ALTER COLUMN  ne_s float not NULL
  --更新辅助总帐结构
  ALTER TABLE GL_accass ALTER COLUMN  cbegind_c varchar(2) not NULL
  ALTER TABLE GL_accass ALTER COLUMN  cbegind_c_engl varchar(2) not NULL
  ALTER TABLE GL_accass ALTER COLUMN  mb money not NULL
  ALTER TABLE GL_accass ALTER COLUMN  md money not NULL
  ALTER TABLE GL_accass ALTER COLUMN  mc money not NULL
  ALTER TABLE GL_accass ALTER COLUMN  cendd_c varchar(2) not NULL
  ALTER TABLE GL_accass ALTER COLUMN  cendd_c_engl varchar(2) not NULL
  ALTER TABLE GL_accass ALTER COLUMN  me money not NULL
  ALTER TABLE GL_accass ALTER COLUMN  mb_f money not NULL
  ALTER TABLE GL_accass ALTER COLUMN  md_f money not NULL
  ALTER TABLE GL_accass ALTER COLUMN  mc_f money not NULL
  ALTER TABLE GL_accass ALTER COLUMN  me_f money not NULL
  ALTER TABLE GL_accass ALTER COLUMN  nb_s float not NULL
  ALTER TABLE GL_accass ALTER COLUMN  nd_s float not NULL
  ALTER TABLE GL_accass ALTER COLUMN  nc_s float not NULL
  ALTER TABLE GL_accass ALTER COLUMN  ne_s float not NULL
  
2、文章标题:关于8.21银行对帐不平的处理办法
  有用户发现8.21数据的银行对帐的余额调节表不平,并且取消本年的银行对帐后重新对帐还是不平.碰到此情况,用户以为是软件问题.数据发到集团后,经查,发现此银行的数据在期初就不平.所以无论如何调整,本年的银行对帐余额表是不平的.此类问题的解决办法:
  取消本年度的银行对帐,
  重新结转上年数据,在新数据库中表gl_accvouch和RP_bankrecp找到此银行的年初数据,在原数据库中删除表gl_accvouch和RP_bankrecp中此银行的年初数据,把新的数据拷贝到原数据库中的对应表中,可以解决此问题.
  同时,本年启用的银行对帐也有发生对帐不平的情况,可能是更改过银行对帐启用日期的原因造成的,银行对帐启用后就不能更改启用日期.
  
3、文章标题:修复辅助总帐有重复记录的方法。
   修复辅助总帐有重复记录的过程:
   调数据主要是先恢复记帐到年初,并用DELETE语句把出现问题的科目记录从GL_ACCASS中删去,并用以上的SQL工具生成过程,再用EXEC进行过程的调用。注意资产类的用类似11901的方法,负债类的用类似203的方法,每次可以替换一下。从GL_accvouch中重算GL_ACCASS,并在GL_ACCASS中删除期初为零且记录重复的记录。重新记帐,可以解决。
  脚本一:
  if Exists (Select Name From sysobjects
             where name='myproc1' and type='P')
             begin 
                  DROP PROCEDURE MYPROC1
             end
  go
  CREATE PROCEDURE myproc1 AS
  set nocount on
  
  --检查临时表是否存在
  if Exists (Select Name From tempdb..sysobjects
             where name='tmp1' and type='U')
             begin 
                  DROP table tempdb..tmp1
             end
  
  --筛选出有丢失记录的数据,并存入临时表tmp1
  SELECT ccode,sum(md)-sum(mc) as mb, 
  cdept_id,cperson_id,ccus_id,csup_id,citem_class,citem_id
  into tempdb..tmp1 FROM GL_accvouch
  where gl_accvouch.ccode='11901' and gl_accvouch.iperiod=0
  GROUP BY GL_accvouch.ccode,GL_accvouch.cdept_id, gl_accvouch.ccus_id,GL_accvouch.csup_id,GL_accvouch.citem_class,GL_accvouch.citem_id,
  GL_accvouch.cperson_id
  
  Declare sCursor Cursor FOR
  Select ccode,cdept_id,ccus_id,csup_id,citem_class,citem_id,mb,cperson_id
  From tempdb..tmp1
  
  OPEN sCursor
  declare @ccode varchar(15),@cdept_id varchar(12),@ccus_id varchar(12),
  @csup_id varchar (12),@citem_class varchar(2),@citem_id varchar(20),@v_mb money,
  @iperiod tinyint,@cperson_id varchar(8),@fx1 varchar(2),@fx2 varchar(2)
  FETCH NEXT FROM sCursor
        Into @ccode,@cdept_id,@ccus_id,@csup_id,@citem_class,@citem_id,@v_mb,@cperson_id         
  
        While @@FETCH_STATUS=0   
         begin                    
  
          if @v_mb>0
           begin
            set @fx1='借'
            set @fx2='Dr'
            set @v_mb=@v_mb
           end
          else
            begin  
            set @fx1='贷'
            set @fx2='Cr'
            set @v_mb=-@v_mb
            end
        insert gl_accass (ccode,cexch_name,cdept_id,ccus_id,csup_id,citem_class,citem_id,cperson_id,iperiod,
        cbegind_c,cbegind_c_engl,mb,md,mc,me,cendd_c,cendd_c_engl,mb_f,md_f,mc_f,me_f,nb_s,nd_s,nc_s,ne_s)
        VALUES('11901',null,@cdept_id,@ccus_id,@csup_id,@citem_class,@citem_id,@cperson_id,1,
        @fx1,@fx2,@v_mb,0,0,@v_mb,@fx1,@fx2,0,0,0,0,0,0,0,0)
     
                    
               
        FETCH NEXT FROM sCursor Into @ccode,@cdept_id,@ccus_id,@csup_id,@citem_class,@citem_id,@v_mb,@cperson_id           
  --关闭并释放游标     
         end
         CLOSE sCursor
         DEALLOCATE sCursor
  --SELECT COUNT(*) FROM GL_ACCASS
  --EXEC MYPROC1
  --delete from gl_accass where ccode='11901'
  
  
  脚本二:
  if Exists (Select Name From sysobjects
             where name='myproc1' and type='P')
             begin 
                  DROP PROCEDURE MYPROC1
             end
  go
  CREATE PROCEDURE myproc1 AS
  set nocount on
  
  --检查临时表是否存在
  if Exists (Select Name From tempdb..sysobjects
             where name='tmp1' and type='U')
             begin 
                  DROP table tempdb..tmp1
             end
  
  --筛选出有丢失记录的数据,并存入临时表tmp1
  SELECT ccode,sum(mc)-sum(md) as mb, 
  cdept_id,cperson_id,ccus_id,csup_id,citem_class,citem_id
  into tempdb..tmp1 FROM GL_accvouch
  where gl_accvouch.ccode='20901' and gl_accvouch.iperiod=0
  GROUP BY GL_accvouch.ccode,GL_accvouch.cdept_id, gl_accvouch.ccus_id,GL_accvouch.csup_id,GL_accvouch.citem_class,GL_accvouch.citem_id,
  GL_accvouch.cperson_id
  
  Declare sCursor Cursor FOR
  Select ccode,cdept_id,ccus_id,csup_id,citem_class,citem_id,mb,cperson_id
  From tempdb..tmp1
  
  OPEN sCursor
  declare @ccode varchar(15),@cdept_id varchar(12),@ccus_id varchar(12),
  @csup_id varchar (12),@citem_class varchar(2),@citem_id varchar(20),@v_mb money,
  @iperiod tinyint,@cperson_id varchar(8),@fx1 varchar(2),@fx2 varchar(2)
  FETCH NEXT FROM sCursor
        Into @ccode,@cdept_id,@ccus_id,@csup_id,@citem_class,@citem_id,@v_mb,@cperson_id         
  
        While @@FETCH_STATUS=0   
         begin                    
   
          if @v_mb<0
           begin
            set @fx1='借'
            set @fx2='Dr'
            set @v_mb=-@v_mb
           end
          else
            begin  
            set @fx1='贷'
            set @fx2='Cr'
            set @v_mb=@v_mb
            end
        insert gl_accass (ccode,cexch_name,cdept_id,ccus_id,csup_id,citem_class,citem_id,cperson_id,iperiod,
        cbegind_c,cbegind_c_engl,mb,md,mc,me,cendd_c,cendd_c_engl,mb_f,md_f,mc_f,me_f,nb_s,nd_s,nc_s,ne_s)
        VALUES('20901',null,@cdept_id,@ccus_id,@csup_id,@citem_class,@citem_id,@cperson_id,1,
        @fx1,@fx2,@v_mb,0,0,@v_mb,@fx1,@fx2,0,0,0,0,0,0,0,0)
     
                    
               
        FETCH NEXT FROM sCursor Into @ccode,@cdept_id,@ccus_id,@csup_id,@citem_class,@citem_id,@v_mb,@cperson_id           
  --关闭并释放游标     
         end
         CLOSE sCursor
         DEALLOCATE sCursor
  --SELECT COUNT(*) FROM GL_ACCASS
  --EXEC MYPROC1
  --delete from gl_accass where ccode='20901'
  
4、文章标题:解决单据列表打开出错或无数据。
在打开单据列表,或增加单据时,有时出现运行时错误,或明明有数据,但是单据列表中一片空白,没有记录,这一般可以查看数据库表vouchers,它的itemtblname字段记载了各个系统的各个单据所在的表的名称。通过它找到相应的单据格式表,用没有出错的帐套的同名表替换即可。至于单据列表,则可以替换vouchlist表。

固定资产
1、文章标题:在做过批量资产减少后,以前年度减少的卡片(满足该批量减少条件)又再次做了减少。造成卡片管理查询该卡片的注销日期和卡片上的减少信息不一致
  数据库中fa_cards表出现多余减少记录。
  处理方式:如果已经做了二次减少。请恢复到减少月,撤销这些卡片的减少。
  查询卡片的语句:
  SELECT sCardNum
  FROM fa_Cards
  WHERE dDisposeDate<#减少日期# and 其他条件
  ORDER BY scardnum
  然后做如下语句,恢复卡片上的减少信息中日期
  update fa_Cards INNER JOIN fa_CardsSheets ON fa_Cards.sCardNum =
  
  fa_CardsSheets.sCardNum
  set fa_CardsSheets.dTransDate = fa_Cards.dDisposeDate
  where fa_CardsSheets.lSheetNum =7 and sCardID in
  (SELECT CStr(Max(Val([sCardID]))) AS sID
  FROM fa_Cards GROUP BY fa_Cards.sCardNum)
  and fa_Cards.sCardNum in ( SELECT sCardNum
                 FROM fa_Cards
                 WHERE dDisposeDate<#减少日期# and sDeptNum='21'
                 ORDER BY scardnum)
  
成本管理
1、文章标题:解决8.12升级到8.21后成本对象不能在原始单据中显示出来的脚本。
  create procedure UpdateFitem99
  as
  declare @c_ItemCode varchar(20)
  declare @c_Name varchar(50)
  declare  MyCursor scroll Cursor  for
  select   distinct fitemss99.citemcode,fitemss99.citemname
  from     fitemss99, RdRecords
  where    fitemss99.citemcode=RdRecords.citemcode   and 
           RdRecords.cname is null
  order by fitemss99.citemcode
  
  open MyCursor
  
  fetch first from MyCursor into  @c_ItemCode,@c_Name
  while @@fetch_status=0
  begin
   
   update RdRecords
            set citem_class='99',citemcname='成本对象',cname=@c_Name
          where citemcode=@c_ItemCode
   fetch next from MyCursor into @c_ItemCode,@c_Name
  
  end
  
  close MyCursor
  deallocate MyCursor
  说明:   在查询分析器中,Ufdata库中执行如上语句创建存储过程,然后再执行如下语句
  exec UpdateFitem99
  
应收系统
1、文章标题:应收系统如果核销后生成的凭证借贷方不平的可能原因。
 8.21版应收系统如果核销后生成的凭证借贷方不平,而且差别很大,有可能是此次核销的发票余额不对。此数据的问题在于客户“shxg”的4张发票在salebillvouchs表的imoneysum,iexchsum字段和Ap_Detail表的icamount不一致,造成在应收系统中查寻发票时显示的发票余额错误。以下是修改此数据的脚本,仅供参考。
  SELECT ibvid,icamount into a
  FROM Ap_Detail
  WHERE (cCoVouchID = '0000000222')
        AND (cDwCode = 'shxg')
        AND (cVouchType = '48')
  ORDER BY iBVid
  
  SELECT AutoID,imoneysum,iexchsum into b
  FROM SaleBillVouchs
  WHERE (SBVID = '222')
  ORDER BY AutoID
  
   update salebillvouchs
    set  imoneysum=0,       iexchsum=0
  where salebillvouchs.autoid in  (  
  select b.AutoID
  from  b  left join a on  b.autoid=a.ibvid
  where a.ibvid is null   )
  
  update  salebillvouchs
    set imoneysum=2220.6200,iexchsum=2220.6200
  where salebillvouchs.autoid='2518'  and  (SBVID = '222')
  
  update  salebillvouchs
    set imoneysum=31510.6200,iexchsum=31510.6200
  where salebillvouchs.autoid='2558'  and  (SBVID = '222')
  
  update  salebillvouchs
    set imoneysum=12734.0600,iexchsum=12734.0600
  where salebillvouchs.autoid='2571'  and  (SBVID = '222')
  
  update  Ap_Detail
    set iCAmount =35106.75
  where ibvid='2527'   AND (cVouchType = '48')
  
   update  Ap_Detail set iCAmount_f=iCAmount
  WHERE (cVouchID = '0000000420') AND (cDwCode = 'shxg') AND
        (cCoVouchID = '0000000222') and ibvid=2527
  
   UPDATE salebillvouchs
  SET imoneysum = 0, iexchsum = 0
  FROM salebillvouchs AS a
  WHERE a.sbvid = '305' or a.sbvid = '295'
  
  drop table a
  drop table b

2、文章标题:提高U8应收付运行效率。
  使用方法:将Sql语句(兰色)拷贝到查询分析器中,然后选择相应帐套,并执行即可。 
  --提高审核速度
  Create Index cCoVouchID On Ap_CloseBill (cFlag,cCoVouchType,cCoVouchID)
   --提高远程接收速度
  create index cVouchID On Ap_Closebill (cVouchType,cVouchID,cFlag)
   --提高收款速度
  create index HX_cDwCode On Ap_Detail (cFlag,cDwCode,cexch_name,cCoVouchType)
  
系统管理
1、文章标题:Uferpact.lst文件的一些另类用法。
  Uferpact.lst文件为u8的帐套输出文件,里面到底记载了一些什么样的信息呢?让我们来对它分析一下:首先我们用记事本打开Uferpact.lst文件,会看见里面有以下的内容:(注意:以下括号中的内容为我的注释而非原文件中所有!!)
  [BackRetInfo]
  Type=Account
  cAcc_Id=005(帐套号)
  iSysId=36774.9463310185(帐套在数据库中的唯一标识)
  cacc_path=C:\WF821\ZT005\(帐套存放的原来路径)
  Version=1.00(版本)
  VersionEx=V8.21(u8的版本号)
  Date=2002-08-05 16:22
  YCount=3
  YYear=00,01,02
  Backup=Success
  Disks=0
  Bytes=157830144
  [FileInfo]
  Count=4(输出的数据有四个文件,以下分别为其原来的路径)
  File1=C:\WF821\ZT005\UFDATA.BAK
  File2=C:\WF821\ZT005\1.vts
  File3=C:\WF821\ZT005\7.vts
  File4=C:\WF821\ZT005\144.vts
  [Files]
  (以下为对应路径同上)
  File1=1,,UFDATA.BA_,UFDATA.BAK,C:\WF821\ZT005\,,,2002-08-05 16:24,157788672
  File2=1,,1.vt_,1.vts,C:\WF821\ZT005\,,,2002-07-26 15:41,13824
  File3=1,,7.vt_,7.vts,C:\WF821\ZT005\,,,2002-07-26 15:41,13824
  File4=1,,144.vt_,144.vts,C:\WF821\ZT005\,,,2002-07-26 15:41,13824
  知道这些我们可以干吗呢?假如我们在引入客户发来的一个数据时出现问题,我们可而已尝试在这里解决,比如我们看看他原来的路径在我们的系统里是否存在,比如客户原来的信息是存放在e:盘,但是我们的系统里没有e:盘,我们就可以在这个文件里修改相关的部分来完成工作了!当然处理完后要把路径再改回去,否则客户那边也许就会出问题了!
  其次我们可以检查一下客户发过来的数据是否文件齐全,不是有文件个数和文件名字吗?检查一下就可以发现了!
  我们的机器上通常有比较多的帐套,如果和客户的信息冲突了怎么办?我们可以有两中办法,一是把我们自己的对应帐套删除,二呢就是改变Uferpyer.lst文件里的帐套信息,当然推荐使用第一个方法,如果使用第二个呢最后要记得把原来的帐套信息改正,否则发给客户的数据可能就有问题了!
  Uferpyer.lst还有一个比较另类的用法,就是我们可以利用她来达到迁移数据库物理存放路径的目的。其实非常简单,我们先把帐套输出并选中删除当前输出帐套的选项,这样帐套输出后原帐套就被删除了,然后我们把Uferpyer.lst文件里的几个路径都改为您想要迁移到的地方的路径,再引入帐套就可以达到欺骗u8而把数据库存放到我们希望存放的位置了!
  当然做这些之前记得要做好备份工作。同样的,Uferpyer.lst为年度帐备份文件,里面的信息也是一样的,这里就不再多说了!

2、文章标题:Access版本产品到SQL SerVer版本产品升级技巧。
  一般来说,Access数据库对数据的要求没有SQL SerVer数据库严格,同样的值在Access数据库中是合法的,而在SQL SerVer数据库中就是不合法的,因此在Access版本产品到SQL SerVer版本产品的升级过程中会出错。例如:1) 问题:8.12Access-->U8.20升级,在进行“工资变动”时报错。原因:在8.12Access版本中,有一个工资项目名称是“提高10%”,“%”在SQL SerVer数据库中是特殊字符,不能出现在数据库表字段取值中。解决:工资项目名称尽量使用汉字、英文字母、数字,不要使用%、"、,、(、)等符号,它们在SQL SerVer数据库中属于特殊字符,用作字段取值,会出现语法错误,导致升级失败。
  2) 问题:8.12Access-->U8.21升级,在升级到固定资产时,系统提示错误,无法升级。   原因:在8.12Access版本中,固定资产卡片表(fa_cards)中有个别卡片的开始使用日期是“1198-02-03”,在SQL SerVer数据库不能识别“1198”这个年份,所以出错,导致升级失败。解决:在8.12Access版本中这几个固定资产卡片的开始使用日期改为“1900”年以后的日期,重新升级。
  
3、文章标题:P4机器停顿(死机)现象整体解决方案汇总 。
  方法(1):禁用所有网卡,包括虚拟网卡(无网卡请装虚拟网卡)
  方法(2):设置一个任意的固定ip地址
  方法(3):将操作系统由98升级到2000
  方法(4):将设备中的网卡(或modem)只保留一个,其余的均从设备管理中删除。(注,不能同时保留一个网卡和modem)
  
4、文章标题:U8软件提示SA口令问题。
  一:对于SQL2000可能是安装时安全性选项中没有选择Windows和SQL Server集成验证方式。
   解决方案:
   (1)从企业管理器中属性的安全性页中选择Windows和SQL Server集成验证方式
   (2)在查询分析器中运行
   xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'SOFTWARE\Microsoft\MSSQLServer\MSSQLServer', 'LoginMode',  N'REG_DWORD', 2
  (3)修改注册表
   运行regedit命令
   修改HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer下LoginMode项目为 2
  重新启动MSSQLServer服务和用友U8服务
  二:系统MSADO15.DLL出错。
   重新注册MSADO15.DLL(可拷贝新的msado15.dll【ado2.0】)
   例:
   regsvr32/u  "c:\Program Files\Common Files\System\ado\msado15.dll"
   regsvr32  "c:\Program Files\Common Files\System\ado\msado15.dll"

5、文章标题:U8管理软件在远程连接中的使用。
   (一)在远程运用(特别是拨号连接)中,应注意以下几点:1)如使用拨号服务器,拨号服务器网络配置要和应用服务器的网络配置必须一致.如使用调制解调器,拨入的对方计算机要有拨入接收功能。(也就是它是一个拨号服务器);2)客户端和服务器都要设置固定的IP地址,并且他们要在同一个网段里,子网掩码要一样。3)客户端要进行服务器的IP地址的绑定.具体操作是,在客户端的hosts文件和lmhosts中添加对应服务器的ip地址和计算机名即可。注意:要修改的hosts和lmhosts这两个文件没有后缀名。4)在局域网中,远程配置时,经常看不到服务器的计算机名,这是因为客户端没有以域用户登陆,客户端和服务器的网络设置要一致,并且客户端要是服务器中域的一个用户。
   (二)在远程运用(特别是局域网连接)中,应注意以下几点:软件的标准使用要求,1)       U8管理软件在局域网里连接服务器使用(C/S结构),服务器要安装成一个域用户服务器,客户端只要满足我们软件要求的环境就可以了。2)网络配置,服务器和客户端在同一个网段,子网掩码一致。3)客户端登陆网络时以域用户的身份登陆,这样在客户端远程配置时进行就会很顺利。4)服务器和客户端安装软件的版本必须一致,同时建议在客户端和服务器端安装同一版本的数据库。
   在下列情况下也可变通的使用软件:1)客户端和服务器不在同一个网段,但他们之间是用交换机连接的,也可以进行远程配置,但使用路由器就不行了。2)在远程配置时,在网络资源里找不到服务器的计算机名,也可以敲入服务器的IP地址来进行远程配置,这种方法客户端要进行服务器的IP地址的绑定。
   (三)WEB服务器的配置:1)服务器端操作系统必须是Windows NT 或 Windows 2000 Server ,安装了IIS,是一个WEB服务器,有WEB的发布和接收功能。2)在服务器端安装U8管理软件的WEB模块,并进行配置。(一般安装完软件后就自动配置好了)3)客户端操作系统可以是Windows NT 、 Windows 2000 Server、Windows 2000 Professional、Windows 98 等。安装IE5.5以上的浏览器。配带连网的工具(网卡,调制解调器)4)客户端与服务器端必须安装中文版IE浏览器,版本号6.0(或5.5以上),安装TCP/IP协议。5)在服务器端的网络配置中,IP地址输入你们的固定、真实的IP地址就可以了。6)运行时,在连接地址栏里键入如下地址即可:http://servername/ufweb。无论财务还是业务WEB,均从上述地址登录。
   (以上只是一些在使用中的经验总结,供使用者参考)
  
2.其他
1、文章标题:SQL Server 备份及恢复的几种方法
   随着SQL Server 版软件越来越多,与此相关的数据备份与恢复的问题也越来越多,我们在解决问题的过程中总结了一些经验如下:
      一、备份各种形式
  ①从系统管理里作备份,包括帐套的备份和年度帐的备份,这种份的优点是简单,易操作,压缩性好,占用硬盘空间小,但速度慢,并且如果是软件出现故障的情况下,可能无法进入系统管理.
  ②从Enterprise Manager里做数据库的备份.每个数据库都有一个单独的备份.这种备份的优点是备份速度快,如果对SQL Server有一定了解的话,也是很简单的.
  ③如果SQL Server无法启动的话,上述两种方法都是无效的,只能采用复制物理文件的方法,把用户帐套的ufdata.mdf ufdata.ldf 和ufsystem.mdf 和ufsystem.ldf
      二、恢复数据的方法
  ①如果有帐套的备份的话,直接使用系统管理里的帐套引入功能就可以了。在这种情况下,一些操作员的权限信息可以丢失,可以重新赋予权限,也可心恢复原来的ufsystem系统控制库
  ②如果是年度帐的备份,并且软件中还有这个帐套和年度的话,可以用帐套主管注册,然后从年度帐菜单下引入;如果是没有这个帐套存在,就要在系统管理中新建一套帐,建帐时只要注意启用日期、行业性质、帐套主管即可,其他均可忽略,然后把备份中的ufdata.ba_ 用APP目录下的ufuncomp.exe 将它解压缩为ufdata.bak 再将此文件在enterprise manager 里restore 即可
  ③通过Enterprise Manager 做的单个数据库的备份的和年度帐的备份可以通过 restore database 功能来操作,具体过程为 右键该数据库—所有任务—还原数据库—从设备—选择设备—磁盘—添加—浏览该文件—确定,在选项标签里把‘强制还原’选上,移至的物理文件名为 该帐套的目录和文件名。然后就可以正常恢复了。
  ④如果是从其他数据库的备份信息里恢复的话,就可以选择还原自数据库,然后在参数处查找该数据库和数据库的备份信息。在选项标签里把‘强制还原’选上,移至的物理文件名为该帐套的目录和文件名。然后就可以正常恢复了。
  ⑤如果是帐套的备份,而该帐套又包含很多个年度,可以先将该文件解压缩,然后通过方法③所述找到该备份文件(备份设备),查看该设备的内容,选择要恢复数据库对应的备份号(每个年度一个号),在选项标签里选强制恢复,配置正确的物理文件位置
  ⑥如果只有ufdata.mdf(数据库文件),ufdata.ldf(日志文件)可以运用系统数据库(master)里的系统存储过程 sp_attach_db 来恢复,具体操作过程:在Query Analyzer 或者 Dos 里的osql 命令来实现,exec sp_attach_db '数据库名','参数1(第一个物理文件的目录及文件名)','参数1(第二个物理文件的目录及文件名)' 如 exec sp_attach_db 'ufsystem','D:\wf821\admin\ufsystem.ldf','D:\wf821\admin\ufsystem.mdf'
  注:如果是该数据库为灰色,则需要先断开该物理文件与数据库的连接, 使用sp_detach_db 语法: exec sp_detach_db '数据库名'
  ⑦如果是只有mdf 文件(数据库文件),则需要另外一个系统存储过程sp_attach_single_file_db
  具体语法为 exec ap_attach_single_file_db 'ufsystem','D:\wf821\admin\ufsystem.mdf'
⑧stop SQL Server service ,replace physname by new files and start SQL server service. 其实这一种方法也可以应用于当数据库出现损坏的情况,利用SQL Server 在启动时主动检测数据库是否完好的功能。

2、文章标题:查找重复项,及应收冲应收解决方案
  1)查找重复项的脚本
  SELECT ccuscode, cCusabbName
  FROM Customer
  WHERE ccusabbname  in (select Ccusabbname from customer
  group by ccusabbname having count(*)>1)
  ORDER BY ccusabbname;
  2)自动删除应收冲应收产生的过渡科目
  应收冲应收生成的凭证必须使用一个过渡科目如:
  借:应收账款-A                     2000000.00
      其他货币资金-银行承兑汇票      2000000.00
      贷:应收账款-B                 2000000.00
          其他货币资金-银行承兑汇票  2000000.00
  要求将过渡科目“其他货币资金-银行承兑汇票”自动删除。
  在Gl_accvouch中增加触发器的脚本:
  CREATE TRIGGER [DelteCode] ON [GL_accvouch]
  for update 
  AS
  delete from GL_accvouch where ccode='100901'
  
3、文章标题:成本加强效率脚本。
  针对部分用户在使用sql版软件时出现诸如报表打开十分缓慢申死机的现象,特给出这个sql脚本。
  ALTER TABLE [dbo].[CA_AmoCt] WITH NOCHECK ADD
   CONSTRAINT [PK_CA_AmoCt] PRIMARY KEY  CLUSTERED
   (
    [cPPID],
    [cBatch],
    [cAmoID],
    [cAmotype],
    [iPeriod]
   )  ON [PRIMARY]
  GO
   CREATE  INDEX [IX_CA_AmoCt] ON [dbo].[CA_AmoCt]([cPPID], [cBatch], [iPeriod]) ON [PRIMARY]
  GO
  delete from ca_amoct where iqua=0 and itotalamo=0 and ionptotalamo=0
  GO
  适用于任何一个SQL版成本管理

  4、文章标题:对付"尼姆达"病毒给OFFICE带来的问题...
  由于尼姆达病毒用自身覆盖了system目录下的riched20.dll文件,所以WORD等字处理软件运行不正常。用户杀毒后,可以从安装盘里找到相应的文件重新拷贝回来。
      如Win98:在压缩包Win98_35.CAB中,解开找到riched20.dll拷贝到system目录。
      Win98se:在压缩包Win98_41.CAB中。
      Win2000:在system32\dllcache目录有备份,将它拷贝到system32目录。等等
      或者也可以从其它未感染过病毒的机器拷贝这些文件
  
5、文章标题:实时错误3043磁盘或网络错误。
一般情况下在出现网络或磁盘错误、实时错误3043时,都会想到是网络环境问题提起大家注意系统环境问题如客户在服务器端打开或修复7。0产品数据库时就提示该错误。但在客户端工作正常故障原因为服务器C:盘根目录下无TEMP目录导致。

6、文章标题:连接不上服务器故障分析。
  用友财务软件8.x版本的网络功能是该软件的重要特色之一。但是由于选用数据库(特别是SqlServer7.0)对网络连接的要求较为严格和复杂,所以,当出现“连接不到服务器”或“连接服务器失败”等错误提示时,用户往往会手足无措,不知如何处理和解决。
  在对“连接不到服务器”错误原因分析之前,首先要明确一些概念:1)单机版和网络版的区别。严格来讲,用友软件U8系列不分单机或网络版本。我们所说的单机版其实是一个站点的版本。网络版是多于1个站点的版本。但是虽然一个站点,但是我们也可以在网络上使用。只要有一个服务器和几个工作站,其中只要一个工作站使用软件,其他工作站即使安装了也没关系,只要保证同时只有一个工作站即可使用。所以基于上述的概念,用友软件只要加密站点数的区别,而无单机、网络之分。2)工作站和服务器的区别。对于用友软件来说,它不支持没有服务器的对等网。软件要求如果在网络上进行应用,要求承担数据服务的机器必须为Windows NT Server4.0或Windows2000Server(Adv Server)。而工作站可以选择Win98、Windows NT、Windows2000各个版本,但是不支持WindowsME。至于最新的WindowsXP,以后更新的U8软件肯定会支持的。3)基本网络设置的要求。用友软件U8系列支持TCP/IP协议,另外由于SqlServer7.0也只支持TCP/IP协议,所以最好的网络设置里应该只有4项内容:Microsoft网络客户、网络适配器(非拨号适配器)、TCP/IP协议以及Micorsoft网络上的文件与打印机共享。而其他网络协议、网络适配器、网络服务均不用安装。至于TCP/IP协议设置,必须设置的固定IP地址以及子网掩码、网关。如果要设置DNS或WINS服务器地址,那么必须设置正确,且承担DNS和WINS服务器是正常的。至于“域”的问题,其实软件与“域”无关。所谓“域”只是逻辑上管理用户、计算机的集合,它不是物理上的概念。服务器是不是“域服务器”与软件没什么关系。只要用户使用用友软件的用户在承担用友软件的服务器上有User组的权限即可正常使用。4)“连接不上服务器”的故障现象。不同版本的U8软件反映出来的现象以及不同原因产生的故障现象也是不尽相同的。在U8 ACCESS版本中比较常见的是著名的7条错误。对于SQL版本比较常见的是“不能登陆服务器XXX”或者“要求输入Sql超级管理员SA的口令”。新版“8.13Sql版”还有“本版本是演示/教学版”的提示。
  “连接不上服务器”从根本原因上讲,主要可能有以下几大方面原因:
  (一)检测不到加密盒。如果没有检测到加密盒大多数版本软件会直接提示“没有检测到机密盒”,且不能进入软件。8.13则会提示演示/教学版,可以正常进入软件操作(若使用的帐套启用时间与当前系统登录时间相差3个月以上,则会提示“演示版过期”)。
  对于这类错误提示,可以做如下判断:在服务器上启动软件,看是否存在类似提示,如果仍出现类似提示,则将该加密盒放置在一可以做单机使用的工作站上(最好是WIN98),如果仍不能使用,则可以判断加密盒损坏。若可以正常启用,则说明服务器没有正常辨认识别出加密盒,可能原因如下:1)并口损坏或模式不正确。在CMOS设置中将Parallel Port中模式修改一下。一般设置成EPP/ECP混合模式即可。2)并口冲突。可以在“管理工具\事件查看器”中检查表示为红叉的记录是否有并口和其他设备同时使用同一个IRQ的情况。如果存在冲突,则需要删除该设备或修改冲突设备的中断。3)加密站点数减少。一般出现在Sql8.12或8.13中。现象是本来购买的8站点的加密盒,但是在使用一段时间后,只有5个工作站可以同时登录。第六个站点登录时提示检测不到加密盒或超过加密站点数。出现这种情况可以从技术支持网站下载对应版本的补丁(login.dll),并重新启动服务器。
  (二)网络设置不当或网络硬件故障。这类问题最不好判断。本着先软后硬,先简后繁的原则。属于这类问题的前提应该是服务器可以正常使用,而个别或部分工作站不能连接服务器。1)工作站登录网络的用户是否具有服务器的USER组以上权限。是否可以正常访问服务器上共享的文件夹与打印机。2)如果是个别工作站出现问题(大多数工作站正常)则重点检查出问题的工作站上的网络设置或网络硬件。可以先将网络协议、适配器、网络服务全部删除,并重新安装配置。并且需要注意的是,最好不要安装除了TCP/IP协议以外的其他网络协议,例如IPX/SPX、NetBEUI等。如果没有必要,拨号网络适配器也不要安装。安装完毕后,先使用“ping”命令测试服务器域名和IP地址是否通畅。再使用“TRACERT”命令再测试一遍。需要解释的是,“Ping”通不代表网络通畅。因为,“PING”命令只使用32Bytes作为数据包测试。而实际上我们使用的软件需要一次传输的数据量远远大于32Bytes,通常达到几十KBytes。这就相当于测试时是骑车去的,而实际使用中是开着10吨卡车上路,这肯定不能相提并论。而且,如果道路严重坑凹不平,对于自行车没什么影响,但对于大卡车来讲,却可能是致命的。除了使用“Ping”命令外,还应该测试大容量文件和细小文件的传输。测试首先需要选用一个600M左右的文件(例如VCD上的.dat文件),如果网络采用10M共享方式,那么理论的600M文件传输时间应该为600M/((10M/8)/2)=16分钟(网络上没有其他机器开机或进行网络操作)。如果所用时间远远大于16分钟(20分钟以上),或传送一定时间后,提示不能拷贝,或者反复拷贝几次后也能成功,则说明网络硬件存在接触不良或虚接的情况。另外再准备几百M的小文件(例如有些光盘内的网站镜像或图库),再实验网络传输是否正常。网络硬件可以采用替换法,即先将正常使用的机器连上出问题机器的网线,看是否通,然后再将好机器上的网卡拔下来替换出问题的机器的网卡。通过这种判断方法,一般可判断是哪个网络硬件有问题。对于所有工作站均不能登录服务器的问题,首先也要排除服务器的网络硬件,但大多数服务器均是IBM、HP等高档专用服务器,网络硬件一般不会有问题。因此重点检查服务器里的一些设置是否有误,可以检查“事件查看器中打红叉的错误。尽量解决红叉错误,即使有保留的不能解决红叉,这些错误也不要是影响用友软件的错误。3)是否存在路由、DNS等设备与服务。目前很多路由器会屏蔽TCP/IP数据包,所以采用路由器的网络一般是在网上邻居中看不到服务器的,但是通过“PING”或者查找IP地址可以找到。这种情况也应该是避免的。将数据服务器和操作工作站放置于一个网段内是比较合理的。DNS的作用是对域名进行解析成IP地址的操作。如果DNS服务器有问题,无法正确将计算机名解析成IP地址的话,那么我们可以自行建立一个DNS列表。在WIN98的目录下查找Hosts文件(如果没有用记事本新建一个),第一列写计算机名称,空二个格后写IP地址。只要计算机名称和IP地址对应正确,则不需要DNS服务器即可进行域名解析。
  (三)SQL SERVER服务与用友软件服务。承担数据服务的服务器安装SQL SERVER或MSDE后,必须重新启动服务器以便使数据库正常启动。必须检查服务器状态栏托盘内“SQL MANAGER”是否处于运行状态(即全部处于绿色Play状态)。如果不能启动,检查“事件查看器”查看不能启动的原因。如果SQL SERVER启动正常,则检查用友服务是否正常启动(随服务器启动正常启动)。如果不能启动也要检查“事件查看器”。另外,需要注意的是,安装完SQL版软件后,必须重新启动服务器,并必须在SQL启动之后,先启动系统管理,以便用友软件系统管理自行建立系统数据库、演示数据库。否则,在不存在系统数据库的情况下,怎么可能启动软件呢?
  综上所述,解决“连接不上服务器”的故障解决需要本着先软后硬、先简后繁的原则,采用替代法,并认真检查、处理服务器“事件查看器”内的错误日志,并要有充足的信心、耐心、恒心。

7、文章标题:Access数据库损坏后的修复方法。
  技术支持部在日常工作中经常会碰到因非正常退出、网络不稳定或病毒等原因造成的Access数据库损坏。损坏了的Access数据库会造成软件运行不稳定,出现各种运行错误,为解决这类问题就必须对Access数据库进行修复。
  修复Access数据库,我们一般使用微软Office 97中带的Access 97对数据库进行修复和整理。Access数据库被损坏分以下几种情况:1、严重损坏;2、轻度损坏;3、有些表被损坏或有些表的部分记录被损坏。下面就分情况介绍解决办法。
  使用Access97打不开数据库、系统提示"不可识别的数据库格式"或"不是该表的索引"等信息,这样的数据库都是损坏比较严重的。损害严重的数据库一般来说都是无法修复的,只有恢复备份了,好在这种情况比较少见。
  如果数据库损坏的不严重,只需要使用Access 97菜单上的“修复数据库”和“压缩数据库”就可以把数据库修复好。因为数据库轻微损坏的时候,一般也不会导致软件出什么问题,所以也不会引起人的注意,只有当数据库的某一个或几个表损坏了的时候,才会使软件变得不稳定,所以这种情况才是我们最常遇到的。
  如何确定数据库中哪几个表有问题呢,我们首先利用Access 97建立一个空数据库,利用系统提供的“引入数据库”功能,选择目标数据库所有的表进行引入,Access 97当引入到有问题的表时系统会提示一些错误信息,把这个表的名字记下来以备以后修复时使用。
  接下来利用Access97打开有问题的数据库,准备修复表。修复损坏的表的方法依照表损坏程度不同而不同,下面分情况介绍处理的办法:一、表损坏的非常严重,表现为无法打开表,系统提示“Microsoft jet 找不到对象”、“没有读写权限”或“不可识别”等信息。处理方法:这种表的已经损坏得非常严重了,一般无法修复。如果这个表不很重要或通常情况下表的内容为空的话,例如“常用凭证表”、“科目共享锁定表”或“凭证共享锁定表”,我们可以通过引入的方法把其他数据库的表引入,然后把有问题的表删除即可。二、表中有几行内容非常混乱或字段内标有“#已删除”字样,但当要删除这些记录时就会出现错误信息不许删除。处理办法:既然不让删除这些记录,我们可以通过使用SQL语句把没有问题的记录复制到一个新的表中,然后把老表删除把新表的名字改过来即可。例如“凭证及明细账表GL_ACCVOUCH”中有错误记录有无法删除,我们可以使用如下SQL语句把好的记录复制到GL_ACCTEMP中:
  SELECT GL_ACCVOUCH.* INTO GL_ACCTEMP
  FROM GL_ACCVOUCH WHERE {筛选的条件}
  然后删除表GL_ACCVOUCH,再把表GL_ACCTEMP的名字改为GL_ACCVOUCH即可解决问题。
  修复ACCESS数据库的注意事项,首先,我们在修复数据库前一定要做好备份,以防数据丢失或损坏;有一些数据库中有RELATION(关系)来维护数据的一致性,但当数据库异常后相关表的RELATION也就丢失了,在修复好数据库后一定要把RELATION再联好,有些软件可以自动修复RELATION,比如用友公司的ERP8.XX系列产品的数据库可以通过把表accinformation中的[cSysid]='AA' and [项目号]='99'的记录,把[设置值]和[缺省值]改为'8.0A0',重新进入系统时,系统会自动升级并重建索引。
  
8、文章标题:报表常见问题汇总。
一.UFO的常见问题: 1.一个表可以取多个帐套的数据吗?答:可以,只要在公式中加入帐套号和年度的参数即可以。 2.DOS版的UFO的公式可以转成811A的公式吗?答:在转换时选中:把公式转为同名的批命令即可。但公式变为批命令后,要按新的公式格式进行调整。 3.UFO的从帐务取数QM()的注意事项。答:UFO的QM函数一般取的是总帐中的帐簿下的余额表的科目余额的数据。但如果科目有往来核算,取出的数据为客户(供应商)科目余额表的数据.在函数中加入方向即为在查询余额时按指定方向查询的结果。注意:写方向和不写方向的区别:写方向为取客户余额在借(贷)方的余额合计.不写方向取的为余额表的借贷差额. 4.非法操作的处理方法。 如详细信息为:位于MFC42.DLL产生的非法操作,应删去UFOW.INI就可以解决;但如果信息为:位于MSVCRT.DLL产生的非法操作,则应检查是否安装了其他与产品冲突的软件或驱动程序,卸载其他无关软件,或改变安装顺序可以解决. 5.如何调用自定义菜单?答:在命令窗用SETMENU”菜单文件”命令.不加文件名为回到系统菜单。 6.他表取数注意的问题答:如果报表不在UFOW.EXE所在的目录下,要在报表名前加上完全路径。如在网络上,应用映射盘符,不能用\\机器名的方法.也可以把可执行文件拷贝到存放报表的目录下,然后在桌面上创建快捷方式。 7.TFS()函数的特殊用法。答:可以按摘要来取数,如想取结转数,可以在公式的摘要处填入:"结转"。因有些科目结转后净额为零,可以借助此功能取出:结转前的科目的净发生额。 8.UFO取数时,明明公式正确,却取不出数据的原因。答:可以检查单元属性是否与要求的类型一致,是数字型或字符型。 9.indb的用法和注意事项。答:可以从数据库中按条件取数,注意:在批命令中用循环语句取表中所有记录的数据,因INDB()在取数据库的大于最后一条记录处会返回错误,所以在循环语句中要写明循环的最大记录数,否则无法成功地把所有的记录取出。二.财务分析注意事项 1.报表分析中的资产负债表的累计折旧和坏帐准备金额为负,造成固定资产净额和应收帐款净额不对。答:备抵科目的科目属性的期初余额方向应设为贷方,如设错,可以恢复记帐前状态到年初,改变期初方向后,再重新记帐。 2.如何改变报表的表项名称?答:在UFSOFT80\ZT帐套号\下可以找到:报表初始的文件CWFX.MDB,在这可以找到报表预置的表,再修改表中项目名称及累计单元的公式。 3.产品毛利率的科目设置时,无法用参照的方法增加科目。答:应在系统初始中的基本项目中科目设置处把产品收入和成本处填入有下级科目的一级科目,在增加科目时才能参照出它的下级科目,进行增加。 4.现金收支表取的数据与现金流量表不一致,应以哪个为标准?答:因现金流量表是拆分凭证后得到的,所以应以现金流量表为标准。而财务分析的现金收支表的数据只起参考作用。 5.财务分析的报表中如何取往来单位的余额合计?答:在报表初始处选中表项,双击后出现科目来源定义的窗口,在应收或应付处打勾后,可以选中科目双击后,在科目后出现[往来]的字样,即可以取出往来单位的余额合计。三.合并报表的问题 1.合并报表与行业报表的区别。答:合并报表适用于有抵消关系的单位抵消后,生成合并报表数据;行业报表适合无抵消关系的多单位的数据汇总和查询检索分析。 2.合并时报错(批命令或抵消数据不平)的原因分析。答:如批命令出错,原因一般为样表的格式变动过,但表中的项目属性(在菜单中可以看到)没有对应改变,造成报表的项目属性和单元属性对不上,批命令生成不正常导致报错;抵消数据不平是指在报表定义中的项目属性定义中的已设为"是抵消项目,下发"的项目,在抵消双方的单位录入抵消数据时,应录入一致的数据,如不一致,在合并前要在调整抵消数据处将其调成一致在合并。 3.合并报表后可以修改吗?答:可以,在查询合并结果处可以修改。 四.行业报表的问题 1.E-mail收发不行的原因。答:8.11A的光盘上的行业报表有问题,换成8.12应可以解决。 2.E-mail下发时注意的问题。答:应用表集下发,最好用磁盘下发,存入硬盘再通过E-mail的附件发送,如直接用E-mail发送,接收方要关闭OutLook或其他接收工具,用行业报表接收。否则会接收不到。

9、文章标题:中文Windows 95硬件设置文件SYSTEM.INI详解.
SYSTEM.INI文件的组成  SYSTEM.INI文件包含若干小节,每一节由一组相关的设定组成。其中小节和设定的格式如下:[小节名]关键字名=值组成SYSTEM.INI文件的主要小节名称和说明如下:段名说明[Boot]驱动程序和Windows模块清单[Keyboard]包括有关键盘的信息[Boot.description]可通过Windows Setup修改的设备名[386Enh]        386Enhanced模式下的Windows需要使用的信息[NonWindowsApp]非Windows应用程序使用的信息[MCI]Media Control InterFace(MCI)驱动程序清单[Drivers]可安装的驱动程序名或别名清单[Drivers32]可安装的32位驱动程序名或别名清单[TTFontDimenCache]Win 95的TTF字库的Cache配置注:修改SYSTEM.INI中的主要设置项是非常危险的,很可能导致Windows任务的致命错误。SYSTEM.INI文件配置详解释1.[Boot] [Boot]记录了中文Win 95启动时建立的一些基本设置。最重要的有Win 95的外壳程序(SHELL程序)。通常此SHELL程序为Win 95资源管理器,但也可以是其它程序,如程序管理器(Program Manager)、 文件管理器 ( File Manager) 等。 该节中, 除CacheFileHandles之外,其它设定都是必需的。如果修改或删除其中一个设定,Win 95可能就无法正常工作。对没有固定的缺省值的设置项,Win 95将根据系统配置对其进行设定。(1)Comm.drv=文件名(缺省值:COMM.DRV)   该项用于指定系统使用的串行通讯驱动程序名。若用户从使用了第三方通讯驱动程序的Win 3.x 环境升级,则Win 95将不会用Microsoft的COMM.DRV 来代替原有的驱动程序,这时,需要在SYSTEM.INI的[386Enh]段中加入设置项:Commdrv30=ON。若要用Microsoft公司的COMM.DRV替换第三方的通讯驱动程序,而该通讯驱动程序在被安装的同时加载了自己的虚拟通讯驱动程序,还需要在SYSTEM.INI的[386Enh]小节中作一些修改。  (2)Fixedfon.fon=文件名(缺省值:根据显示驱动程序确定)此设置用于说明可在中文Win 95中运行的Windows 2.x、3.x 的字体。若系统中有使用单一空间(Mono Spaced) 字体的旧版本的应用程序,可通过修改此行来更新字体。为使记事本在VGA系统上使用适当的空间字体,用户应将Fixedfon.fon 设置为VGASYS.FON。此设置中指定的是光栅字体文件, 其扩展名为.FON,这些字体文件必须放在SYSTEM目录中。(3)Fonts.fon=文件名(缺省值:根据显示驱动程序确定)此设置用于说明Win 95在菜单和对话框中使用的字体。Win 95为不同的分辨率提供了不同版本的字体, 并将这些字体划分存放在SYSTEM目录中。中文Win 95提供的系统字体有:EGASYS.FON、VGASYS.FON和8514SYS.FON等。用户可在“Fonts. Fon=”行中指定任何可用的系统字体。修改Win 95菜单字体的另外一种方法,就是修改WIN.INI 文件中的[Fonts]段的描述。注:若在此设置项中指定了一种不可用字体,则Win 95将无法运行,此时,必须重新启动计算机。(4)OemFonts.fon=文件名(缺省值:根据显示驱动程序确定)此设置定义Win 95的剪贴板浏览器程序, 可用于显示 OEM TEXT格式文本的字体。Win 95的安装程序 SETUP为不同的分辨率安装相应的字体, 并据此对“OemFonts.Fon=”行进行初始化。 中文Win 95支持三种OEM类字体:EGAOEM.FON、VGAOEM.FON和8514FON.FON。在此设置项中指定的字体必须是使用DOS 字符设置的单一空间字体,而非ANSI字符设置的其它Windows系统字体(符号除外)。当用户向剪贴板中拷贝文本块时,Win 95一般以OEM TEXT 格式将其存放,此时,若将该文本调入一非Windows应用程序, 则剪贴板将以OEM TEXT格式向其提供数据。例如,在进行了适当的字符值转换后,在非Windows 应用程序中可象在Windows 应用程序中那样显示加重的字符。注:在“OemFonts.fon=”行设置字体之前, 必须先在剪贴板浏览器中选择“显示”命令和OEMTEXT 。若修改此行, 指定的字体必须是Win 95的OEM字体,否则Win 95将无法运行, 只能重新启动微机系统。(5)Shell=文件名(缺省值:Explorer.exe)此设置用于指定启动或结束Win 95任务的默认SHELL 程序。该设置项是系统必需的,因此不能删除此设置项或它的参数。资源管理器(Explorer Manager)为其默认SHELL程序,但用户也可以将其改为程序管理器(Program Manager)等其它程序。 如:Shell=Winfile.exe.几乎所有的Windows应用程序都可指定为SHELL程序,但当该程序不能激活其它应用程序的时候,则会使Win 95系统成为一个单一的应用程序环境,有时候这一特点非常有用。例如,若用户只使用Excel 或Word,就可将Excel或Word设置为Win 95 的默认的SHELL 程序,以节省启动时间。 在选择第三方 SHELL 程序, 如Norton Desktop For Windows 95作为默认设置时,通常会自动修改“Shell=”行。  注:“Shell=”行必须带有参数,否则,Windows将无法启动。(6)Sound.drv=文件名(缺省值:根据系统的声音硬件确定) 此设置项用于Win 95系统使用的声音驱动程序。(7)ScrnSave.exe=文件名(缺省值:无)该项主要用来为Win 95设置屏幕保护程序。例如:ScrnSave.exe=D:\PWIN\SSMARQUE.SCR   2.[NonWindowsAPP] [NonWindowsAPP]包含影响非Windows应用程序性能的一此设定。例如,MS DOS 7.0本身的运行、MS DOS 7.0中的鼠标操作以及其它管理工作等方面。(1)CommandEnvSize=字节数(缺省值:MS-DOS 3.2 以前的版本设为0,其它版本的缺省值为 CONFIG.SYS文件中SHELL=命令行参数/E:后面的数值) 此设置用于指定COMMAND.COM环境的大小。在Win 95中运行一个非Windows 应用程序时,若显示“NotEnough Environment Space”(环境空间不足)的信息,就要增加此设置值。例如,要分配2KB的环境空间,可输入下行:  CommandEnvSize=2048由于Win 95在执行批处理文件(.BAT)时会启动COMMAND.COM, 因此这个设定也适用于批处理文件。设定值为0~32768或160~32768。0表示取消此设定,如果值太小,可增为160,如果值太大可减至32768。所设的值如果小于当前实际环境的大小, 设定值将失效,效果和设为0一样。在Win 95下运行一个DOS应用程序时,Win 95将建立一个虚拟机(DOS VM),并为它提供一个MS DOS 7.0 的环境空间的备份。 该DOS环境空间与CONFIG.SYS分配的相同,默认为160字节,用户也可以指定其它数值。如:SHELL=C:\DOS\COMMAND.COM /E:1024/P (2)DisablePositionSave=0/1(缺省值:0)   如果此设定失效,退出应用程序时,非Windows 应用程序的位置和所用字体将保存在DOSAPP.INI文件中。如果设定该项,则不保存没有事先保存在DOSAPP.INI文件中的非Windows 应用程序的位置和所用字体。(3)FontChangeEnable=0/1(缺省值:0) Win 95视频攫取器(用于Win 95的显示器驱动程序)。包含在窗口运行非Windows 应用程序时改变字形的内部支持。如果所用的Windows 3.x版攫取器未经更新,没有包括改变字形的功能, 而你想使用此功能时,可启动此设定。但是, 在启用此设定时屏幕上可能会丢失字符,而且(鼠标器)光标的大小和位置可能稍有改变。若您的鼠标器不能正常工作,可将FontChangeEnable参数恢复为0。(4)LocalTSR=TSR应用程序列表(缺省值:DOSEDIT,CED)   该设置指定哪些内存驻留程序(TSR) 在复制到虚拟机的每个实例中都能正常工作。启动Win 95时,系统检查当前正在运行的所有TSR程序,如果TSR在Local TSRs列表中,Win 95把TSR 复制到运行的虚拟机的每一实例中。但许多TSR 程序即使加到此列表中也无法正常运行,因此在将其加到列表中之前,必须确保TSR程序和Win 95完全兼容,而且可以复制到虚拟机上。(5)MouseInDosBox=0/1(缺省值:如果已装入.COM 或. SYS 的鼠标器驱动程序, 而且支持在非Windows应用程序中使用鼠标,设定为1;否则缺省值为0)在窗口运行非Windows应用程序时,说明是否支持鼠标器。如果使用Win 95的攫取器Grabber,则在Win 95下执行非Windows应用程序时可自动提供鼠标器支持。如果使用Windows 3.x 版攫取器,而且需要鼠标器支持,可启用此设定。(6)NetAsynchSwitching=0或-1(缺省值:0, 除非正在运行的应用程序可以通过NetBIOS支持任务切换器API的使用) 该设置指明在标准方式下,应用程序在进行异步网络BIOS调用后,是否可以从应用程序切换出来,若取消此设定,则不能切换。从某些应用程序切换出来可能导致系统崩溃。一旦Win 95检测出一个异步NetBIOS调用,即使不再调用, 也不能从应用程序切换出来。 只有确保使用的应用程序在不活动和不会收到网络消息时才能启动此设定。(7)Screen Line=数值(缺省值:25) 该设置项将指定运行非Windows应用程序时屏幕显示的行数。 应用程序若指定不同屏幕模式则可重新设定该值。 该设置参数可改为43、50,但可能应用程序不会接收这一设置值。3.[386Enh] [386Enh]节含有运行中文Win 95时特有的信息,包括用于虚拟存储器页面交换的一些信息。这些参数设置主要是围绕如何充分地利用386、486以上处理器。(1)AIIVMSExclusive=OFF/ON(缺省值:OFF)启用此设定,它将迫使所有应用程序以独占的全屏幕方式运行,并取代应用程序的程序信息文件(PIF)中所有相反的设定。启用此设定时,若正在运行与Win 95不兼容的网络和内存驻留软件,可以延长中文Windows对话期的时间。Microsoft 公司建议在运行网络与或者与Win 95不完全兼容的TSR软件时,使用该项设置。此设置项为ON,则屏蔽Win 95的Alt+Enter组合键功能。在Win 95中运行DOS 应用程序时,该组合键可使程序在全屏幕显示方式和窗口显示方式之间切换。(2)AIIEMSLocked=OFF/ON(缺省值:OFF) 此设置为ON时,Win 95不再把扩充内存移入磁盘,并注销任何阻止扩充内存加锁的PIF设置。 在大多数情况下,将扩充内存转换到磁盘上不会引起任何问题。若Win 95系统中使用了磁盘缓冲程序或要求扩充内存的 DOS设备驱动程序,则将此设置设为ON。(3)AltKeyDelay=秒(缺省值:0.005)此设置定义了Win 95在处理完一个Alt 中断之后等待处理另一个键盘中断的最长时间。若系统中某些应用程序不能正确处理Alt键,最好延长此设置参数值。(4)AltPasteDelay=秒(缺省值:0.025)此设置项定义了按下Alt键之后Win 95 等待字符输入的最长时间。 有些应用程序要求比默认值更高的设置值。(5)AutoRestoreScreen=OFF/ON(缺省值:0N)此设置用于确定在转向一个在Win 95中运行的非Windows 应用程序时,该程序屏幕是由中文Win 95还是由程序自己恢复。它仅对运行于VGA显示模式下的应用程序起作用, 在这种情况下,程序本身和Win 95都可以恢复程序屏幕.(6)CGA40WOA.FON=文件名(缺省值:CGA40WOA.FON-美国用法)Win 95将使用此设置指定的字体显示那些需要40列、小于或等于25行显示方式的非Windows应用程序。(7)CGA80WOA.FON=文件名(缺省值:CGA80WOA.FON-美国用法)   Win 95将使用此设置指定的字体显示那些需要80列、小于或等于25行显示方式的非Windows应用程序。(8) COM1AutoAssign=数值(缺省值:2)(9) COM2AutoAssign=数值(缺省值:2)(10)COM3AutoAssign=数值(缺省值:2) (11)COM4AutoAssign=数值(缺省值:2)   此设置项指定Win 95 在两个非Windows 应用程序或一个非Windows应用程序与另一个Windows应用程序同时提出使用某一特定的COM接口的处理方法。参数为-1,则Win 95将发出警告,并询问用户联接哪一个应用程序;参数为0,Win 95 将不介入冲突,也就是说任何应用程序在任何时候都可使用该接口; 参数大于0,Win 95将把接口分配给首先提出申请的应用程序,当该应用程序使用完毕后,Win 95 将等待若干秒(即这里的设置值), 然后再把此接口分配给第二个应用程序。这里的设置值应小于1000。一般情况下,该参数最好不要设为0,但有些非Windows打印程序要求将串行上的打印机参数设置为0。注:Win 95经常对Windows 应用程序提出的设备请求进行仲裁。AutoAssign 数值仅用于虚拟机之间的请求, 也就是说其中至少有一个请求来自非Windows应用程序。(12)COM1Base=地址(缺省值:在BIOS数据区域内的接口值) (13)COM2Base=地址(缺省值:在BIOS数据区域内的接口值)(14)COM3Base=地址(缺省值:3E8H)(15)COM4Base=地址(缺省值:在BIOS数据区域内的接口值) 这些设定可在Win 95中为每个串行接口定义基本(启动)地址。  (16)COM1Buffer=数值(缺省值:128) (17)COM2Buffer=数值(缺省值:128)   (18)COM3Buffer=数值(缺省值:128) (19)COM4Buffer=数值(缺省值:128)这些设置项定义了Win 95分配给每个接口的缓冲区的字符数。若字符较多,则需要增加缓冲区。微软公司建议,在修改此参数之前,应先将“COMxProtocol=”行设置为XOFF。若系统在Win 95中使用了16550 Universal Asynchoronous Receiver Transmitter( UART) 和非Windows通讯程序,则需把通讯缓冲区设置为0,以便更好地利用UART的缓冲区。(20)COM1FIFO=OFF/ON(缺省值:ON)(21)COM2FIFO=OFF/ON(缺省值:ON) (22)COM3FIFO=OFF/ON(缺省值:ON) (23)COM4FIFO=OFF/ON(缺省值:ON) 这些设置项用于确定16550 UART 的 FIFO 缓冲区是否可用。若系统中使用了一个不能很好地支持 FIFO 缓冲区的新版本16550 UART或遇到了问题,则应将相应的接口的FIFO缓冲区关闭,即将上述参数全改为OFF。  (24)COM1IRQ=数值(缺省值:4) (25)COM2IRQ=数值(缺省值:4)(26)COM3IRQ=数值(缺省值:4) (27)COM4IRQ=数值(缺省值:4)这些设置用于说明每个串行接口在Win 95中使用的中断请求。(28)COM1Protocol=XOFF|(空格)(缺省值:空格) (29)COM2Protocol=XOFF|(空格)(缺省值:空格)(30)COM3Protocol=XOFF|(空格)(缺省值:空格)   (31)COM4Protocol=XOFF|(空格)(缺省值:空格) 这些设置用于确定以Win 95运行的Windows 是否中止在虚拟机中仿真一个XOFF字符的应答字符。若上述参数被设置为 XOFF以外的其它值或者全部设置行缺省,Win 95将忽略XOFF字符;若其中某行被设置为XOFF,则中文Windows在收到一个XOFF 字符后停止发送字符,当它收到第二个字符 (无论任何字符) 时才恢复发送。当某一个串行口进行二进制文件传送时,用户应关闭其相应的Protocol设置;若在高波特率传送时发生字符丢失现象,则应将相应的Protocol值设置为XOFF,若此时仍然有字符丢失现象,应该增大相应的“COMxBuffer=”行的设置。  (32)COMBoostTime=毫秒数(缺省值:2)该设置指定允许虚拟机处理一个COM中断的时间。运行通信应用程序时, 如果输入的字符没有出现在屏幕上, 请试着增大此设定值。  (33)COMIRQSharing=OFF/ON(缺省值:MCA和EISA为ON, ISA为OFF)此设置用于确定串行口是否可共享中断请求行。若 COM1 和COM3或COM2和 COM4 在系统中使用同一个IRQ,本行应设置为ON。 (34)Commdrv30=OFF/ON(缺省值:OFF) 如启用此设定,虚拟COM驱动程序(VCD)将自己的中断处理程序副本用于串行通信驱动程序,这将改善COM端口的性能。如果使用的是Windows 3.2 以上版本的串行通信驱动程序,则设为OFF。(35)DMABufferIn1MB=OFF/ON(缺省值:OFF) 此设置项用于确定是否需要与8 位总线控制卡兼容而将直接内存访问(DMA)缓冲区装入内存的首兆字节中。  (36)DMABufferSize=字节数(KB)(缺省值:16) 此设置项用于定义DMA缓冲区所使用的内存的大小, 有些系统的 DMA 缓冲区需要 16KB 以上的内存, 如 Central Point Software建议设置64KB的DMA缓冲区。若NetBIOS 网络是在启动Win 95前安装的,则Win 95将使用较大的内存设置参数,而且需要在“NetDMASize=”中对该参数加以说明。若系统使用了带有“D=”参数的EMM386.EXE,Win 95将忽略此参数,而使用DMABufferSize 的设置参数。(37)DualDisplay=OFF/ON(缺省值:根据显示适配器确定) 一般情况下,在Win 95运行时,除非测出第二个显示器,否则B000:0000和B7FF:000F之间的存储器都由系统使用。如果使用VGA彩色显示器,并希望EMM386.EXE 把此地址空间作为上位存储器块(UMB),请选择此设定并在CONFIG.SYS 的DEVICE=EMM386.EXE命令行中加上I=选项,即:DEVICE=EMM386.EXE I=B000-B7FF 如果该设定不起作用,则EGA系统可以使用此地址范围,但VGA系统无法使用,因为VGA 显示设备要支持单色模式, 而单色模式要使用该地址空间。(38)EGA40WOA.FON=文件名(缺省值:EGA40WOA.FON-美国用法)Win 95将使用此设置项指定的S字体显示那些需要40列、大于或等于25行显示方式的非Windows应用程序。(39)EGA80WOA.FON=文件名(缺省值:EGA80WOA.FON-美国用法) Win 95使用此设置项指定的字体显示那些需要80列、大于或等于25行显示方式的非Windows应用程序。(40)EMMExchude=段-范围(缺省值:无) 该设置项指定一个存储器范围,Win 95不扫描其中未使用的地址空间,其副作用是关掉了此范围中RAM和ROM的搜寻码。此范围(以连字符隔开的两个段值)必须介于A000~EFFF之间。这种扫描可能干扰某些使用相同存储器范围的适配器。起始值下舍、终止值上入成16K的倍数。例如,设 EMMExclude= C800-CFFF,以阻止中文Windows 扫描C800:0000到CFFF:000F 之间的地址。 要指定多个范围, 可加入多行EMMExclude。(41)EMMInclude=段-范围(缺省值:无)该设置项指定一个存储器范围,不论该范围中的内容如何,WIN 95都把它当作未使用的地址空间。如指定的地址范围与EMMExclude重叠,则EMMInclude优先于EMMExclude。此范围( 以连字符隔开的两个值)必须介于A000~EFFF之间。起始值下舍、终止值上入成16K的倍数。例如,设EMMExclude=C800-CFFF ,以保证Win 95可以使用C800:0000到CFFF:000F之间的地址。要指定多个范围,可加入多行EMMInclude。  (42)EMMPageFrame=段范围(缺省值:无) 当Win 95中找不到合适的页框时,此设定指定64K 页框的起始段。允许某区域中的EMM页框包含某些未使用的RAM或ROM, 例如,设EMMPageFrame=C400,使页框位置从C400:0000开始。(43)EMMSize=字节数(KB)(缺省值:64KB) 该设置项指定可映射为扩充存储器的存储器总量。缺省值将系统存储器可能的最大数量映射为扩充存储器,若运行的应用程序占用了所有可用的扩充存储器,请指定此设定的值,此时,不能再创建新的虚拟机;如果该值为零,将不分配任何扩充存储器,但装入EMM驱动程序;若令EMM失效并阻止EMM 驱动程序装入,请使用NoEMMDriver设定。  (44)FileSysChange=OFF/ON(缺省值:OFF) 该设置项指出在非Windows应用程序建立、改名或删除文件的任何时刻, 文件管理器是否自动接受消息。如此设定失效,虚拟机即使修改文件,也可以以独占方式运行。启用此设定会显著降低系统的性能。(45)Global=设备名(缺省值:无) 此设置项用于定义一个全局的MS DOS设备,也就是说只需在内存中保留一份该设备的状态,所有虚拟机都能使用它。在默认状态下,除CON外的所有DOS设备都是全局性的,但是有些设备驱动程序可将自己定义为局部的,因此,当将某些设备定义为局部性的并引起系统中断时,应改变Global=设置来排除此故障。注:本设置项中的设备名必须是那些已在CONFIG.SYS中列出的设备名,否则将导致设置项无效。  (46)InDOSPolling=OFF/ON(缺省值:OFF) 启用此设定,可避免当存储器驻留软件已设置InDOS 标志时,Win 95再运行其它应用程序。如果存储器驻留软件需要在临界区内脱离INT 21进行操作,需要启用此设定,但会稍稍降低系统的性能。(47)INT28Critical=OFF/ON(缺省值:ON)该设置项指定是否需要一个临界区处理存储器驻留软件使用的INT 28H中断。有些网络在INT 28H中断时作内部任务切换,这些中断可能锁住某些网络软件。若不使用这类软件,可令此设定失效以改善Win 95的任务切换的性能。(48)IRQ9Global=OFF/ON(缺省值:OFF) 此设置项为ON时,IRQ9屏蔽将转换为全局性的。若在Win 95下无法读取软盘数据,可将本行设置为ON。(49)KeyBoostTime=秒(缺省值:0.001)此设置项用于说明一个应用程序在接受键盘输入时获得高优先权的时间。当运行后台程序,而前台应用程序又对键盘输入响应较慢时,可提高此设置值来改善此状况。(50)KeyBufferDelay=秒(缺省值:0.2) 此设置项用于说明在键盘缓冲区已满,显示键盘输入之前,Win 95的等待时间。当某些非 Windows应用程序不能正确显示剪贴板的文本时,可提高此设置来改善此状况。  (51)KeyIdleDelay=秒(缺省值:0.5)此设置项用于定义Win 95在向虚拟机模拟一键盘输入后,忽略空调用的时间。减少此设置值可加快键盘输入速度,但也可能使一些应用程序的运行速度降低。(52)KeyPasteCRSkipCount=数值(缺省值:10) (53)KeyPasteSkipCount=数值(缺省值:2)这两行设置可控制WIN 95 用以减缓虚拟机输入速度的延时循环, 特别是在发送了一个“回车”(KeyPasteCRSkipCount)或其它字符(KeyPasteSkipCount)之后,Win 95 发送第二个字符之前,这两个设置可确定有多少个INT 16H 调用应该返回“空”。若在向一个非Windows应用程序传送时发生字符丢失现象,可提高此设置值来改善这种状况。  (54)KeyPasteDelay=秒(缺省值:0.003) 此设置项用于定义Win 95在发送两个字符之间等待的最短时间。若想改变在发送时出现的字符丢失现象,应提高此设置值。  (55)KeyPasteTimeOut=秒(缺省值:0.003)此设置项用于定义Win 95在由快速发送(INT 16H) 转向慢速发送(INT 9H)机构之前,提供给一个应用程序进行BIOS 键盘读调用的时间。  (56)KeyPasteTimeout=秒(缺省值:0.003) 此设置项用于定义Win 95在由快速发送(INT 16H)转向慢速发送(INT 9H)机构之前,提供给一个应用程序进行BIOS键盘读调用的时间。  (57)KybdReboot=OFF/ON(缺省值:ON) 此设置项用于确定Win 95在响应Ctrl+Alt+Del命令时是否使用一个键盘控制器命令重新启动计算机机。若使用该键盘命令启动计算机时发生系统中断,则应将此设置改为OFF。(58)LocalLoadHigh=OFF/ON(缺省值:OFF) 此设置项用于确定Win 95是否保留一些空闲UMB以供虚拟机的局部使用。除非有特殊的虚拟机需要同时使用UMB,否则,不要将此行设置为ON。(59)LocalReboot=OFF/ON(缺省值:ON)此设置项指定在Win 95下出现不可恢复错误之后,可否按Ctrl+Alt+Del键退出应用程序。启用此设定, 退出应用程序时不退出Win 95;反之,重新启动整个系统。  (60)MaxCOMPort=数值(缺省值:4) 此设置项指定Win 95下可以支持的最多COM端口数。如果计算机上安装的COM端口数不止4个,可以改变此值。(61)MaxPagingFileSize=字节数(KB)(缺省值:可用磁盘空间) 该行是SYSTEM.INI中用于控制临时交换文件最大长度的两行设置之一,它与硬盘的可用空间有关。Windows一般不允许建立容量大于可用硬盘空间一半的临时交换文件。若磁盘空间不够,应减低此设置值,即在[386Enh]段中加入“MaxPagingFileSize=”行,并将其设为需要的数值。另一有关设置为MiniUserDiskSpace。  (62)MaxPhyspage=十六进制页数(缺省值:根据Windows启动时所测试的物理内存总数设定)。此设置项用于说明可供Win 95使用的最多物理内存页数。若硬件设备不能识别系统中所有的物理内存(如ISA、DMA网络卡不能使用16MB以下的内存),将在MaxPhysPage=行中设置一个具体数值.(63)MCADMA=OFF/ON(缺省值:MCA计算机为ON,其它计算机为OFF)此设置项用于确定Win 95是否对DMA使用微通道扩展。若用户使用的是不带DMA扩展的微通道计算机,则应将此行设置为OFF。(64)MessageBackColor=VGA颜色属性(缺省值:1)(65)MessageTextColor=VGA颜色属性(缺省值:F)此设置用于指定Win 95在显示全屏幕文本信息时的背景和前景色。系统默认背景为蓝色,字符为白色。背景色的参数值范围为0~7,前景色参数值范围为0~F(十六进制)。(66)MiniTimeSlice=毫秒(缺省值:20)   此设置项指定DOS虚拟机运行的最短时间。减少此设置值可使多任务运行更加顺利,但会降低整体性能。因为在这种情况下,Win 95需要花费更多的时间进行任务切换。注:由于Windows应用程序都是在虚拟机中运行,因此该设置不会对Win 95应用程序之间的处理器时间分配产生影响。(67)MiniUserDiskSpace=字节数(B)(缺省值:2000) 此设置项指定Win 95在建立临时交换文件时系统保留的最小空闲硬盘空间,对永久性交换文件无效。若临时交换文件需要更多存储空间,可适当减小此设置值。(68)MouseSoftInit=OFF/ON(缺省值:ON)   在窗口中运行非Windows应用程序时,若使用鼠标对光标和屏幕信息造成破坏,可将此设置项设为OFF。(69)NetAsynchFallback=OFF/ON(缺省值:OFF)(70)NetAsynchTimeout=秒(缺省值:5.0) 启用“NetAsynchFallback=”设定Win 95会试图保存一个失败的NetBIOS请求。“NetAsynchTimeout=”设定是对NetBIOS的超时期限进行指定。当应用程序发出一个异步NetBIOS请求,Win 95会试图在全局网络缓冲区中分配空间来接收数据,如果全局缓冲区的空间不足,中文Win 95通常无法完成NetBIOS请求。启用此设定后,中文Win 95就会试图在本机存储器中分配一个缓冲区来保存这一请求,并且在收到数据或超时期限终了之前禁止其它的虚拟机运行。(71)NetDMASize=字节数(KB)(缺省值:在微通道机器(IBMPS/2或其兼容机)上为32;在非微通道机器(IBM PC/AT或其兼容机)上为0) 在安装了网络并指定NetBIOS传输软件的所用的DMA缓冲区大小的情况下,缓冲区容量取此值和DMABufferSize值中的较大者。(72)NetHeapSize=字节数(KB)(缺省值:12)在网络上传输数据时,指定常规存储器中分配给数据传送缓冲区的大小。所有指定值都上入为4K的倍数。  (73)Network=(缺省值:由设置程序根据系统配置指定适当的值) 在Win 95中指定所用的网络类型。(74)NoEMMDriver=OFF/ON(缺省值:OFF) 此设置为ON时,Win 95将不安装为运行非Windows应用程序提供的扩充内存驱动程序。若非Windows应用程序不需要扩充内存,则将此行设置为ON,这样,Win 95就可以把传送缓冲区分配在高位内存块中,为非Windows应用程序释放更多的常规内存。(75)PageBuffers=数值(缺省值:4) 此设置项定义了Win 95在使用虚拟内存时用于存放异步读写页的4KB缓冲区的个数。增加此设置值可提高Win 95的性能。(76)Paging=OFF/ON(缺省值:ON) 设置项为OFF时,Win95不能使用虚拟内存。若用户需要使用由临时或固定交换文件占用的磁盘空间,可将此设置项设为OFF。(77)PagingFile=路径及文件名(缺省值:C:\Windows\WIN386.SWP) 此设置项用于说明临时交换文件的位置和文件名。由于本行包括了文件的全部路径名,因此,它可以克服PagingDrvie中任何矛盾的设置。 (78)PagingDrive=驱动器名(缺省值:SYSTEM.INI文件所在的驱动器) 此设置指定Win 95中临时交换文件使用的驱动器。若系统使用固定交换文件,则此设置无效。(79)PermSwapDOSDrive=驱动器名(缺省值:无) 此设置项指定Win 95的固定交换文件所使用的驱动器。若系统使用的是临时交换文件,则此设置无效。  (80)PermSwapSize=字节数(KB)(缺省值:无) 此设置项用于指定固定交换文件的大小。  (81)PerVMFiles=数值(缺省值:10)此设置项指定为每个虚拟机提供的局部文件句柄数。  注:若在系统中装入了DOS的SHARE.EXE实用程序,则此设置无效。另外,所有虚拟机可打开的文件句柄数与在CONFIG.SYS的FILES中指定的句柄数之和不能超过255。  (82)PSPIncrement=数值(缺省值:2) 该设置项指定启用UniqueDOSPSP设定时,Win 95应为每个相继的虚拟机保留的外加存储器数量(以16个字节的增量递增)。机器发挥最大功效的设定值由存储器配置及所运行的应用程序决定,有效值为2~64。详细内容参阅UniqueDOSPSP设置。(83)ReflectDSPInt2A=off/on(缺省值:OFF) 该设置项指出Win 95是接收还是弹回DOS的INT 2A信号。OFF表示Win 95将接收这一信号以提高Windows的执行效率。如果运行的存储器驻留软件依赖于检测INT 2A消息,请启用此设定。  (84)ReservedHighArea=段地址范围(缺省值:无) 此设置项指定禁止Win 95检查的高位内存范围。该区域的上下界数值为16进制,两值之间以“-”符分隔。需要时,Win 95将使用该范围以外的区域,因此,此范围大小应为4KB倍数。该设置与EMMExclude相似,只是指定的内存区域要小一些。 (85)ReservePageFrame=OFF/ON(缺省值:ON)UMBs空间不足时,此设置项可决定Win 95将优先权交给扩充内存页框架还是传送缓冲区。为ON则把EMS页框架放入高位内存(具有连续的64KB空闲空间),把传送缓冲区放入常规内存。但是,这会减少虚拟机可使用的常规内存。若DOS应用程序不使用扩充内存,则最好将此设置项设为OFF。(86)SyncTime=OFF/ON(缺省值:ON) 启用该设定,Win 95定期将系统时间与CMOS时钟同步。此设定失效,Win 95通常维持正确的时间,除非TrapTimerPorts设定也失效并运行了导致系统时间比实际时间加快或减慢的应用程序。此设定和TrapTimerPorts设定有关。(87)TimerCriticalSection=毫秒数(缺省值:0) 该设置项指示Win 95进入所有计时器中断码的临界区和指定超时期限(毫秒数)。指定正数表示一次只能有一台虚拟机接收计时器中断。取消此设定,某些网络和其它全局存储器驻留软件可能运行失败,但是,使用此设定会降低系统性能,使系统在短时间内看上去就象停机了一样。  (88)TokenRingSearch=OFF/ON(缺省值:ON) 此设置项用于确定Win 95是否需要在AT级上查找令牌环网络适配器(Token-Ring)。若系统没有使用令牌环网络,而且此查询干扰了其它设备,应将此设备设为OFF。(89)TrapTimerPorts=0/1(缺省值:0) 该设置项指定Win 95是否应该截取应用程序对系统计时器端口进行的读写操作。此设定失效,Win 95就不会截取这些操作,这就使得频繁读写计时器的应用程序运行得更快,但是,这可能会影响Win 95保持精确系统时间的能力。不过,Win 95通常能在此设定失效时检测出应用程序何时改变了计时器中断间隔并及时调整时间。如果感到系统时间似乎较快或较慢,可启用此设定或启用“SyncTime=”设定。后者将使Win 95定期检查时间,并作必要的调整。  (90)UniqueDOSPSP=OFF/ON(缺省值:如运行网络基于Microsoft网或LAN Manager,设为ON,其它网络,设为OFF)启用此设定,Win 95从一个独特的地址(PSP)启动每个应用程序。当Win 95建立新虚拟机运行新应用程序时, Win 95会在应用程序中预留一定数量的存储器(I个字节)。例如:第一个应用程序如果装入地址M,则第二个应用程序装入地址M+I,第三个则为M+2i,以此类推。存储器的数量(I)由PSPIncrement设定决定。这些设定保证不同虚拟机的应用程序从不同的地址开始运行。有些网络使用应用程序的装入地址来标识使用网络的不同进程,在这种网络上若此设定失败,因为网络会把这两个程序当作同一个应用程序。启用此设定,非Windows应用程序的可用存储器会略微减少。  (91)UsableHighArea=段地址范围(缺省值:无)此设置项定义了一个高位内存区域,Win 95可在该区域中查找空闲的UMBs,但需跳过与“EMMExclude=”行定义的重叠区域。此行与EMMExclude结合使用可以找到发生一个UMBs冲突的具体位置。  若需要,Win 95将使用4KB的整数倍的内存空间。设置的区域较大时,则应使用EMMExclude。若此设置区域与EMM386的“X=”参数所排除的某个区域重叠,Win 95将忽略此设置范围。  (92)UseROMFont=OFF/ON(缺省值:ON) 此设置项用于确定在运行全屏幕的非Windows应用程序中显示文本时(包括从一个非Windows应用程序移开时显示的信息),Win 95是否使用视频ROM中的软字体。若在屏幕上有随机出现的点或有形体,就要将此设置设为OFF。微软公司建议,当VGASWAP选择项中带有QUALITA的386MAX或BLUEMAX时,应将设置设为OFF。(93)VGAMonoText=OFF/ON(缺省值:ON) 若应用程序不使用VGA适配器单显模式,应将此设置设为OFF,这样可使Win 95能够访问附加的高位内存块:B000-B7FF。在不使用VGA显示器的系统中,此开关无效。(94)VirtnalHDIrq=OFF/ON(缺省值:AT兼容机设为ON;其它计算机则为OFF) 启用此设定,Win 95直接从硬盘控制器结束中断,从而绕过处理这些中断的ROM例行子程序。此设定失效,由ROM例行子程序处理中断,这将降低系统性能。(95)WindowsKBRequired=字节数(KB)(缺省值:256)此设置项用于定义Win 95启动时必须拥有的空闲常规内存空间。若在启动Win 95时遇到了麻烦,可减小此设置值。(96)WindowsMemSize=-1或字节数(KB)(缺省值:-1) 此设置项指定Win 95使用的常规内存大小。默认状态下(-1),Win 95可随意使用常规内存。  (97)WinExeclusive=0/1(缺省值:0) 此设置禁止非Windows应用程序在后台运行。此行设为1,则当前台有Win 95的应用程序运行时,将终止所有的非Windows应用程序。  (98)WinTimeSlice=前台值,后台值(缺省值:100,50) 当Win 95虚拟机运行于前台或后台时,此设置项用于确定将优先权交给Windows虚拟机还是非Windows虚拟机。在Win 95中,所有的Windows应用程序都在一个虚拟机中运行,而非Windows应用程序则分别在自己的虚拟机中运行。WinTimeSlice与MiniTimeSlice相比,前者指的是相对值,后者指的是使用ms作为测量单位。例如,设WinTimeSlice为100和50,并且没有正在运行的DOS程序,这时Win 95虚拟机将得到100%的处理器时间。假设运行两个非Windows应用程序,WiTimeSlice为100和50。当Windows虚拟机在前台运行时,它得到了近一半的处理器时间,如下面公式所示:OWS虚拟机前台优先值/(第一个DOS虚拟机后台优先值+第二个DOS虚拟机后台优先值)=100/(50+50)当第一个非Windows应用程序在前台运行时,所有的Windows应用程序将总共得到三分之一的处理器时间,如下面的公式所示:OWS虚拟机后台优先值/(第一个DOS虚拟机前台优先值+第二个DOS虚拟机前台优先值)=100/(100+50)若将DOS程序的优先权设定为100和50,即DEFAULT.PIF文件或其它应用程序的PIF文件中不重新设置参数值,则用户可通过提供“WinTimeSlice=”行中的前台参数值来减少后台的非Windows应用程序对前台Windows应用程序的影响,该值可取1~10000。同样,若对前台的非Windows应用程序的性能不满意,可减低“WinTimeSlice=”行的后台优先权。  4.[MCI][MCI]节定义了Win 95的MCI设备有关配置参数。5.[Drivers] [Drivers]节为Win 95的驱动程序有关特殊配置。6.[Keyboard] [Keyboard]节是Win 95的有关键盘特殊配置。  7.[Boot.Description] [Boot.Description]节为Win 95设置程序读取有关系统配置信息(在系统配置屏幕上显示)。8.[Driver32][Driver32]节主要确定WIN 95的32位驱动程序。  9.[TTFontDimenCache] [TTFontDimenCache]节定义Win95的TTF字体CACHE容量。  注:从4~9节的内容一般情况下不要去修改。10.[Power.drv] [Power.drv]节主要为Win 95的节能驱动程序而设置的有关参数。若您的微机属于节能型的,不妨在Win 95中配置它,或者在该小节中增加节能驱动程序。
 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-Blog .Theme from 用友工程师维护博客 By 武汉用友

Copyright www.uni800.com.
Some Rights Reserved.