出口发票在应收中审核失败案例用友软件股份有限公司张睿2010年5月21日具体问题情况:872版本软件,打了SP1补丁,在出口模块中录入了一张出口发票,审批后,传递到应收系统中进行审核,但是审核失败,失败的原因提示:该单据已进行过其他处理或当月已结账,请执行刷新功能后再试。下图就是有问题的这张出口发票,在出口模块中录入保存后,审批在应收模块中审核该出口发票失败失败的原因提示:该单据已进行过其他处理或当月已结账,请执行刷新功能后再试。在单据查询中查看该单据余额和金额一致,未审核状态,所以也没有生成过凭证。点开详细情况,没有任何内容在出口模块中可以弃审该发票,但是重新审批后再到应收模块中审核,问题依旧其他出口发票审核正常,没有该问题,怀疑是数据问题,删除该发票重新录入,但是再审核问题依旧。问题比较奇怪,下面在数据库中跟踪看看具体原因在SQL事件探查器中跟踪出来一条报错信息:Error:8152,Severity:16,State:6是一条往Ap_Detail中插入记录的语句执行报错,这正好是应收系统单据审核在数据库中要执行的步骤,应该是插入的该记录有问题,下面我们看看插入的记录的具体内容把跟踪出来的语句在查询分析器中执行,提示错误:将截断字符串或二进制数据。分析应该是插入的记录中某字段的内容超长,导致插入失败分析该语句,插入Ap_Detail表中的记录是通过v_ex_invoicelistforar视图查询出来的,查看该视图的内容,主要是查询出口发票表头和表体字段的内容那么说明应该是该出口发票上的某个项目内容超长。和其他能正常审核的发票仔细比较,发现该发票除了备注内容较长,其他项目都没有问题,那么真正的原因是不是和备注有关呢?查询数据字典,出口发票备注是ex_invoice表的cmemos字段通过语句发现,该字段的内容将要插入到Ap_Detail表中的cDigest字段中在企业管理器中查看ex_invoice表的cmemos字段的长度为200而Ap_Detail表中的cDigest字段长度为60,小于200。这说明如果出口发票上的备注字段内容长度一旦超过60,就会导致记录插入失败,也就是审核失败。问题的原因找到了,是程序的问题,提交问题后,开发出了最新的AR补丁,来解决该问题。安装最新的应收补丁,补丁编号:CP-U872-2906-100331-AR.msi即可解决该问题。安装好该补丁后查看U8SOFT\Admin\UFDBTMP\Data_STR_AP_U872_NL.SQL脚本,加了一条修改cDigest字段长度的语句:altertableap_detailaltercolumncDigestnvarchar(200)NULL将cDigest长度也改成200下图再重新在应收模块中审核该出口发票成功经过测试,发现872版本,没有安装SP1补丁的时候不存在该问题。因为没有安装SP1补丁,ex_invoice表的cmemos字段的长度为60,和Ap_Detail表中的cDigest字段长度一致。而安装SP1以后,ex_invoice表的cmemos字段的长度更新为200,Ap_Detail表中的cDigest字段长度没有同步更新,导致问题出现。